2017-04-19 57 views
0

我嘗試在Spark SQL中重新創建SQL查詢。通常我會插入這樣一個表:在哪裏條件下帶有子選擇的Spark數據集

INSERT INTO Table_B 
( 
    primary_key, 
    value_1, 
    value_2 
) 
SELECT DISTINCT 
    primary_key, 
    value_1, 
    value_2 
FROM 
    Table_A 
WHERE NOT EXISTS 
(
SELECT 1 FROM 
Table_B 
WHERE 
Table_B.primary_key = Table_A.primary_key 
); 

星火SQL很簡單,我可以從TempView在一個新的數據集加載數據。不幸的是,我不知道如何重建where子句。

Dataset<Row> Table_B = spark.sql("SELECT DISTINCT primary_key, value_1, value_2 FROM Table_A").where("NOT EXISTS ... ???"); 

回答

1

查詢與TSQL不存在可以用「其中」左連接被改寫:

SELECT Table_A.* 
FROM Table_A Left Join Table_B on Table_B.primary_key = Table_A.primary_key 
Where Table_B.primary_key is null 

也許,類似的方法可以在星火使用,左聯接。例如,對於數據幀,如下所示:

aDF.join(bDF,aDF("primary_key")===bDF("primary_key"),"left_outer").filter(isnull(col("other_b_not_nullable_column")))