2014-07-03 127 views
0

我是新來使用HIVE並一直有一些麻煩讓我的查詢中的一個正常工作。下面使用的所有變量都在我們的表中定義,我試圖隔離delivery_view表中具有存在於屬性表中的uid的數據,並使用WHERE語句中聲明的限制。HIVE連接查詢錯誤

我處理的當前錯誤是HIVE認爲UID在GROUP BY命令是一個函數。之前,我收到一個錯誤,指出EOF在LEFT JOIN語句附近是必要的,但是看起來好像已經被糾正了,儘管我並不完全知道如何。

任何幫助將不勝感激!

SELECT COUNT(DISTINCT attribution_view.uid) 
FROM attribution_view 
LEFT OUTER JOIN delivery_view ON (attribution_view.uid = delivery_view.uid) 
WHERE attribution_view.conversion_agency_id = 19 AND 
    attribution_view.conversion_period BETWEEN '2014-06-01 12:00:00' AND '2014-06-01 13:00:00' 
GROUP BY COUNT(DISTINCT attribution_view.uid) 
+0

配置單元可能會錯誤地報告錯誤。沒有DBMS可以讓你通過聚合函數進行分組。發佈一些示例數據和預期結果。 –

回答

2

您不能通過聚合函數進行分組。如果你只是想不同uid S的總數,然後刪除該條款:

SELECT COUNT(DISTINCT attribution_view.uid) 
FROM attribution_view 
LEFT OUTER JOIN delivery_view ON (attribution_view.uid = delivery_view.uid) 
WHERE attribution_view.conversion_agency_id = 19 AND 
    attribution_view.conversion_period BETWEEN '2014-06-01 12:00:00' AND '2014-06-01 13:00:00'; 

但是,如果你只是想匹配的行,然後使用常規連接。我想到更像這樣的查詢:

SELECT COUNT(DISTINCT av.uid) 
FROM attribution_view av INNER JOIN 
    delivery_view dv 
    ON av.uid = dv.uid 
WHERE av.conversion_agency_id = 19 AND 
     av.conversion_period BETWEEN '2014-06-01 12:00:00' AND '2014-06-01 13:00:00'; 

另請注意使用表別名。這些使查詢更易於編寫和閱讀。

編輯:

這是做你想做的嗎?

select cnt, count(*), min(uid), max(uid) 
from (SELECT av.uid, count(*) as cnt 
     FROM attribution_view av INNER JOIN 
      delivery_view dv 
      ON av.uid = dv.uid 
     WHERE av.conversion_agency_id = 19 AND 
      av.conversion_period BETWEEN '2014-06-01 12:00:00' AND '2014-06-01 13:00:00' 
     GROUP BY av.uid 
    ) u 
group by cnt 
order by 1; 
+0

感謝Gordon的建議,感謝幫助。 – user3802527

+0

關於如何根據特定的uid在交付表中出現的次數(只要uid也在轉換表中)創建不同的組,您是否有任何建議?如同,如果一個uid在交付表中記錄了兩次,它將轉到一個2桶,依此類推。按計數(獨特的uid)函數應該完成這個,但我想我現在需要一個解決方法。 – user3802527