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. **
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.
reflect(class, method[, arg1[, arg2..]])
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
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
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
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.