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
Shell 脚本中的注释以行开头 # 为标识,这样解释器会忽略该行;至于多行注释,Shell 中没有专有的方法,只能每一行开头加 "#" 号 ...
在Hive中,INSERTOVERWRITE和INSERTINTO是用于将数据加载到表中的两种常见方式。示例代码:INSERTOVERWRI ...
集合(set)是一个无序且不重复的元素集合。可以使用大括号{}或者内置类set来创建集合。 ...
HiveQL 是 Hive 的查询语言。和普遍使用的所有 SQL 方言一样,它不完全遵守任何一种 ANSI SQL 标准的修订版。HiveQ ...
Hive SQL 聚合统计函数 COUNT 类似于标准 SQL 的 COUNT 函数,用来计算符合条件的行数。 ...