首页 > 解决方案 > 如何遍历 azure databricks 数据中的多个表并删除 postgres 数据库中的匹配记录?

问题描述

我正在从 azure databricks 表中提取数据,并仅将第一行(rank = 1)加载到 postgres 中的类似表(相同的表结构)中。但是在加载之前,我正在检查 postgres 表中的 column5 值是否与 databricks 表相同,如果是,则必须从 postgres 表中删除该行,并且必须加载剩余的值。

在这里,我想遍历我提取的 databricks 表的行并为 postgres 中的每一行运行删除命令。请提出一种不使用游标在 SQL 中实现此目的的方法?

标签: sqlpostgresqlazure-databricks

解决方案


创建临时表stg

从 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 语句以获取更多详细信息...


推荐阅读