Delta Lake:如何在下一版本的Delta表中不携带已删除的记录?

2024-10-01 19:15:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我们每天在delta lake表(表名:dst1)中加载源文件作为时间序列数据。 如果deltalake表不存在,我们将创建一个表。如果表确实存在,我们将合并新数据作为时间序列数据

Creating Table if table does not exist:
spark.sql(f"CREATE TABLE {dtable} USING DELTA LOCATION {dmount1}")       
 

If table does exist we will merge the new data as time series data:
here df --> has data for day 1 
     dtable --> has data for day 0.
     jkey --> d.id=ds.id

spark.sql(f"MERGE INTO {dtable} d USING df ds ON {jkey} WHEN MATCHED THEN UPDATE SET * WHEN NOT MATCHED THEN INSERT *")

第1天来源的数据:

Data from source on day1

第2天来源的数据:

Data from source on day2

select * from dst1 VERSION AS OF 0
id  lname   fname   gender  satscore
1   Steve   Jobs    M   1100
2   Mapple  Syrup   F   1300
4   Tom     Cruise  M   1200
6   New     Record  F   1320

select * from dst1 VERSION AS OF 1
id  lname   fname   gender  satscore
1   Steve   Not     M   2000
2   Mapple  Syrup   F   1300
4   Tom     Cruise  M   1200
6   New     Record  F   1320

由于第2天没有id 2,4,6,但我仍然在delta lake table的第1版中看到它们。 我希望增量表的版本1中只有id 1。 我怎样才能做到这一点

https://docs.databricks.com/delta/delta-update.html#language-sql


Tags: 数据idsqldata时间table序列spark
1条回答
网友
1楼 · 发布于 2024-10-01 19:15:05

这不是Delta的工作方式-每个版本都包含应该在其中的所有数据。它不是所有版本的组合来表示所有数据的统一视图。如果在新版本中只需要第2天的条目,则只需覆盖数据,然后需要分别读取每个版本以构建整个表的视图

相关问题 更多 >

    热门问题