【解决方案】hive 构造给定大小的数组 array

需求

现有如下数据表 table_1

ab
a13
a22
a31

想要得到的结果表为 table_2

ab
a13
a13
a13
a22
a22
a31

方案

从表 table_1 到 table_2,实际就是对数据按照 b 列的取值进行展开,如 b 列取值为 3 时所在行展开为 3 行。分析思路如下:

  1. 我们首先想到的是 explode 函数有此功能,这样新问题是 explode 接受的参数为 array,因此需要构造一个给定大小的数组
  2. 构造一个给定大小的数组,这里给出的方案是结合字符串 udf 函数 splitrepeat,具体 sql 如下:
select a, b 
from table_1
lateral view explode(split(repeat('a', b-1), 'a')) mtb as cc

总结

  1. hive 构造给定大小的数组过程中,使用到了 2 个字符串 udf 函数 splitrepeat
  2. 注意 repeat 函数中长度要 -1
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值