【学习笔记】hive 之行拆列explode

简介:

1、explode

explode(ARRAY) 列表中的每个元素生成一行
explode(MAP) map中每个key-value对,生成一行,key为一列,value为一列
image
限制:
1、No other expressions are allowed in SELECT

    SELECT pageid, explode(adid_list) AS myCol... is not supported
AI 代码解读

2、UDTF's can't be nested

    SELECT explode(explode(adid_list)) AS myCol... is not supported
AI 代码解读

3、GROUP BY / CLUSTER BY / DISTRIBUTE BY / SORT BY is not supported

    SELECT explode(adid_list) AS myCol ... GROUP BY myCol is not supported
AI 代码解读

2、lateral view

可使用lateral view解除以上限制,语法:

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

案例:

table名称为pageAds

image

SELECT pageid, adid

FROM pageAds LATERAL VIEW explode(adid_list) adTable AS adid;

输出结果:
image

3、多个lateral view

from语句后面可以带多个lateral view语句

案例:

表名:baseTable

image

from后只有一个lateral view:

SELECT myCol1, col2 FROM baseTable

LATERAL VIEW explode(col1) myTable1 AS myCol1;

结果:
image

多个lateral view:

SELECT myCol1, myCol2 FROM baseTable

LATERAL VIEW explode(col1) myTable1 AS myCol1

LATERAL VIEW explode(col2) myTable2 AS myCol2;

结果:

image

4、Outer Lateral Views

如果array类型的字段为空,但依然需返回记录,可使用outer关键词。

比如:select * from src LATERAL VIEW explode(array()) C AS a limit 10;

这条语句中的array字段是个空列表,这条语句不管src表中是否有记录,结果都是空的。

而:select * from src LATERAL VIEW OUTER explode(array()) C AS a limit 10;

结果中的记录数为src表的记录数,只是a字段为NULL。

比如:

238 val_238 NULL
86 val_86 NULL
311 val_311 NULL
27 val_27 NULL
165 val_165 NULL
409 val_409 NULL
255 val_255 NULL
278 val_278 NULL
98 val_98 NULL

官方文档:

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+LateralView

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-explode

目录
打赏
0
0
0
0
1
分享
相关文章
HiveSQL分位数函数percentile()使用详解+实例代码
HiveSQL分位数函数percentile()使用详解+实例代码
5456 0
HiveSQL分位数函数percentile()使用详解+实例代码
ROW_NUMBER() OVER函数的基本用法用法
语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)简单的说row_number()从1开始,为每一条分组记录返回一个数字,这里的ROW_NUMBER() OVER (ORDER BY xlh DESC) 是先把xlh列降序,再为降序以后的没条xlh记录返回一个序号。
5954 0
九个最容易出错的 Hive sql 详解及使用注意事项 (二)
在进行数仓搭建和数据分析时最常用的就是 sql,其语法简洁明了,易于理解,目前大数据领域的几大主流框架全部都支持sql语法,包括 hive,spark,flink等,所以sql在大数据领域有着不可替代的作用,需要我们重点掌握。
1339 0
承上启下:基于全域漏斗分析的主搜深度统一粗排
两阶段排序(粗排-精排)一开始是因系统性能问题提出的排序框架,因此长期以来粗排的定位一直是精排的退化版本,业内的粗排的优化方向也是持续逼近精排。我们提出以全域成交的hitrate为目标的全新指标,重新审视了召回、粗排和精排的关系,指出了全新的优化方向
93942 3
脱胎换骨的生成模式:强化学习重排
AliExpress 搜索重排项目在 6 月份时全量发布了第一个 fined tuned 的 DNN 版重排模型,本次的工作作为上一版本的升级,在日常、大促时的表现均有显著优势。本文将深入浅出强化学习框架重排实践,并引出几个潜在的提升空间。 作者:辰火、讷朴、达卿
2952 0
脱胎换骨的生成模式:强化学习重排
「Spark从精通到重新入门(二)」Spark中不可不知的动态资源分配
资源是影响 Spark 应用执行效率的一个重要因素。Spark 应用中真正执行 task 的组件是 Executor,可以通过spark.executor.instances 指定 Spark 应用的 Executor 的数量。在运行过程中,无论 Executor上是否有 task 在执行,都会被一直占有直到此 Spark 应用结束。
913 0
「Spark从精通到重新入门(二)」Spark中不可不知的动态资源分配
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等