HIVE lateral view

本文介绍LateralView语法及其应用场景,包括如何使用LateralView与UDTF(如explode)结合,将单行数据拆分为多行,并展示如何进一步聚合拆分后的数据。通过具体示例,演示了LateralView在实际数据处理中的应用。

Lateral View语法

lateralView: LATERAL VIEW udtf(expression) tableAlias AS columnAlias (',' columnAlias)*
fromClause: FROM baseTable (lateralView)*

描述

lateral view用于和split, explode等UDTF一起使用,它能够将一行数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。lateral view首先为原始表的每行调用UDTF,UTDF会把一行拆分成一或者多行,lateral view再把结果组合,产生一个支持别名表的虚拟表。

例子

假设我们有一张表pageAds,它有两列数据,第一列是pageid string,第二列是adid_list,即用逗号分隔的广告ID集合:

string pageidArray<int> adid_list
"front_page" [1, 2, 3]
"contact_page"[3, 4, 5]

要统计所有广告ID在所有页面中出现的次数。

首先分拆广告ID:

 

SELECT pageid, adid FROM pageAds LATERAL VIEW explode(adid_list) adTable AS adid;
 执行结果:

 

string pageidint adid
"front_page"1
"front_page"2
"front_page"3
"contact_page"3
"contact_page"4
"contact_page"5

接着是一个聚合的统计:

 

SELECT adid, count(1) FROM pageAds LATERAL VIEW explode(adid_list) adTable AS adid GROUP BY adid;
 执行结果如下:

 

int adidcount(1)
11
21
32
41
51

 

多个lateral view语句

一个FROM语句后可以跟多个lateral view语句,后面的lateral view语句能够引用它前面的所有表和列名。 以下面的表为例:

Array<int> col1Array<string> col2
[1,2]["a","b","c"]
[3,4]["d","e","f"]
SELECT myCol1, col2 FROM baseTableLATERAL VIEW explode(col1) myTable1 AS myCol1;

 执行结果:

int mycol1Array<string> col2
1[a", "b", "c"]
2[a", "b", "c"]
3[d", "e", "f"]
4[d", "e", "f"]

加上一个lateral view:

SELECT myCol1, myCol2 FROM baseTable
    LATERAL VIEW explode(col1) myTable1 AS myCol1
    LATERAL VIEW explode(col2) myTable2 AS myCol2;

 执行结果:

int myCol1string myCol2
1"a"
1"b"
1"c"
2"a"
2"b"
2"c"
3"d"
3"e"
3"f"
4"d"
4"e"
4"f"

注意上面语句中,两个lateral view按照出现的次序被执行。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值