2014-04-04 41 views
0

我使用的是配置了collect_set函數的配置單元。該表是這樣的:避免自己加入配置單元

cookie, events, keywords,pages 
1234  1  'dress' 10 
1234  1  'dress' 10 
1235  2  'shoes' 14 
1234  5  'socks' 22 

使用collect_set我可以得到下面的結構

select cookie, collect_set(events) as ev, collect_set(keywords) as kwords, 
    collect_set(pages) 
    from table1 
    group by cookie 

我需要做的是收集到的陣列,多次搜索,一個例子是這樣的:

select cookie 
,array_contains(collect_set(events),2) as has_2 
,array_contains(collect_set(keywords),1) as has_4 
    from table1 
    group by cookie) A 

按我的理解,我無法到項目現場1倍以上,並最終不得不做這樣的事情

select a.cookie,a.has_2,b.has_4 from ( 
select cookie 
,array_contains(collect_set(events),2) as has_2 
from table1 group by cookie) A 
inner join 
select cookie 
,array_contains(collect_set(events),4) as has_4 
from table1 group by cookie) B 
on A.cookie = B. cookie 

最後的結果是這樣的:

cookie, has_2, has_4 
1234  F  F 
1235  T  T 

有沒有辦法做到這一點沒有自我加入?目前我需要自己加入30次以獲得我需要的格式。

謝謝

回答

2
select S.cookie, array_contains(S.events_set,2), array_contains(S.events_set,4) 
from 
(select cookie, collect_set(events) as events_set 
from table1 group by cookie) S 
+0

這個偉大的工作 - 感謝 – user2726995

0

您應該向您的SQL引入一個GROUP BY。

例如

select 
    cookie, 
    array_contains(collect_set(events),2) as has_2, 
    array_contains(collect_set(keywords),1) as has_4 
from 
    table1 
group by 
    cookie; 
+0

- 添加到GROUPBY例如 – user2726995