如何根据 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
如果我在 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