全部產品
Search
文件中心

:UDTF使用說明

更新時間:Jun 19, 2024

本文為您介紹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 UDTFPython UDTF

使用限制

UDTF的使用限制如下:
  • 同一個select子句中不允許有其他運算式。
    select value, user_udtf(key) as mycol ...
  • UDTF不能嵌套使用。
    select user_udtf1(user_udtf2(key)) as mycol...
  • 不支援在同一個select子句中與group bydistribute bysort 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          |
+------------+------------+------------+