0
我正在使用完全連接查看來自兩個不同選擇語句的用戶id的重疊和非重疊(唯一值)。主要區別在於一個表的deal_id = 0,另一個表的deal_id大於或等於1。 我正在加入exchange_id,pub_id和user_id上的select語句,但不在deal_id上。 這裏是我的查詢:爲什麼只有一個字段上的全部聯接會在該字段上返回空值?
SET
hive.auto.convert.join = TRUE
;
SELECT
First.deal_id
,COALESCE(First.exchange_id, Second.exchange_id) as exchange_id
,COALESCE(First.pub_id, Second.pub_id) as pub_id
,COUNT (DISTINCT(case when Second.user_id is null then First.user_id else null END)) AS Incremental
,SUM (First.imps) AS First_imps
,SUM (Second.imps) AS Second_imps
FROM
(
SELECT
a.deal_id
,a.exchange_id
,a.pub_id
,a.user_id
,1 AS imps
FROM
logs a
WHERE
a.deal_id >= 1
AND a.event_type = 'TRUE'
) First
FULL JOIN (
SELECT
a.exchange_id
,a.pub_id
,a.user_id
,1 AS imps
FROM
logs a
WHERE
a.deal_id = 0
AND a.event_type = 'TRUE'
) Second
ON (
First.exchange_id = Second.exchange_id
AND First.pub_id = Second.pub_id
AND First.user_id = Second.user_id
)
GROUP BY
COALESCE(First.exchange_id, Second.exchange_id)
,COALESCE(First.pub_id, Second.pub_id)
;
下面是我看到的結果:
DEAL_ID EXCHANGE_ID PUB_ID INCREMENTAL FIRST_IMPS SECOND_IMPS
/N 4 1780 0 0 15
/N 4 1560 0 0 32
3389 4 1780 2 7 6
1534 4 1560 4 9 8
,這裏是我想看到的內容:
DEAL_ID EXCHANGE_ID PUB_ID INCREMENTAL FIRST_IMPS SECOND_IMPS
3389 4 1780 2 7 21
1534 4 1560 4 9 40
凡有結果null deal id與基於exchange_id和pub_id的非空交易ID相匹配。
我該怎麼辦?
編輯: 澄清 - 我輸入的查詢是我的原始查詢的簡化,它需要兩個單獨的選擇語句,因爲我正在與另一個事件表進行聯合。我沒有在這裏展示它,因爲它與Full Join問題上的聚合無關。 此外,增量值正在嘗試計算出現在deal_id> = 1中且不存在於deal_id = 0中的用戶(完全加入的另一個原因)。
感謝您的回覆!我輸入的查詢是我的原始查詢的簡化,它需要兩個單獨的選擇語句,因爲我正在與另一個事件表進行聯合。我沒有在這裏展示它,因爲它與Full Join問題上的聚合無關。 此外,_incremental_值正試圖計算出現在deal_id> = 1且不存在於deal_id = 0(完全連接的另一個原因)中的用戶,我不認爲此查詢反映了這一點。 (我編輯了我的問題以幫助澄清) – LMP
@LMP。 。 。這個查詢明確地計算了「增量」值(根據您的定義)。我不知道其他「事件」表可能在做什麼。只能解決被問到的問題。 –
我相信你的增量定義包括在它的計數的情況下user_id也出現在l.deal_id = 0,我想只計數不同的情況,其中user_id不存在於deal_id = 0但存在於deal_id> = 1 – LMP