說明
此處整理了下使用到的UDF函式,還有很多后面陸陸續續會更新上來,
代碼寫的不完善,后面我也會繼續跟進,
代碼部分已經上傳到github了,點擊此處
嫌麻煩可以直接用release包
目錄
- 說明
- UDF
- udf_args_max : 回傳輸入引數串列的最大值
- udf_args_max_index : 回傳輸入引數串列的最大值對應的下標(從0開始)
- udf_args_min : 回傳輸入引數串列的最小值對應的下標(從0開始)
- udf_args_min_index : 回傳輸入引數串列的最小值
- udf_array_concat : 陣列拼接(不去重)
- udf_array_distinct_concat : 陣列拼接(去重)
- udf_array_exclude_index : 陣列排除資料(從第一個陣列中,排除掉下標在第二個陣列中包含的值)
- udf_array_exclude_value : 陣列排除資料(從第一個陣列中,排除掉在第二個陣列中包含的值)
- udf_array_intersect : 陣列交集(獲得第陣列之間的交集)
- udf_array_slice : 陣列截取(array,開始下標,截取長度)
- udf_is_number : 判斷是否為數字,兼容字串
- udf_map_exclude : func(map,array),按array中的key洗掉map中的資料
- UDTF
- udtf_json_array_explode : 拆解json array,回傳json和下標
進入命令列,添加包(以我自己路徑為例)
add jar file:///home/hadoop/hive-udf-1.0-SNAPSHOT.jar;
UDF
udf_args_max : 回傳輸入引數串列的最大值
-- 注冊函式
CREATE TEMPORARY FUNCTION udf_args_max AS 'udf.UDFArgsMax';
-- 案例1
select udf_args_max(1,2,null,5,10) as res;
-- 結果
+------+
| res |
+------+
| 10 |
+------+
-- 案例2
select udf_args_max(null,'2021-12-01','2021-12-02',null,'2021-12-05','2021-12-06') as res;
-- 結果
+-------------+
| res |
+-------------+
| 2021-12-06 |
+-------------+
udf_args_max_index : 回傳輸入引數串列的最大值對應的下標(從0開始)
-- 注冊函式
CREATE TEMPORARY FUNCTION udf_args_max_index AS 'udf.UDFArgsMaxIndex';
-- 案例1
select udf_args_max_index(1,2,null,5,10) as res;
-- 結果
+------+
| res |
+------+
| 4 |
+------+
udf_args_min : 回傳輸入引數串列的最小值對應的下標(從0開始)
-- 注冊函式
CREATE TEMPORARY FUNCTION udf_args_min_index AS 'udf.UDFArgsMinIndex';
-- 案例1
select udf_args_min_index(1,2,null,5,10);
-- 結果
+------+
| _c0 |
+------+
| 1 |
+------+
udf_args_min_index : 回傳輸入引數串列的最小值
-- 注冊函式
CREATE TEMPORARY FUNCTION udf_args_min AS 'udf.UDFArgsMin';
-- 案例1
select udf_args_min_index(1,2,null,5,10) as res;
-- 結果
+------+
| res |
+------+
| 0 |
+------+
udf_array_concat : 陣列拼接(不去重)
-- 注冊函式
CREATE TEMPORARY FUNCTION udf_array_concat AS 'udf.UDFArrayConcat';
-- 案例1
select udf_array_concat(array(1,2,3),array(2,3,4)) as res;
-- 結果
+----------------+
| res |
+----------------+
| [1,2,3,2,3,4] |
+----------------+
udf_array_distinct_concat : 陣列拼接(去重)
-- 注冊函式
CREATE TEMPORARY FUNCTION udf_array_distinct_concat AS 'udf.UDFArrayDistinctConcat';
-- 案例1
select udf_array_distinct_concat(array(1,2,3),array(2,3,4)) as res;
-- 結果
+------------+
| res |
+------------+
| [1,2,3,4] |
+------------+
udf_array_exclude_index : 陣列排除資料(從第一個陣列中,排除掉下標在第二個陣列中包含的值)
-- 注冊函式
CREATE TEMPORARY FUNCTION udf_array_exclude_index AS 'udf.UDFArrayExcludeIndex';
-- 案例1
select udf_array_exclude_index(array(10,20,30,40,50),array(1,2,3)) as res;
-- 結果
+----------+
| res |
+----------+
| [10,50] |
+----------+
udf_array_exclude_value : 陣列排除資料(從第一個陣列中,排除掉在第二個陣列中包含的值)
-- 注冊函式
CREATE TEMPORARY FUNCTION udf_array_exclude_value AS 'udf.UDFArrayExcludeValue';
-- 案例1
select udf_array_exclude_value(array('SS','UU','BB'),array('UU')) as res;
-- 結果
+--------------+
| res |
+--------------+
| ["SS","BB"] |
+--------------+
udf_array_intersect : 陣列交集(獲得第陣列之間的交集)
-- 注冊函式
CREATE TEMPORARY FUNCTION udf_array_intersect AS 'udf.UDFArrayIntersect';
-- 案例1
select udf_array_intersect(array('SS','UU','BB'),array('UU')) as res;
-- 結果
+--------------+
| res |
+--------------+
| ["SS","BB"] |
+--------------+
-- 案例2
select udf_array_intersect(array(101,202,303,404),array(101,404),array(404)) as res;
-- 結果
+--------+
| res |
+--------+
| [404] |
+--------+
udf_array_slice : 陣列截取(array,開始下標,截取長度)
-- 注冊函式
CREATE TEMPORARY FUNCTION udf_array_slice AS 'udf.UDFArraySlice';
-- 案例1
select udf_array_slice(array('SS','UU','BB','XX','YY','ZZ'),0,3) as res;
-- 結果
+-------------------+
| res |
+-------------------+
| ["SS","UU","BB"] |
+-------------------+
-- 案例2
select udf_array_slice(array(101,202,303,404),1,1) as res;
-- 結果
+--------+
| res |
+--------+
| [202] |
+--------+
udf_is_number : 判斷是否為數字,兼容字串
-- 注冊函式
CREATE TEMPORARY FUNCTION udf_is_number AS 'udf.UDFIsNumber';
-- 案例1
select udf_is_number('1000.12345') as res;
-- 結果
+-------+
| res |
+-------+
| true |
+-------+
-- 案例2
select udf_is_number('1000.1xyz5') as res;
-- 結果
+--------+
| res |
+--------+
| false |
+--------+
udf_map_exclude : func(map,array),按array中的key洗掉map中的資料
-- 注冊函式
CREATE TEMPORARY FUNCTION udf_map_exclude AS 'udf.UDFMapExclude';
-- 案例1
select udf_map_exclude(str_to_map('name:zhangsan,age:25',',',':'),array('age')) as res;
-- 結果
+----------------------+
| res |
+----------------------+
| {"name":"zhangsan"} |
+----------------------+
UDTF
udtf_json_array_explode : 拆解json array,回傳json和下標
-- 注冊函式
CREATE TEMPORARY FUNCTION udtf_json_array_explode AS 'udtf.UDTFJsonArrayExplode';
-- 案例1
with tmp as (
select '[{"name":"AA","age":18},{"name":"BB","age":22},{"name":"CC","age":25}]' as json_array_string
)
select
a.json_array_string,
b.json,
b.index
from tmp a
lateral view udtf_json_array_explode(json_array_string) b as json,index;
-- 結果
+----------------------------------------------------+-------------------------+----------+
| a.json_array_string | b.json | b.index |
+----------------------------------------------------+-------------------------+----------+
| [{"name":"AA","age":18},{"name":"BB","age":22},{"name":"CC","age":25}] | {"name":"AA","age":18} | 1 |
| [{"name":"AA","age":18},{"name":"BB","age":22},{"name":"CC","age":25}] | {"name":"BB","age":22} | 2 |
| [{"name":"AA","age":18},{"name":"BB","age":22},{"name":"CC","age":25}] | {"name":"CC","age":25} | 3 |
+----------------------------------------------------+-------------------------+----------+
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/383011.html
標籤:其他
上一篇:力扣二叉樹相關面試題(5道)
