您可以在SQL分析任务中使用复杂类型函数处理复杂数据类型,例如ARRAY、MAP。本文为您提供SQL分析任务支持的复杂类型函数的命令格式、参数说明及示例,指导您使用复杂类型函数完成开发。
SQL支持的复杂类函数如下。
函数 | 功能 |
将一行数据转为多行的UDTF。 |
EXPLODE
使用限制
在一个
select
中只能出现一个explode
函数,不可以出现表的其他列。不可以与
group by
、cluster by
、distribute by
、sort by
一起使用。
命令格式
explode (<var>)
命令说明
将一行数据转为多行的UDTF。
如果参数是
array<T>
类型,则将列中存储的ARRAY转为多行。如果参数是
map<K, V>
类型,则将列中存储的MAP的每个Key-Value对转换为包含两列的行,其中一列存储Key,另一列存储Value。如果表中存在NULL数据,不会单独返回。
参数说明
var:必填。
array<T>
类型或map<K, V>
类型。返回值说明
返回转换后的行。
示例
示例1:
例如表
t_table_map
的字段为c1 bigint, t_map map<string,bigint>
,包含数据如下:+------------+-------+ | c1 | t_map | +------------+-------+ | 1000 | {k11:86, k21:15} | | 1001 | {k12:97, k22:2} | | 1002 | {k13:99, k23:1} | +------------+-------+
命令示例如下。
select explode(t_map) from t_table_map; --返回结果如下。 +-----+------------+ | key | value | +-----+------------+ | k11 | 86 | | k21 | 15 | | k12 | 97 | | k22 | 2 | | k13 | 99 | | k23 | 1 | +-----+------------+
示例2:
返回结果中不包含单独的NULL行数据。
--创建表 create table explod_array (arr array<string>); --插入数据 insert into table explod_array values (array('1','2','3',null,'agb')), (array('1','2','3',null,'ag')), (null); --查询数据 select * from explod_array; --返回: +------------+ | arr | +------------+ | ["1","2","3",null,"agb"] | | ["1","2","3",null,"ag"] | | NULL | +------------+ --展开数据 select explode(arr) from explod_array; --返回结果里没有包括单独的NULL行数据 +------------+ | col | +------------+ | 1 | | 2 | | 3 | | NULL | | agb | | 1 | | 2 | | 3 | | NULL | | ag | +------------+