簡體   English   中英

使用 Hive 表的 Hive UDF

[英]Hive UDF that uses Hive table

我在 java 中開發了一個可以正常工作的 hive udf,我的函數返回輸入和 hive 表中列之間的最佳匹配,所以它有這個簡化的偽代碼:

class myudf  extends udf{

    evaluate(Text input){

        getNewHiveConnection(); //i want to replace this by getCurrentHiveUserConnetion();
        executeHiveQuery(input);
        return something;
}

我的問題是,如果這個函數是由 Hive 調用的,為什么我需要在我的代碼中連接到 Hive? 我可以使用使用我的功能的用戶所連接的當前連接嗎?

如果您想從查詢中的整個列返回最接近的匹配項,您可以將其視為某種聚合並使用 Hive UDAF: https ://cwiki.apache.org/confluence/display/Hive/GenericUDAFCaseStudy

還有非常方便的教程: http : //beekeeperdata.com/posts/hadoop/2015/08/17/hive-udaf-tutorial.html

另一種方法是創建宏。 他們在 Hive 和 Beeline 上都工作。

CREATE TEMPORARY MACRO fn_maskNull(input decimal(25,3))
CASE
    WHEN input IS NULL THEN 0 else input
END;

-- usage
select fn_maskNull(null), fn_maskNull(101);

更多信息 :

https://medium.com/@gchandra/create-user-defined-functions-in-hive-beeline-ff965285d735

是的 - 您可以使 UDF 永久化。 例如:

CREATE FUNCTION MatchFinder as 'com.mycompany.packagex.myudf' using jar  'hdfs:///an_HDFS_directory/my_jar_name.jar';

這將使您的功能永久化,任何人都可以調用它。 在這種情況下,jar 文件存儲在 HDFS 上以方便訪問,但還有其他選項。

有關更多詳細信息,請參閱Hive wiki

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM