【发布时间】:2021-02-18 13:06:59
【问题描述】:
为以下问题编写 Hive 查询以打印 ID 值,如果 Id 为 1,则打印 Id 1 次,如果 Id 值为 2,则打印 Id 2 次,依此类推
Input Table
Id
---
1
2
3
4
Output
-------
Id
--
1
2
2
3
3
3
4
4
4
4
【问题讨论】:
标签: hadoop hive bigdata hiveql
为以下问题编写 Hive 查询以打印 ID 值,如果 Id 为 1,则打印 Id 1 次,如果 Id 值为 2,则打印 Id 2 次,依此类推
Input Table
Id
---
1
2
3
4
Output
-------
Id
--
1
2
2
3
3
3
4
4
4
4
【问题讨论】:
标签: hadoop hive bigdata hiveql
使用space(id-1) 获取长度= id-1 的空格字符串,拆分字符串并使用lateral view + explode 生成行。
演示:
with your_table as (
select stack (4,
1,
2,
3,
4) as id
)
select t.id
from your_table t
lateral view outer explode(split(space(id-1),' ')) e
结果:
t.id
1
2
2
3
3
3
4
4
4
4
更多解释:
split(space(id-1),' ') - 这会产生 id-1 空格数组
explode() - 是一个表格生成函数,从数组生成表格
lateral view outer 的工作方式类似于主表与explode 生成的表的左连接。对于每一行,它与explode() 的每一行连接,从而为每一行生成重复项。
【讨论】: