2012-09-17 58 views
1

我有一個要求在Hive查詢中的where子句中執行嵌套選擇。示例代碼片段如下所示;在Hive中使用where子句編寫一個嵌套的select語句

SELECT *
從表A
其中TA_timestamp>(從表B中選擇TIMESTMP其中id =「hourDim」)

這是可能的還是我在這裏做得不對,因爲我運行時得到一個錯誤上面的腳本?!

爲了進一步闡述我在做什麼,我有一個cassandra密鑰空間,我用時間戳發佈統計信息。定期(例如每小時)使用配置單元對這些統計數據進行彙總,一旦總結出數據將與相應小時分開存儲。因此,當查詢第二次運行(以及連續運行)時,查詢只應運行在新數據上(即 - timestamp> previous_execution_timestamp)。我試圖通過將最新執行的時間戳存儲在單獨的配置表中,然後使用該值來過濾掉原始統計信息。

這可以通過配置單元實現嗎?

回答

5

子查詢一個WHERE子句不蜂巢支持內: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+SubQueries

但是,往往可以使用JOIN語句來代替獲得相同的結果: https://karmasphere.com/hive-queries-on-table-data#join_syntax

例如:

可以被改寫爲:

SELECT a.KEY, a.val 
    FROM a LEFT SEMI JOIN b ON (a.KEY = b.KEY) 
+1

從Hive 0.13開始,WHERE子句支持某些類型的子查詢。這些查詢可以將查詢結果視爲IN和NOT IN語句的常量。請參閱我的答案鏈接瞭解更多詳情。 – YABADABADOU

0

望着業務需求的潛在問題,它發生,你可能會使用小時你的分區表蜂房得到更有效的結果。如果可以寫入數據以將此因子用作分區鍵,那麼更新摘要的查詢將快得多,並且所需資源更少。

分區在達到數百萬的規模時可能失去控制,但這似乎是一個不會取笑這個限制的情況。