DeltaLake:如何在数据集之间无限地进行时间旅行



用例:

  • 存储大型数据集(CSV/Snowflake表(的版本并跨版本查询

DeltaLake说,除非我们运行真空命令,否则我们会在DeltaTable中保留历史信息。日志文件每30天删除一次。此处

附加文档指出,我们需要日志文件和数据文件来进行时间旅行。此处

这是否意味着我们只能进行30天的时间旅行?

但是Delta不是一种文件格式吗?它将如何自动删除日志?

如果是,可以解决跨数据集版本查询的其他开源版本是什么。?

只需将数据和日志保留设置设置为很长一段时间。

alter table delta.`/path/to/table` set TBLPROPERTIES ('delta.logRetentionDuration'='interval 36500000 days', 'delta.deletedFileRetentionDuration'='interval 36500000 days')
spark.sql("alter table delta.`{table_path}` set TBLPROPERTIES ("
"'delta.logRetentionDuration'='interval {log_retention_days} days', "
"'delta.deletedFileRetentionDuration'='interval {data_rentention_days} days');".format(
table_path="path/to/table",
log_retention_days=36000000,
data_rentention_days=36000000))

Databricks在2018年4月推出了开源deltalake项目(开源deltalake项目仍需获得一些功能,如数据跳过等(详细信息:deltalake,Docs,Github Repo

德尔塔不是文件格式-它是存储层上的镶木地板&元数据(json格式(文件。

它不会自动删除文件。应该执行真空操作以删除旧的&未引用(未激活(文件。因此,在不运行"真空"操作的情况下,您可以无限地进行时间旅行,因为所有数据都是可用的。另一方面,若您执行保留期为30天的"真空",则可以访问最后30天的数据。

是的,它解决了跨数据集版本的查询。每个版本都可以通过时间戳来识别。访问特定版本数据的示例查询:

Scala:

val df = spark.read
.format("delta")
.option("timestampAsOf", "2020-10-01")
.load("/path/to/my/table")

Python:

df = spark.read 
.format("delta") 
.option("timestampAsOf", "2020-10-01") 
.load("/path/to/my/table")

SQL:

SELECT count(*) FROM my_table TIMESTAMP AS OF "2010-10-01"
SELECT count(*) FROM my_table TIMESTAMP AS OF date_sub(current_date(), 1)
SELECT count(*) FROM my_table TIMESTAMP AS OF "2010-10-01 01:30:00.000"

(注意:我在生产中使用开源的deltalake来处理多个用例(

最新更新