hive新特性reflect函數介紹


  reflect函數可以支持在sql中調用java中的自帶函數,秒殺一切udf函數。

 

使用案例1:所有記錄執行相同的java內置函數

hive中建一張表test_udf:column1(int),column2(int)

表中數據如下:

1,2

2,3

3,4

4,5

5,6

sql:select reflect("java.lang.Math","max",column1,column2) from test_udf

結果:

2

3

4

5

6

 

可以根據自己的需求使用其他內置函數,以后不用苦逼的求udf開發人員給自己特定開發了。當然特殊場景還是需要的。下面來個更絕的用法。

 

使用案例2:不同記錄執行不同的java內置函數

建表test_udf2:class_name(string),method_name(string),column1,column2

數據如下:

java.lang.Math,min,1,2

java.lang.Math,max,2,3

sql:select reflect(class_name,method_name,column1,column2) from test_udf2;

結果:

1

3

 

使用案例3:使用apache commons中的函數,commons下的jar已經包含在hadoop的classpath中,所以可以直接使用。

使用方式如下:

select reflect("org.apache.commons.lang.math.NumberUtils","isNumber","123") from dual;

結果:

true

 

使用案例4:使用第三方jar

add jar hdfs://hdpnn:9000/group/analysts/ide_taobao-hz_boqian.zwq/hive/udf_jar/11354193197093.jar;

select reflect(class_name,method_name,"123") from dual;



其他函數功能等待大家嘗試。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM