0

私は2つのテンポラリテーブルtable_atable_bを持っており、このクエリとそのすべての条件が正しく動作するようにしようとしています。解決できない 'a.id' 所定の入力欄:[ID、NUM、testdate:SparkSQLを使用して、これらの二つのテーブルに上記クエリを実行sparkSQL "paseparkの2つのテーブル列を持つケース"

SELECT DISTINCT CASE WHEN a.id IS NULL THEN b.id ELSE a.id END id, 
    CASE WHEN a.num IS NULL THEN b.num ELSE a.num END num, 
    CASE WHEN a.testdate IS NULL THEN b.testdate ELSE a.testdate END testdate 
FROM table_a a 
    FULL OUTER JOIN table_b b 
    ON (a.id=b.id AND a.num=b.num AND a.testdate=b.testdate) 
WHERE 
    (CASE WHEN a.t_amt IS NULL THEN 0 ELSE a.t_amt END) 
    <> 
    (CASE WHEN b.t_amt IS NULL THEN 0 ELSE b.t_amt END) OR 
    (CASE WHEN a.qty IS NULL THEN 0 ELSE a.qty END) 
    <> 
    (CASE WHEN b.qty IS NULL THEN 0 ELSE b.qty END) 
ORDER BY 
    CASE WHEN a.id IS NULL THEN b.id ELSE a.id END, 
    CASE WHEN a.num IS NULL THEN b.num ELSE a.num END, 
    CASE WHEN a.testdate IS NULL THEN b.testdate ELSE a.testdate END 

次のエラーを

sqlq = <the sql from above> 

df = sqlContext.sql(sqlq) 

"uはAnalysisException" を生成します]; "

+0

私は、おそらく動作するであろう答えを与えましたが、いくつかの文脈やテーブルの説明とあなたが達成しようとしているものは、より良い答えを得るのに役立つでしょう。 – Flygenring

答えて

0

の概念がないため、ORDER BY節にエラーがあるようですとbですが、SELECT句の名前とエイリアスのみです。
実際には結果セット内の列に基づいて結果を並べ替えるだけなので、これは非常に意味があります。

SELECT DISTINCT (CASE WHEN a.id IS NULL THEN b.id ELSE a.id END) AS id, 
    (CASE WHEN a.num IS NULL THEN b.num ELSE a.num END) AS num, 
    (CASE WHEN a.testdate IS NULL THEN b.testdate ELSE a.testdate END) AS testdate 
FROM table_a AS a 
    FULL OUTER JOIN table_b AS b 
    ON (a.id=b.id AND a.num=b.num AND a.testdate=b.testdate) 
WHERE 
    (CASE WHEN a.t_amt IS NULL THEN 0 ELSE a.t_amt END) <> (CASE WHEN b.t_amt IS NULL THEN 0 ELSE b.t_amt END) 
    OR 
    (CASE WHEN a.qty IS NULL THEN 0 ELSE a.qty END) <> (CASE WHEN b.qty IS NULL THEN 0 ELSE b.qty END) 
ORDER BY id, num, testdate 
関連する問題