本文為您介紹Java UDTF和Python UDTF的使用方式和使用限制。
使用方式
UDTF在SQL中的使用方式如下。
select user_udtf(col0, col1, col2) as (c0, c1) from my_table;
select user_udtf(col0, col1, col2) as (c0, c1) from (select * from my_table distribute by key sort by key) t;
select reduce_udtf(col0, col1, col2) as (c0, c1) from (select col0, col1, col2 from (select map_udtf(a0, a1, a2, a3) as (col0, col1, col2) from my_table) t1 distribute by col0 sort by col0, col1) t2;
UDTF的詳細使用說明請參見Java UDTF和Python UDTF。
使用限制
UDTF的使用限制如下:
- 同一個
select
子句中不允許有其他運算式。select value, user_udtf(key) as mycol ...
- UDTF不能嵌套使用。
select user_udtf1(user_udtf2(key)) as mycol...
- 不支援在同一個
select
子句中與group by
、distribute by
、sort by
聯用。select user_udtf(key) as mycol ... group by mycol;
使用樣本
為便於理解,為您提供通過MaxCompute內建UDTF函數與Lateral View結合,將單行數組型資料拆分為多行資料的樣本。
假設已有一張表pageAds,它有三列資料,第一列是pageid string,第二列是col1 array<int>,第三列是col2 array<string>,詳細資料如下。
pageid | col1 | col2 |
front_page | [1, 2, 3] | [a, b, c] |
contact_page | [3, 4, 5] | [d, e, f] |
將col1和col2兩列資料全部拆分,按行展示每一條資料。命令樣本如下:
select pageid,mycol1, mycol2 from pageAds
lateral view explode(col1) myTable1 as mycol1
lateral view explode(col2) myTable2 as mycol2;
返回結果如下:+------------+------------+------------+
| pageid | mycol1 | mycol2 |
+------------+------------+------------+
| front_page | 1 | a |
| front_page | 1 | b |
| front_page | 1 | c |
| front_page | 2 | a |
| front_page | 2 | b |
| front_page | 2 | c |
| front_page | 3 | a |
| front_page | 3 | b |
| front_page | 3 | c |
| contact_page | 3 | d |
| contact_page | 3 | e |
| contact_page | 3 | f |
| contact_page | 4 | d |
| contact_page | 4 | e |
| contact_page | 4 | f |
| contact_page | 5 | d |
| contact_page | 5 | e |
| contact_page | 5 | f |
+------------+------------+------------+