【问题标题】:how to delete data from a delta file in databricks?如何从databricks中的增量文件中删除数据?
【发布时间】:2021-03-18 15:13:34
【问题描述】:

我想从数据块中的增量文件中删除数据。 我正在使用这些命令
例如:

PR=spark.read.format('delta').options(header=True).load('/mnt/landing/Base_Tables/EventHistory/')
PR.write.format("delta").mode('overwrite').saveAsTable('PR')
spark.sql('delete from PR where PR_Number=4600')

这是从表中删除数据,而不是从实际的增量文件中删除。我想在不使用合并操作的情况下删除文件中的数据,因为连接条件不匹配。谁能帮我解决这个问题。

谢谢

【问题讨论】:

    标签: sql pyspark apache-spark-sql azure-databricks delta-lake


    【解决方案1】:

    您可以从 Delta 表中删除与谓词匹配的数据 https://docs.delta.io/latest/delta-update.html#delete-from-a-table

    【讨论】:

      【解决方案2】:

      它就像

      delete from delta.`/mnt/landing/Base_Tables/EventHistory/` where PR_Number=4600
      

      【讨论】:

      • 之前你在哪里尝试保存为托管表,要存储在外部位置,你还需要提及路径
      • PR.write.format("delta").option('path', 'your mount path') .mode('overwrite').saveAsTable('PR')
      【解决方案3】:

      请记住:Delta 中的 DELETE 不支持子查询。

      问题链接:https://github.com/delta-io/delta/issues/730

      从文档本身来看,替代方案如下

      例如:

      DELETE FROM tdelta.productreferencedby_delta 
      WHERE  id IN (SELECT KEY 
                    FROM   delta.productreferencedby_delta_dup_keys) 
             AND srcloaddate <= '2020-04-15'
      

      在DELTA的情况下可以写成如下

      MERGE INTO delta.productreferencedby_delta AS d 
      using (SELECT KEY FROM   tdatamodel_delta.productreferencedby_delta_dup_keys) AS k 
      ON d.id = k.KEY 
        AND d.srcloaddate <= '2020-04-15' 
      WHEN MATCHED THEN DELETE 
      

      【讨论】:

        猜你喜欢
        • 2020-03-18
        • 2023-01-13
        • 2019-06-02
        • 2023-01-18
        • 2020-09-23
        • 2019-06-24
        • 1970-01-01
        • 1970-01-01
        • 2019-06-23
        相关资源
        最近更新 更多