2013-05-17 63 views
0

我使用Hive在CASE WHEN語句中進行比較。你能否檢查我的語法是否正確。Hive語法 - 當比較


${hiveconf:Test Metric} METRIC_ID,    
    CASE 
     WHEN ((A.X,A.Y,A.Z)IN (SELECT X,Y,Z FROM HIVE_TPCE_TEMP.TESTTABLE)) 
     THEN CASE 
       WHEN MODE IN ('A','N') 
       THEN ${ 
         hiveconf:SOME_CONSTANT ELSE ${hiveconf: SOME_CONSTANT 
         } 
        END 

+0

發生了什麼,當你嘗試? –

+0

FAILED:ParseException行16:47無法識別表達式規範中'SELECT''X''FROM'附近的輸入....這是錯誤簽名 –

回答

0

我猜你的代碼來自您的查詢的SELECT條款?根據Hive Language Manual:「Hive僅在FROM子句中支持子查詢」。

您的CASE WHEN聲明包含子查詢。似乎不支持,所以你的語法不正確(在Hive中)。

+0

我們是否可以用其他方式或語句在配置單元中實現相同的邏輯。 –

+0

很難說沒有整個查詢,但可能'LEFT JOIN'你的'TESTTABLE'到查詢的其餘部分,而不是依靠'IN'子句來找到你正在查找的條目。然後,您可以將「CASE WHEN」語句應用於連接的列,而不是使用子查詢。 –

+0

太完美了,這看起來像是一個查詢的野獸。 SQL(特別是HQL)並不是真正爲這種遞歸查找而構建的。也許純粹的MapReduce會更適合你的需求? –