You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Delta表分区下Parquet文件的最新版本

获取Delta表最新版本Parquet文件的方法

假设我有一个名为data的时序Delta表,存储结构如下:

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

该表包含date和region两个分区键,对应分区下有两个Parquet文件,可通过以下命令列出对应分区的文件:

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

更新表后,目录下会生成新的Parquet文件,此时目录下共有4个文件。针对如何获取最新版本Parquet文件的问题,解答如下:

不需要遍历所有_delta_log状态文件手动重建状态,也无需必须执行VACUUM清理旧文件,有几种更直接的方式:

  • 通过Delta Lake API读取最新文件
    利用Spark的Delta Lake API加载表,自动读取_delta_log的最新状态,直接获取当前版本生效的Parquet文件:

    from delta.tables import DeltaTable
    
    delta_table = DeltaTable.forPath(spark, "/data")
    # 获取全表最新版本的文件列表
    latest_files = delta_table.toDF().inputFiles()
    # 筛选指定分区的文件
    target_partition_files = [f for f in latest_files if "date=2022-11-30/region=usa" in f]
    
  • 查询Delta表元数据获取文件信息
    通过DESCRIBE DETAIL命令查询表的元数据,直接获取指定分区最新版本的文件相关信息:

    DESCRIBE DETAIL data WHERE date='2022-11-30' AND region='usa'
    

    结果中的fileCount字段对应当前版本的有效文件数,结合location字段,可进一步提取具体的文件路径。

  • 指定版本加载表(用于版本对比)
    如果需要确认特定版本的文件,可直接指定版本加载表,无需清理旧文件:

    # 加载版本号为2的表数据
    delta_table_v2 = DeltaTable.forPath(spark, "/data").versionAsOf(2)
    v2_files = delta_table_v2.toDF().inputFiles()
    

补充说明:VACUUM的作用是清理不再被任何版本引用的旧文件以释放存储空间,它不是获取最新文件的必要操作。Delta Lake的核心机制就是通过_delta_log跟踪每个版本的文件状态,只要通过Delta官方的API或SQL操作表,就能自动识别当前版本的有效文件,无需手动处理底层文件目录。

内容的提问来源于stack exchange,提问作者VocoJax

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 11:10:33