hive 内置的 explode 函数,它接收一个 array 或者 map 类型的数据作为输入,然后将 array 或 map 里面的元素按照每行的形式输出。一般情况下,其可以配合 LATERAL VIEW
一起使用。
解析 array 或 map 数据
hive> SELECT EXPLODE(ARRAY('A', 'B', 'C'));
OK A B C
hive> SELECT EXPLODE(MAP('A', 10, 'B', 20, 'C', 30));
OK A 10 B 20 C 30
搭配 lateral view 使用
LATERAL VIEW 顾名思义就是摊开数据,有如下几点特性:
- LATERAL VIEW 用于和 UDTF 函数(如 explode、split)结合来使用。
- 它通过 UDTF 函数将数据拆分成多行,再将多行结果组合成一个支持别名的虚拟表。
- 主要解决在 SELECT 使用 UDTF 做查询的过程中查询只能包含单个 UDTF,不能包含其它字段以及多个 UDTF 的情况。
语法如下:
LATERAL VIEW udtf(expression) tableAlias AS columnAlias
示例如下:
SELECT
a.dp,
a.item
FROM
(
SELECT
dp,
ARRAY(GET_JSON_OBJECT(log_info, '$.item_list')) AS item_list
FROM
xxx.ods_xxx_log
WHERE
dp = '2021-10-05'
)
a LATERAL VIEW EXPLODE(item_list) t1 AS item