pyspark - 如何合并涉及插入、更新和删除的增量表中的数据帧?

标签 pyspark delta-lake

我想填充包含一些列的增量表,其中一列用作分区,另一列是“主键”(基因)。因此,Dependend必须根据它记录的数据进行插入、更新或删除,如下所示:

增量表:

<表类=“s-表”> <标题> 疾病 基因 值 <正文> 结肠癌 abn1 0.12 乳腺癌 agt2 0.02 结肠癌 zn1t 0.69

包含必须插入增量表中的值的数据框表:

<表类=“s-表”> <标题> 疾病 基因 值 <正文> 结肠癌 abn1 0.13 结肠癌 悲伤3 0.56 结肠癌 wasr 0.78 结肠癌 gfvc 0.21 乳腺癌 qwa2 0.12 乳腺癌 cv4s 0.21 乳腺癌 asxz 0.34

预期增量表:

<表类=“s-表”> <标题> 疾病 基因 值 预期 <正文> 结肠癌 abn1 0.13 更新 结肠癌 悲伤3 0.56 插入 结肠癌 wasr 0.78 插入 结肠癌 gfvc 0.21 插入 结肠癌 zn1t 0.69 删除 乳腺癌 qwa2 0.12 插入 乳腺癌 cv4s 0.21 插入 乳腺癌 asxz 0.34 插入 乳腺癌 agt2 0.02 删除

你有想法吗?

我想过使用合并命令,但没有解决删除条件。另一种解决方案是删除之前的记录,然后对插入和更新应用合并,但是这样的话,是否有必要在同一个事务中应用它们呢?还有其他的孤独吗?

最佳答案

MERGE 语句 ( doc ) 中新的 WHEN NOT MATCHED BY SOURCE 子句支持此类功能。它刚刚作为 Databricks Runtime 12.1 的一部分在 Databricks 上发布。并在即将发布的 OSS Delta - 2.3.0 版本中进行削减(请参阅相应的 PR1PR2 )。

如果您迫不及待地等待新版本,那么您可以继续仅对现有值使用常规合并(WHEN MATCHED,不带 WHEN NOT MATCHED),并且然后将表与传入数据进行右连接,过滤掉不匹配的数据,并进行删除操作。

关于pyspark - 如何合并涉及插入、更新和删除的增量表中的数据帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75240338/

相关文章:

apache-spark - 将展开内存传输到存储内存失败

databricks - 如何启用 Databricks Delta 功能

apache-spark - Apache Spark : impact of repartitioning, 对连接进行排序和缓存

python - 将数据框放入 randomForest pyspark

Pyspark 删除数据帧列中的多个字符

python - 针对按天分区的数据过滤 n 天窗口的 spark DataFrame

python - 有没有一种方法可以使用 pyspark 动态创建模式信息,而不是在输出 jsonfile 中转义字符?

azure-databricks - 创建 DataBricks 增量表时检测 CSV header ?

apache-spark - 通过多个作业同时更新三角洲湖表

apache-spark - 使用Delta Lake,如何在压缩后删除原始文件