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

Pyspark Structured Streaming读Delta表找不到指定版本文件如何处理?

报错含义

这个报错是Delta Lake流式读取的校验失败触发的:Delta表的所有版本变更都记录在表根目录下的_delta_log事务日志目录中,每个版本对应一个独立的JSON日志文件。你的Structured Streaming作业的checkpoint中记录了上次读取处理完成的Delta表版本为920,本次启动需要拉取版本921的日志文件构建对应快照、读取增量数据时,无法找到该版本的日志文件,因此抛出异常。
常见的触发原因包括:

  • 对Delta表执行了VACUUM操作,清理了早于保留期的旧版本事务日志
  • 手动误删了_delta_log目录下的版本921对应日志文件
  • 作业运行身份没有版本921日志文件的Azure Data Lake读取权限
  • 事务日志文件被其他运维操作移动/重命名
不删除checkpoint、事务日志的解决方案
  • 权限问题修复:先登录Azure Portal检查ADLS容器中Delta表_delta_log目录下的00000000000000000921.json文件是否存在,若存在则校验作业使用的服务主体/托管身份是否有该文件的读取和列出权限,补全权限后重启作业即可。
  • 恢复被删除的事务日志:如果确认版本921的日志文件被删除,且ADLS容器开启了软删除功能,直接在ADLS的回收站中恢复该日志文件,恢复完成后重启作业即可正常读取。
  • 调整checkpoint偏移量跳过缺失版本:如果日志文件无法恢复,且可以接受缺失版本(921到当前Delta表最早可用版本之间)的数据,找到checkpoint目录下的offsets子目录,打开最新的偏移量文件,将Delta源对应的已处理版本号修改为Delta表当前存在的最早版本号,保存后重启作业即可。如果不能接受数据丢失,先手动导出缺失版本对应的增量数据写入结果表,再修改偏移量重启作业。
  • 参数兼容适配:如果业务可以接受至少一次语义、允许少量重复数据,可以在流读取Delta表的配置中添加ignoreChanges参数,跳过版本存在性校验,示例代码如下:
delta_stream_df = spark.readStream \
    .format("delta") \
    .option("ignoreChanges", "true") \
    .load("abfss://<容器名>@<存储账户名>.dfs.core.chinacloudapi.cn/<Delta表路径>")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:54:02