【问题标题】:Write Hive query for below problem to print the ID value if Id is 1 then print Id 1 time, If Id value is 2 then print Id 2 times so on为以下问题编写 Hive 查询以打印 ID 值,如果 Id 为 1,则打印 Id 1 次,如果 Id 值为 2,则打印 Id 2 次,依此类推
【发布时间】: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


    【解决方案1】:

    使用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() 的每一行连接,从而为每一行生成重复项。

    【讨论】:

    • 感谢您的回答。能否请您对此进行更多解释。
    • @user13748181 添加了更多解释和文档链接
    猜你喜欢
    • 2022-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    相关资源
    最近更新 更多