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;
其他函數功能等待大家嘗試。
