Databricks - 如何获取 delta 表 parquet 文件的当前版本

问题描述 投票:0回答:1

假设我有一张名为

data
的表,它是一些时间序列。它的存储方式如下:

/data
   /date=2022-11-30
      /region=usa
         part-000001.parquet
         part-000002.parquet

我有两个分区键和两个镶木地板文件分区。我可以轻松列出分区键的文件:

dbfs.fs.ls('/data/date=2022-11-30/region=usa')

但是,如果我现在对表进行更新,它会重新生成镶木地板文件,现在该目录中有

4 files

如何检索镶木地板文件的

latest version
?我真的必须循环遍历所有
_delta_log
状态文件并重建状态吗?或者我是否必须运行
VACCUM
来清理旧版本,以便我可以获得最新的文件?

一定有一个神奇的功能。

apache-spark pyspark databricks parquet delta-lake
1个回答
2
投票

Delta Lake 本身在其事务日志中跟踪所有这些信息。当您使用支持 Delta Lake 的引擎或 API 查询 Delta 表时,它会在幕后读取此事务日志,以确定哪些文件构成该版本的表。

对于您的示例,假设这四个文件是:

/data
   /date=2022-11-30
      /region=usa
         part-000001.parquet
         part-000002.parquet
         part-000003.parquet
         part-000004.parquet

Delta事务日志本身包含每个表版本的文件路径,例如:

# VO | first version of the table
/data
   /date=2022-11-30
      /region=usa
         part-000001.parquet
         part-000002.parquet

# V1 | second version of the table
/data
   /date=2022-11-30
      /region=usa
         part-000003.parquet
         part-000004.parquet

如果您想使用 Scala/JVM 获取文件列表,可以使用 Delta Standalone 和/或 Delta Rust 使用 Delta Rust 和/或 Python 绑定。

如果您想在 Spark SQL 中执行此操作和/或深入了解相关详细信息,请查看深入 Delta Lake:解压事务日志,其中包括有关此主题的视频、博客和笔记本。还有一个后续视频,名为 在沉积物 v2 下

© www.soinside.com 2019 - 2024. All rights reserved.