目录
1.explode(ARRAY<T> a)
返回值:T
功能:将数组分解为多行。返回具有单个列(col)的行集,数组中每个元素为一行。
示例:
> select explode(array('A','B','C')) as col;
+------+
| col |
+------+
| A |
| B |
| C |
+------+
2.explode(MAP<Tkey,Tvalue> m)
返回值:Tkey,Tvalue
功能:将MAP分解为多行。返回具有2个列(key,value)的行集,map中每组KV对为一行。
示例:
> select explode(map('A',10,'B',20,'C',30)) as (key,value);
+------+--------+
| key | value |
+------+--------+
| A | 10 |
| B | 20 |
| C | 30 |
+------+--------+
3.posexplode(ARRAY<T> a)
返回值:int,T
功能:使用int类型的附加位置列(元素在原始数组中从0开始的位置)将数组分解为多行。返回具有2个列(pos,val)的行集,数组中每个元素为一行。
示例:
> select posexplode(array('A','B','C')) as (pos,val);
+------+------+
| pos | val |
+------+------+
| 0 | A |
| 1 | B |
| 2 | C |
+------+------+
4.inline(ARRAY<STRUCT<f1:T1,…,fn:Tn>> a)
返回值:T1,…,Tn
功能:将结构体类型的数组分解为多行。返回具有N(N为结构体中顶级元素的个数)个列的行集,数组中每个结构体为一行。
示例:
> select inline(array(struct('A',10,date '2015-01-01'),struct('B',20,date '2016-02-02'))) as (col1,col2,col3);
+-------+-------+-------------+
| col1 | col2 | col3 |
+-------+-------+-------------+
| A | 10 | 2015-01-01 |
| B | 20 | 2016-02-02 |
+-------+-------+-------------+
5.stack(int r,T1 V1,…,Tn/r Vn)
返回值:T1,…,Tn/r
功能:将n个值V1,…,Vn 转换为r行,每行有n/r个字段。r必须是一个常数
示例:
> select stack(2,'A',10,date '2015-01-01','B',20,date '2016-01-01') as (col0,col1,col2);
+-------+-------+-------------+
| col0 | col1 | col2 |
+-------+-------+-------------+
| A | 10 | 2015-01-01 |
| B | 20 | 2016-01-01 |
+-------+-------+-------------+
6.json_tuple(string jsonStr,string k1,…,string kn)
返回值:string1,…,stringn
功能:接受一个json字符串和n个key,并返回n个值的tuple。这比get_json_object UDF更高效,因为一个调用就可以获得多个key的值
示例:
> select json_tuple('{"name":"LiMing","sex":"male","age":"38"}','name','age') as (name,age);
+---------+------+
| name | age |
+---------+------+
| LiMing | 38 |
+---------+------+
7.parse_url_tuple(string urlStr,string p1,…,string pn)
返回值:string1,…,stringn
功能:接收一个URL字符串和n个URL部分,并返回n个值的tuple。类似于parse_url() UDF,但可以从一个URL 中一次提取多个部分。有效的部分名称是:HOST, PATH, QUERY, REF, PROTOCOL, AUTHORITY, FILE, USERINFO, QUERY:
示例:
> SELECT parse_url_tuple('http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1', 'HOST','PATH', 'REF') as (host,path,ref);
+---------------+---------------+-------+
| host | path | ref |
+---------------+---------------+-------+
| facebook.com | /path1/p.php | Ref1 |
+---------------+---------------+-------+
参考
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-Built-inTable-GeneratingFunctions(UDTF)
https://www.cnblogs.com/MOBIN/p/5618747.html#8