Hive 基本教程

Hive SQL

Hive 笔记

original icon
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.knowledgedict.com/tutorial/hive-sql-dml-lateral-view.html

Hive 的 LATERAL VIEW 集合列数据单行转多行的用法

Hive SQL 数据操作(DML)详解 Hive SQL 数据操作(DML)详解


Hive 中的 LATERAL VIEW 主要功能是将原本汇总在一条(行)的数据拆分成多条(行)成虚拟表,再与原表进行笛卡尔积,从而得到明细表。简单讲就是为了将具有集合意义的字段(ARRAYMAP)数据摊开而设计的语法。

语法

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_Acol_Bcol_array 是表 table 的字段,其中 col_array 是 hive 的 ARRAY 类型字段;

tmp_tableEXPLODE 形成的虚拟新表,可以不用写;

tmp_colEXPLODE 形成的新列。

示例

示例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