如何从databricks中的增量文件中删除数据?

yo*_*nus 4 sql apache-spark-sql pyspark azure-databricks delta-lake

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

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')
Run Code Online (Sandbox Code Playgroud)

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

谢谢

小智 5

请记住: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'
Run Code Online (Sandbox Code Playgroud)

如果是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 
Run Code Online (Sandbox Code Playgroud)