如何遍历azure databricks数据中的多个表并删除postgres数据库中的匹配记录?

kkbh8khc  于 2021-07-12  发布在  Spark
关注(0)|答案(1)|浏览(263)

我从azuredatabricks表中提取数据,只将第一行(rank=1)加载到postgres中的相似表(相同的表结构)中。但是,在加载之前,我检查postgres表中的column5值是否与databricks表相同,如果是,则必须从postgres表中删除该行,并加载其余的值。
在这里,我要遍历提取的databricks表的行,并对postgres中的每一行运行delete命令。请建议一种在sql中实现这一点而不使用游标的方法?

ocebsuys

ocebsuys1#

创建临时表 stg .
从databricks表加载它。理想情况下,从databricks导出时使用: SELECT * FROM databricks_table WHERE rank_column = 1 -- or WHERE RANK() OVER(PARTITION BY whatever ORDER BY whatever_else) = 1 然后,在postgresql上,使用merge语句:

MERGE INTO tgt USING stg ON tgt.column5 = stg.column5
WHEN MATCHED THEN UPDATE SET
  col1 = stg.col1
, col2 = stg.col2
[. . .]
WHEN NOT MATCHED THEN INSERT (col1,col2, ... , coln)
                      VALUES(stg.col1,stg.col2 ...)
;

查看postgresql文档中的merge语句以了解更多详细信息。。。

相关问题