2016-09-28 21 views
0

異なるSELECT文を実行するcase文を実行したいSpark SQLの条件に基づいていますが、Syntax Rightを取得できません。 CASE文がスパークSQLでサポートされている場合私のSQL文は、このSpark SQLでcase文を使用しているときに構文エラーが発生しました

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") 

のように見えます

私はほぼダースのSQLで働いてきたので、どのようにこの

+1

ケースに完全な選択を入れることはできません –

+2

あなたのロジックでそれを処理し、入力に応じて2つの異なるクエリを実行する必要があります –

+0

ありがとうございました。可能であればちょうど興味があった –

答えて

0

を達成することができます知っていないとSQLのような方言と私はそれのような構文を見たことがない。 SQL文が何をすべきかについての誤解があるようです。

SELECT句は、スカラ要素の投影を記述するためのものです。多くの方言では、この句でサブクエリ(場合によっては相関サブクエリ)を発行できますが、結果をスカラ値に変換する演算子を常に適用する必要があります。例:ここでは

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

は、オペレータがスカラーブールに非相関サブクエリを変換し、それが合法だ「EXISTS」。

トップレベルクエリにFROM句がないことも、大きな赤いフラグです。それは、私が見た方言の約半分でオラクルの「デュアル」のようなアナログが合法ですが、あなたがしようとしていることが2つのクエリーを動的に切り替えるならば、間違いなく間違います。あなたがおそらくやるべきことは、2つの異なるクエリを使うことです。

関連する問題