如何根据 int 列复制行

How to duplicate row based on int column

如果我在 Hive 中有这样的 table:

name     impressions   sampling_rate
------------------------------------
paul        34              1
emma         0              3
greg         0              5

如何通过 sampling_rate 列复制 select 语句中的每一行,使其看起来像这样:

name     impressions   sampling_rate
------------------------------------
paul        34              1
emma         0              3
emma         0              3
emma         0              3
greg         0              5
greg         0              5
greg         0              5
greg         0              5
greg         0              5

使用 space() 可以生成长度为 space 的字符串 sampling_rate-1 ,将其拆分并在横向视图中展开,它会重复行。

演示:

with your_table as(--Demo data, use your table instead of this CTE
select stack (3, --number of tuples
'paul',34,1,
'emma', 0,3,
'greg', 0,5
) as (name,impressions,sampling_rate)
)

select t.*
  from your_table t --use your table here
       lateral view explode(split(space(t.sampling_rate-1),' '))e 

结果:

name     impressions   sampling_rate
------------------------------------
paul        34              1
emma         0              3
emma         0              3
emma         0              3
greg         0              5
greg         0              5
greg         0              5
greg         0              5
greg         0              5