【问题标题】:Normalising Lateral Explode in Hive规范化 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

【问题讨论】:

    标签: sql arrays hive hiveql


    【解决方案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() 以获得与您的示例一样的精度,如果没有必要,请将其删除。

    【讨论】:

      猜你喜欢
      • 2017-07-13
      • 1970-01-01
      • 2022-08-23
      • 2017-04-04
      • 2018-01-02
      • 1970-01-01
      • 2018-12-21
      • 2023-03-06
      • 1970-01-01
      相关资源
      最近更新 更多