2016-09-28 412 views
0

我想運行一個運行不同SELECT語句的case語句基於Spark SQL中的條件但無法獲得語法權限。在Spark SQL中使用Case語句時出現語法錯誤

我的SQL語句看起來像這樣

registerTable(sql="SELECT CASE WHEN typedKeyword > '' THEN (SELECT * FROM `temp.sdf0` WHERE originalKeyword > ''AND keyword > '' AND deviceType = 'devicetype') ELSE (SELECT * FROM `temp.tes` WHERE originalKeyword > ''AND keyword > '') END ",alias="temp.test") 

如果CASE語句在SQL火花支撐,如何才能做到這一點

+1

你不能把完整的選擇放入一個CASE –

+2

你應該在你的邏輯中處理它並根據輸入執行2個不同的查詢 –

+0

謝謝。只是有興趣,如果它可能 –

回答

0

我在工作,我不知道近十幾個SQL和像SQL一樣的方言,我從來沒有見過這樣的語法。看起來似乎有一個關於SQL子句應該做什麼的核心誤解。

SELECT子句用於描述標量元素的投影。在許多方言中,您可以在本節中發出子查詢 - 有時甚至是相關的子查詢 - 但您始終必須應用將結果轉換爲標量值的運算符。例如:

SELECT (CASE WHEN EXISTS (SELECT foo FROM tbl) THEN 1 ELSE 0 END) 

這裏的「存在」操作不相關子查詢轉換成標量布爾值,所以它是合法的。

頂級查詢中缺少FROM子句也是一個大紅旗。它或者類似於Oracle的「雙重」模式在我看過的方言中有大約一半是合法的,但是如果你想要做的是在兩個查詢之間動態切換,那麼你幾乎肯定是做錯了。 juergen是對的 - 你可能打算做的是使用2個不同的查詢。