1.4.11、内置UDTF函数
1.4.11.1、explode
select explode(array(100,200,300));
Array<int> myCol |
[100,200,300] |
[400,500,600] |
得到的结果如下:
(int) myNewCol |
100 |
200 |
300 |
400 |
500 |
600 |
1.4.11.2、posexplode
select posexplode(array('A','B','C'));
1.4.11.3、parse_url_tuple
select parse_url_tuple('http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1','HOST', 'PATH', 'QUERY', 'QUERY:id');
1.4.11.5、inline
select inline(array(struct('A',10,date '2015-01-01'),struct('B',20,date '2016-02-02')));
1.4.11.6、stack
select stack(2,'A',10,date '2015-01-01','B',20,date '2016-01-01');
1.4.11.7、json_tuple
select json_tuple('{"a":1,"b":2}','a','b','c');
返回值类型 | 函数名称 | 功能描述 |
T | explode(ARRAY<T> a) | 将数组分解为多行。返回具有单列 (col) 的行集,数组中的每个元素对应一行。 |
Tkey,Tvalue | explode(MAP<Tkey,Tvalue> m) | 将map分解为多行。返回一个包含两列 (key,value) 的行集,输入映射中的每个键值对对应一行。 (从 Hive 0.8.0 开始。),炸裂 |
int,T | posexplode(ARRAY<T> a) | 使用 int 类型的附加位置列(原始数组中项目的位置,从 0 开始)将数组分解为多行。返回一个包含两列 (pos,val) 的行集,数组中的每个元素占一行,其实就是带有序号的explode功能 |
T1,...,Tn | inline(ARRAY<STRUCT<f1:T1,...,fn:Tn>> a) | 将一个结构数组分解为多行。返回一个有N列的行集(N=结构中顶级元素的数量),每个结构在数组中都有一行。(从Hive 0.10开始) |
T1,...,Tn/r | stack(int r,T1 V1,...,Tn/r Vn) | 将 n 个值 V1,...,Vn 分解为 r 行。每行将有 n/r 列。 r 必须是常数 |
string1,...,stringn | json_tuple(string jsonStr,string k1,...,string kn) | 接受 JSON 字符串和一组 n 个键,并返回 n 个值的元组。这是 get_json_object UDF 的更高效版本,因为它可以通过一次调用获取多个键。 |
string 1,...,stringn | parse_url_tuple(string urlStr,string p1,...,string pn) | 获取 URL 字符串和一组 n 个 URL 部分,并返回一个包含 n 个值的元组。这类似于 parse_url() UDF,但可以一次从 URL 中提取多个部分。有效的部分名称为:HOST、PATH、QUERY、REF、PROTOCOL、AUTHORITY、FILE、USE |