假设我有一个名为data
的表,它是一个时间序列,它是这样存储的:
/data
/date=2022-11-30
/region=usa
part-000001.parquet
part-000002.parquet
在这里我有两个分区键和两个分区的 parquet 文件。我可以很容易地列出文件的分区键与:
dbfs.fs.ls('/data/date=2022-11-30/region=usa')
但是,如果我现在对表进行更新,它会重新生成 parquet 文件,现在我在该目录中有4 files
。
如何检索parquet文件的latest version
?我真的必须遍历所有_delta_log
状态文件并重建状态吗?还是必须运行VACCUM
来清理旧版本,以便获得最新的文件?
一定有什么神奇的功能。
1条答案
按热度按时间roejwanj1#
Delta Lake本身会在其事务日志中跟踪所有这些信息。当您使用支持Delta Lake的引擎或API查询Delta表时,Delta Lake会阅读此事务日志,以确定组成该表版本的文件。
对于您的示例,假设四个文件是:
Delta事务日志本身包含每个表版本的文件路径,例如:
如果要使用Scala/JVM获取文件列表,可以使用Delta Standalone;如果要使用Delta Rust和/或Python绑定,可以使用Delta Rust。
如果你想在Spark SQL中实现这一点和/或深入了解这方面的细节,请查看Diving into Delta Lake: Unpacking the Transaction Log,其中包括关于这一主题的视频、博客和笔记本,还有一个后续视频Under the sediments v2。