规范化 Hive 中的横向爆炸
Posted
技术标签:
【中文标题】规范化 Hive 中的横向爆炸【英文标题】:Normalising Lateral Explode in Hive 【发布时间】:2019-06-10 08:19:39 【问题描述】:我有一个表,其中有一个字段中的数组列表。我正在这张桌子上进行横向爆炸以获取元素。但是这样做,价值也在成倍增加。
Table:
Sitedomain Keyword Clicks
msn.com sports,cricket,accessories 100
yahoo.com fashion,accessories 50
执行横向爆炸后,我的输出类似于
Sitedomain Keyword Clicks
msn.com sports 100
msn.com cricket 100
msn.com accessories 100
yahoo.com fashion 50
yahoo.com accessories 50
如您所见,指标也在爆炸式增长。无论如何要规范化这些数据,以便指标除以数组中的元素数?所以输出看起来像
Sitedomain Keyword Clicks
msn.com sports 33.3
msn.com cricket 33.3
msn.com accessories 33.3
yahoo.com fashion 25
yahoo.com accessories 25
【问题讨论】:
【参考方案1】:按关键字数组大小划分点击次数:
with your_table as(
select stack(2,
'msn.com', 'sports,cricket,accessories', 100,
'yahoo.com', 'fashion,accessories', 50
) as (Sitedomain,Keyword,Clicks)
)
select Sitedomain,k.Keyword,round(s.Clicks/size(Keyword_aray),1) as Clicks
from
(
select Sitedomain,
split(Keyword,',') Keyword_aray,
Clicks
from your_table
)s lateral view explode(Keyword_aray) k as keyword
;
返回:
msn.com sports 33.3
msn.com cricket 33.3
msn.com accessories 33.3
yahoo.com fashion 25.0
yahoo.com accessories 25.0
我添加了round()
以获得与您的示例一样的精度,如果没有必要,请将其删除。
【讨论】:
以上是关于规范化 Hive 中的横向爆炸的主要内容,如果未能解决你的问题,请参考以下文章