Hive 中的 LATERAL VIEW
主要功能是将原本汇总在一条(行)的数据拆分成多条(行)成虚拟表,再与原表进行笛卡尔积,从而得到明细表。简单讲就是为了将具有集合意义的字段(ARRAY
或 MAP
)数据摊开而设计的语法。
语法
LATERAL VIEW
配合 UDTF(user-defined table-generating function,用户定义表生成函数)使用,一般情况下经常与 EXPLODE
函数搭配。
EXPLODE
的操作对象(列值)是 ARRAY
或者 MAP
类型,也可以通过 SPLIT
函数将 STRING
类型的列值转成 ARRAY
来处理。
语法格式如下:
LATERAL VIEW udtf_function( expression [, ...] ) [ table_identifier ] AS column_identifier [, ...]
SELECT col_A, col_B, tmp_table.tmp_col
FROM table
LATERAL VIEW EXPLODE(col_array) tmp_table AS tmp_col
WHERE partition_col='xxx'
语法说明:
col_A、col_B、col_array 是表 table 的字段,其中 col_array 是 hive 的 ARRAY
类型字段;
tmp_table 是 EXPLODE
形成的虚拟新表,可以不用写;
tmp_col 是 EXPLODE
形成的新列。
示例
示例1,假设 ods_feature_log 表有 item_list ARRAY
类型的字段,将其一行记录转成 item_list 个数行的记录。
SELECT a.dp
,a.context
,a.user
,t1.item
FROM (
SELECT dp
,context
,user
,item_list
FROM ods_feature_log
WHERE dp = '${dp}'
) a
LATERAL VIEW EXPLODE(item_list) t1 AS item