Нормализация бокового взрыва в улье - PullRequest
1 голос
/ 10 июня 2019

У меня есть таблица со списком массивов в поле. Я делаю боковой взрыв на этой таблице, чтобы получить элементы. Но при этом значения также умножаются.

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 Ответ

1 голос
/ 10 июня 2019

Разделите клики по размеру массива ключевых слов:

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(), чтобы получить точность, как в вашем примере, удалите ее, если не нужно.

...