pyspark 数据块-如何获得当前版本的增量表 parquet 文件

rqdpfwrv  于 2022-12-03  发布在  Spark
关注(0)|答案(1)|浏览(134)

假设我有一个名为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来清理旧版本,以便获得最新的文件?
一定有什么神奇的功能。

roejwanj

roejwanj1#

Delta Lake本身会在其事务日志中跟踪所有这些信息。当您使用支持Delta Lake的引擎或API查询Delta表时,Delta Lake会阅读此事务日志,以确定组成该表版本的文件。
对于您的示例,假设四个文件是:

/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和/或Python绑定,可以使用Delta Rust
如果你想在Spark SQL中实现这一点和/或深入了解这方面的细节,请查看Diving into Delta Lake: Unpacking the Transaction Log,其中包括关于这一主题的视频、博客和笔记本,还有一个后续视频Under the sediments v2

相关问题