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