sql - 如何遍历 azure databricks 数据中的多个表并删除 postgres 数据库中的匹配记录?
问题描述
我正在从 azure databricks 表中提取数据,并仅将第一行(rank = 1)加载到 postgres 中的类似表(相同的表结构)中。但是在加载之前,我正在检查 postgres 表中的 column5 值是否与 databricks 表相同,如果是,则必须从 postgres 表中删除该行,并且必须加载剩余的值。
在这里,我想遍历我提取的 databricks 表的行并为 postgres 中的每一行运行删除命令。请提出一种不使用游标在 SQL 中实现此目的的方法?
解决方案
创建临时表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 语句以获取更多详细信息...
推荐阅读
- python - Python 的 SpooledTemporaryFile 到底是什么?
- excel - 数组公式显示“#Parameter in error”错误
- jpa - 实体管理器删除功能工作缓慢
- c# - WPF DependencyProperty 使用默认值 iso new 更新视图模型
- android - 如何做出这样的按钮点击效果?
- docker - 如何在 CLI 中使用 ctr 在 containerd 中运行 docker 映像?
- android - 键盘移动时保留所有原始约束布局尺寸 EditText
- flutter - 从 Flutter 中的操纵图像获取 FirebaseVisionImage
- reporting-services - 如何设置默认 SSRS 报告变量
- c# - 离线构建 .NET Core 应用程序不会创建“NuGetFallbackFolder”文件夹