Spark SQL 合并查询

Posted

技术标签:

【中文标题】Spark SQL 合并查询【英文标题】:Spark SQL Merge query 【发布时间】:2020-08-24 06:16:30 【问题描述】:

我正在尝试MERGE 使用 spark sql 的两个表,但语句出错。

这些表被创建为指向 Azure ADLS 存储的外部表。该 sql 正在使用 Databricks 执行。

表 1:

Name,Age.Sex
abc,24,M
bca,25,F

表 2:

Name,Age,Sex
abc,25,M
acb,25,F

表 1 是目标表,表 2 是源表。 在表 2 中,我有一个插入记录和一个更新记录,需要与源表 1 合并。

查询:

MERGE INTO table1 using table2 ON (table1.name=table2.name)
WHEN MATCHED AND table1.age <> table2.age AND table1.sex<>table2.sex
THEN UPDATE SET table1.age=table2.age AND table1.sex=table2.sex
WHEN NOT MATCHED 
THEN INSERT (name,age,sex) VALUES (table2.name,table2.age,table2.sex)

spark SQL 支持合并还是有其他实现方式?

谢谢 周六

【问题讨论】:

【参考方案1】:

要使用 MERGE,您需要 Delta Lake 选项(以及相关的 jar)。然后你可以使用 MERGE。

否则,Spark 不支持 SQL Merge。然后需要具有自己逻辑的 Dataframe Writer API。有几种不同的方法可以做到这一点。即使使用 ORC ACID,Spark 也不会以这种方式工作。

【讨论】:

以上是关于Spark SQL 合并查询的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL 查询把多条记录合并一条

sql 合并列查询

求助:SQLSERVER多条查询语句合并

合并两个查询以获取 SQL 中的合并值

将大量 Spark 数据帧合并为一个

SQL查询结果查询列合并