Delta Lake:如何在下一版本的delta table中不携带已删除的记录?
Delta Lake: how to not carry deleted records in next version of delta table?
我们每天都在 delta lake table(table name: dst1) 加载源文件作为时间序列数据。
如果 deltalake table 不存在,我们将创建一个 table。如果 table 确实存在,我们将合并新数据作为时间序列数据。
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 天来源数据:
第 2 天来源数据:
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 的版本 1 中看到它们 table。
我期望 delta table 的版本 1 中只有 id 1。
我怎样才能做到这一点?
https://docs.databricks.com/delta/delta-update.html#language-sql
这不是 Delta 的工作方式 - 每个版本都包含应包含在其中的所有数据。它不是所有版本的组合来表示所有数据的统一视图。如果新版本只需要从第2天开始的条目,那么只需要覆盖数据即可,但是之后就需要分别读取每个版本来构建整体的视图table.
我们每天都在 delta lake table(table name: dst1) 加载源文件作为时间序列数据。 如果 deltalake table 不存在,我们将创建一个 table。如果 table 确实存在,我们将合并新数据作为时间序列数据。
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 天来源数据:
第 2 天来源数据:
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 的版本 1 中看到它们 table。 我期望 delta table 的版本 1 中只有 id 1。 我怎样才能做到这一点?
https://docs.databricks.com/delta/delta-update.html#language-sql
这不是 Delta 的工作方式 - 每个版本都包含应包含在其中的所有数据。它不是所有版本的组合来表示所有数据的统一视图。如果新版本只需要从第2天开始的条目,那么只需要覆盖数据即可,但是之后就需要分别读取每个版本来构建整体的视图table.