Lors de l'agrégation avec Hadoop / Hive, le processus d'agrégation qui ne peut pas être réalisé par la fonction prédéfinie sera géré en créant un UDF personnalisé, en produisant le résultat, puis en le traitant avec un autre programme. Cependant, il est facile de le gérer dans la requête Hive car il est difficile d'écrire un autre code et il est difficile à gérer.
Si le travail que vous souhaitez faire peut être géré par une classe Java existante, ** la fonction Reflect de Hive peut le faire sans écrire votre propre wrapper **.
Hive 0.9 ou supérieur (l'environnement de vérification est 2.1.0)
Reflect UDF https://cwiki.apache.org/confluence/display/Hive/ReflectUDF Instanciez et appelez une méthode d'un objet à l'aide de la réflexion Java. Vous pouvez également appeler des fonctions statiques.
Cette méthode doit renvoyer un type primitif ou un type que Hive sait sérialiser.
reflect(class, method[, arg1[, arg2..]])
L'exemple est une fonction qui peut être réalisée avec une fonction prédéfinie, Vous pouvez appeler librement le traitement implémenté dans la classe java, afin que vous puissiez atteindre l'endroit qui démange.
SELECT reflect("java.lang.String", "valueOf", 1),
reflect("java.lang.String", "isEmpty"),
reflect("java.lang.Math", "max", 2, 3),
reflect("java.lang.Math", "min", 2, 3),
reflect("java.lang.Math", "round", 2.5),
reflect("java.lang.Math", "exp", 1.0),
reflect("java.lang.Math", "floor", 1.9),
reflect("java.lang.Math", "abs", -10)
FROM src LIMIT 1;
1 true 3 2 3 2.718281828459045 1.0 10
https://docs.oracle.com/javase/jp/8/docs/api/java/lang/String.html https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Math.html
L'URL de l'écran des résultats de la recherche comprend la chaîne de caractères d'entrée gratuite de l'utilisateur (chaîne de caractères de recherche), mais comme la chaîne de caractères de recherche est généralement enregistrée dans le journal dans un état encodé en URL, elle est décodée en une chaîne de caractères qui peut être lue par l'analyste. Le traitement à faire est pratique. En combinant ce processus, ** la génération du classement des chaînes de caractères de recherche, etc. à partir du journal d'accès peut être complétée avec une seule requête **
Étant donné que le contenu de traitement est simple, il est préférable d'utiliser la fonction de réflexion.
SELECT
encoded_url,
reflect("org.apache.commons.codec.net.URLCodec", "decode", encoded_url, "UTF-8"),
reflect("java.net.URLDecoder", "decode", encoded_url, "UTF-8")
FROM src LIMIT 1;
%E3%83%86%E3%82%B9%E3%83%88%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%Message de test du message de test B8
https://docs.oracle.com/javase/jp/8/docs/api/java/net/URLDecoder.html https://commons.apache.org/proper/commons-codec/apidocs/org/apache/commons/codec/net/URLCodec.html
De nombreuses fonctions de hachage sont déjà disponibles dans les fonctions intégrées depuis Hive 1.3, Même dans les versions antérieures, vous pouvez appeler et générer librement des formats qui ne figurent pas dans les fonctions intégrées.
SELECT
md5('hoge'),
sha2('hoge',256),
sha2('hoge',384),
sha2('hoge',512),
reflect('org.apache.commons.codec.digest.DigestUtils', 'md5Hex', 'hoge'),
reflect('org.apache.commons.codec.digest.DigestUtils', 'sha256Hex', 'hoge'),
reflect('org.apache.commons.codec.digest.DigestUtils', 'sha384Hex', 'hoge'),
reflect('org.apache.commons.codec.digest.DigestUtils', 'sha512Hex', 'hoge')
from src LIMIT 1;
ea703e7aa1efda0064eaa507d9e8ab7e
ecb666d778725ec97307044d642bf4d160aabb76f56c0069c71ea25b1e926825 cc2aa04a6cb251b8d9dfbacc60b806587456d3fc356dc832116b9ba188713e6adf5f995b750d86b0883b24d07a37c720 dbb50237ad3fa5b818b8eeca9ca25a047e0f29517db2b25f4a8db5f717ff90bf0b7e94ef4f5c4e313dfb06e48fbd9a2e40795906a75c470cdb619cf9c2d4f6d9
ea703e7aa1efda0064eaa507d9e8ab7e
ecb666d778725ec97307044d642bf4d160aabb76f56c0069c71ea25b1e926825 cc2aa04a6cb251b8d9dfbacc60b806587456d3fc356dc832116b9ba188713e6adf5f995b750d86b0883b24d07a37c720 dbb50237ad3fa5b818b8eeca9ca25a047e0f29517db2b25f4a8db5f717ff90bf0b7e94ef4f5c4e313dfb06e48fbd9a2e40795906a75c470cdb619cf9c2d4f6d9
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF https://commons.apache.org/proper/commons-codec/apidocs/org/apache/commons/codec/digest/DigestUtils.html
La dernière version a beaucoup de fonctions intégrées, donc je ne ressens aucune pénurie, https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF
Les parties qui sont hors de portée des zones qui démangent telles que le codage / décodage d'URL continueront à apparaître à l'avenir. Le traitement à usage général / primitif qui ne nécessite pas d'UDF est quelque chose que vous souhaitez traiter facilement.
Si vous utilisez la fonction Reflect, vous pouvez profiter de sa commodité et de sa commodité.