[JAVA] Versuchen Sie für die Aggregationsverarbeitung, die mit der vordefinierten Hive-Funktion nicht durchgeführt werden kann, zunächst die Reflect-Funktion.

Überblick

Bei der Aggregation mit Hadoop / Hive wird der Aggregationsprozess, der von der vordefinierten Funktion nicht realisiert werden kann, behandelt, indem eine benutzerdefinierte UDF erstellt, das Ergebnis ausgegeben und dann mit einem anderen Programm verarbeitet wird. Es ist jedoch einfach, dies in der Hive-Abfrage zu handhaben, da es schwierig ist, einen anderen Code zu schreiben, und es schwierig ist, ihn zu verwalten.

Wenn die gewünschte Arbeit von einer vorhandenen Java-Klasse ausgeführt werden kann, kann die Reflect-Funktion von ** Hive dies möglicherweise tun, ohne einen eigenen Wrapper zu schreiben. **

Umgebung

Hive 0.9 oder höher (Verifizierungsumgebung ist 2.1.0)

Reflect UDF https://cwiki.apache.org/confluence/display/Hive/ReflectUDF Instanziieren und Aufrufen einer Methode eines Objekts mithilfe der Java-Reflektion. Sie können auch statische Funktionen aufrufen.

Diese Methode sollte einen primitiven Typ oder einen Typ zurückgeben, den Hive serialisieren kann.

Basic


reflect(class, method[, arg1[, arg2..]])

Beispiel 1. Zeichenkette / numerische Verarbeitung

Das Beispiel ist eine Funktion, die mit einer vordefinierten Funktion realisiert werden kann. Sie können die in der Java-Klasse implementierte Verarbeitung frei aufrufen, um den juckenden Ort zu erreichen.


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

Fall 2. URL-Codierung / -Decodierung

Die URL des Suchergebnisbildschirms enthält die freie Eingabezeichenfolge des Benutzers (Suchzeichenfolge). Da die Suchzeichenfolge jedoch normalerweise in einem URL-codierten Zustand im Protokoll aufgezeichnet wird, wird sie in eine Zeichenfolge dekodiert, die vom Analysten gelesen werden kann. Die Verarbeitung ist bequem. Durch Kombinieren dieses Prozesses kann die ** Generierung der Rangfolge der Suchzeichenfolgen usw. aus dem Zugriffsprotokoll mit einer Abfrage abgeschlossen werden **

Da der Verarbeitungsinhalt einfach ist, ist es am besten, die Reflektionsfunktion zu verwenden.


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%B8 Testnachricht Testnachricht

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

Fall 3. Hash-Wertgenerierung

Viele Hash-Funktionen sind bereits in den integrierten Funktionen seit Hive 1.3 verfügbar. Auch in früheren Versionen können Sie Formate frei aufrufen und generieren, die nicht in den integrierten Funktionen enthalten sind.

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

Zusammenfassung

Die neueste Version verfügt über viele integrierte Funktionen, sodass ich keinen Mangel verspüre. https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF

Teile, die außerhalb der Reichweite von juckenden Bereichen liegen, wie z. B. URL-Codierung / -Decodierung, werden auch in Zukunft angezeigt. Allzweck- / primitive Verarbeitung, für die keine UDF erforderlich ist, möchten Sie einfach verarbeiten.

Wenn Sie die Reflect-Funktion verwenden, können Sie die Bequemlichkeit und Bequemlichkeit genießen.

Referenz

Recommended Posts

Versuchen Sie für die Aggregationsverarbeitung, die mit der vordefinierten Hive-Funktion nicht durchgeführt werden kann, zunächst die Reflect-Funktion.
[Erstes Java] Machen Sie etwas, das vorerst mit Intellij funktioniert