0

table_atable_b 임시 테이블이 두 개 있고이 쿼리와 모든 조건이 올바르게 작동하려고합니다. SparkSQL를 사용하여 이러한 두 테이블에서 위의 쿼리를 실행sparkSQL "CASE WHEN THEN"pyspark에 두 개의 테이블 열이있는 경우

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) 

"AnalysisException을 : 유 '생산'a.id '주어진 입력 열을 확인할 수 없습니다 : [ID, NUM, testdate ]; "

+0

나는 가능성이있는 답변을 주셨지만, 문맥이나 귀하의 테이블에 대한 설명과 함께 귀하의 질문을 확장하고 귀하가 달성하고자하는 것이 더 나은 답변을 얻는 데 도움이 될 것입니다. – Flygenring

답변

0

테이블의 개념이 없으므로 ORDER BY 절에 오류가있는 것으로 보입니다. ab이지만, 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