2015-10-19 125 views
0

我有一個巨大的Hive表,由十個產品字段,購買日期字段和標識符組成。產品字段的名稱類似於prod1,prod2,...,prod10,並指最後購買的十種產品。對於大多數ID,我們沒有購買歷史,一直回到十種產品。填充字段的Hive查詢字段的計數

我想爲prod<X>字段中的每個字段構建人口費率分佈,以顯示整個數據集中購買歷史記錄的細分。

目前,我正在運行對陣表十個連冠查詢,如bash腳本:

hive -e "select count(1) from db.tbl where prod<X> != '';"

...並保存輸出到文件。這看起來笨重和低效。是否有更好的方法來指定具有一定範圍的字段條件的一系列字段上的Hive計數?我試圖想出一個使用groupby或甚至映射一系列字段的策略,但是無法圍繞指定每個字段的!= ''條件。

在此先感謝您的任何方向。

回答

1
select id, 
sum(case when prod1='' then 0 else 1 end), 
sum(case when prod2='' then 0 else 1 end), 
sum(case when prod3='' then 0 else 1 end), 
sum(case when prod4='' then 0 else 1 end), 
sum(case when prod5='' then 0 else 1 end), 
sum(case when prod6='' then 0 else 1 end), 
sum(case when prod7='' then 0 else 1 end), 
sum(case when prod8='' then 0 else 1 end), 
sum(case when prod9='' then 0 else 1 end), 
sum(case when prod10='' then 0 else 1 end) 
from table group by id; 
+0

回想起來這一切似乎都很簡單......謝謝! – economy