Apache Iceberg Python 0.12.0 发布
DataHot 速览
Apache Iceberg 社区发布 Apache Iceberg Python 0.12.0,覆盖 2026 年 2 月初至 8 月底的开发,合并 58 位贡献者的 470 多个 PR,其中 40 多位是首次贡献者。该版本新增 REST Catalog 的 Iceberg 视图支持,可通过 View 对象创建、加载、列出、注册和删除视图。写入侧加入并发提交重试与冲突校验,并新增 incremental_append_scan 增量追加扫描。还支持 v3 geometry/geography 类型、开始用 File Format Writer API 处理 Parquet,以及 REST loadCredentials 等改进。
为什么值得关注:Iceberg 是湖仓表格式核心项目,Python 客户端此次补齐视图、并发写入重试、增量扫描和凭证加载等能力,直接影响数据平台接入与生产可靠性。
本文目录 13 节
译文
AI 逐段翻译Apache Iceberg 社区很高兴地宣布 Apache Iceberg Python 0.12.0 版本发布。
0.12.0 版本涵盖了从 2026 年 2 月初到 8 月末的开发工作,是合并了来自 58 位贡献者的超过 470 个拉取请求 的成果,其中包括 40 多位首次贡献者。
这些说明涵盖了重点内容。完整列表请参阅 变更日志。
版本亮点🔗
REST Catalog 视图支持🔗
此版本增加了对 Iceberg 视图的读取支持。视图可以通过 REST catalog 创建、加载、列出、注册和删除,并通过 View 对象对外暴露。
view=catalog.create_view(identifier=("default","recent_orders"),schema=schema,view_version=view_version,)view=catalog.load_view("default.recent_orders")view.sql_for("spark")- ViewMetadata 读取支持以及
create_view(用于 REST catalog) load_view和View对象 API- 通过 register_view
注册现有视图 - list_views 的分页支持
, - 更多使用视图的示例 以及一个 REST 集成测试套件
对于支持视图端点但在 ConfigResponse 中未声明它们的较旧 REST 服务器,请设置 view-endpoints-supported catalog 属性。
提交重试与并发验证🔗
写入操作现在会在并发提交时 重试并验证冲突。当 catalog 提交因 CommitFailedException 失败时,Transaction.commit_transaction() 会刷新表、检查冲突并重试提交。
增量追加扫描🔗
Table.incremental_append_scan()(#3512)读取在某个快照范围内由追加快照添加的行,并映射到表的当前 schema 上。
scan=table.incremental_append_scan(from_snapshot_id_exclusive=last_processed_snapshot_id,to_snapshot_id_inclusive=table.current_snapshot().snapshot_id,)new_rows=scan.to_arrow()Geometry 和 Geography 类型🔗
v3 geometry 和 geography 原始类型现在已得到支持:schema 解析和序列化、通过 WKB 字节的 Avro 映射,以及 PyArrow/Parquet 集成。
文件格式写入器 API🔗
PyIceberg 已开始使用 文件格式 API 来处理 Parquet 文件。
Catalog 和 REST 改进🔗
- REST
loadCredentials支持,针对目标位置进行最长前缀解析,以及 存储凭据在LoadTableResult - list_namespaces 的分页支持
和list_tables,通过一个共享的 rest-page-size选项overwrite 选项用于 register_tableSigV4 重试配置默认值- 用于 RESTS3 服务端加密配置
- 用于 FsspecFileIO
Glue - create_table
支持用于 S3 Tables 联合数据库为 - SqlCatalog 添加一个
iceberg_type列,用于SqlCatalog,以便将 Iceberg 表与其他条目区分开来,并修复了过滤以用于现有 catalog - 共享 catalog 测试套件的 catalog 属性以及 对不存在的表和命名空间的覆盖
- 将
rest-scan-planning-enabled重命名为scan-planning-mode
CLI🔗
--warehouse标志用于 REST catalog--version标志,弃用version子命令,该子命令现在还会 跳过 catalog 加载--purge选项用于drop table,以请求 catalog 清除底层表文件
缺陷修复🔗
此版本中值得注意的正确性修复:
- 修复了严格的
NotEqualTo/NotIn剪枝用于包含部分 null 或 NaN 的文件 - 更正了
NOT STARTS WITH投影用于截断分区,以及 残差求值 和 基于字符串的starts_with/not_starts_with方法 - 修复了
ManifestEntry.snapshot_idsetter 写入错误索引的问题 - 修复了
OverwriteFiles 中DELETEDmanifest 条目的snapshot_idOverwriteFiles - 保留 manifest 最小序列号为 0而不是将其丢弃
- 剥离了规范要求的删除向量 blob 帧在反序列化之前,并使用一个 Spark 互操作测试覆盖读取路径
- 修复了
deepcopy用于And、Or和Not表达式 - 修复了精度损失在大型整数字符串转换中,并包含 为十进制转换返回的 Long 边界、long 日期字面量的边界哨兵值,以及一个 溢出哨兵值在
LongLiteral.to(FloatType) - 在解析纳秒时间戳时补齐了亚微秒数字,并 处理了非 UTC 纳秒时间戳
- 使用最小字节长度在编码负二次幂十进制数时
- 保留了字典编码在
to_arrow_batch_reader - 修复了
delete_data_file在分区表上 以及 残差NotNaN用于 null 分区值 - 避免了在异常后提交更新构建器在异常后
- 保留了
write_default在应用名称映射时 - 处理了零字节文件在 fsspec
__len__中,从 URI 主机名中提取了 ADLSaccount_name来自 URI 主机名,并 将 S3 虚拟寻址解析为布尔值 - 停止重用
TSaslClientTransport以消除服务端 SASL 噪音 - 拒绝不支持的身份转换类型、空的
source-ids,以及 超出有效范围的十进制精度
破坏性变更🔗
- 将
pyarrow最低版本从 17.0.0 提升到 18.0.0以支持原生 UUID 类型 - 将
pyiceberg-core从>=0.5.1,<0.9.0升级到>=0.10.1,<0.11.0,其在一个新的datafusion附加项 NoopCatalog.table_exists现在返回False而不是抛出异常- 显式删除已不存在的数据文件现在会抛出异常而不是静默失败
基础设施改进🔗
- Python 3.14 支持
- Windows 单元测试作业 已添加到 CI
- CodeQL 安全扫描 用于 GitHub Actions,以及一个 文档化的 Iceberg 安全模型
- 将锁文件管理迁移到 uv-pre-commit,并在 CI 中强制执行
uv.lock的新鲜度 - 第三方 GitHub Actions 固定到 Apache 批准的 SHA,并在每个 PR 上进行 允许列表检查 以及 最小权限工作流权限
- 基于 Papermill 的测试 会执行文档示例,以及一个 发布验证脚本
- 已启用 PR 自动合并
贡献者🔗
$ git shortlog --perl-regexp --author='^((?!dependabot\[bot\]).*)$' -sn pyiceberg-0.11.0..pyiceberg-0.12.0
44 Kevin Liu
36 Yuya Ebihara
12 Anas Khan
11 Alex Stephen
7 geruh
5 Minh Vu
5 Neelesh Salian
4 Gabriel Igliozzi
3 Fokko Driesprong
3 GayathriSrividya
3 Junwang Zhao
3 Sotaro Hikita
3 jj.lee
3 vishnu prakash
2 Aaron Niskode-Dossett
2 ChangHyeon Im
2 David
2 David Dallakyan
2 Jared Yu (余启正)
2 Mrutunjay Kinagi
2 Paul Mathew
2 Sreesh Maheshwar
2 Tanmay Rauth
2 Yingjian Wu
1 Adam
1 Antonio
1 Ben Lai
1 BharatDeva
1 CalebWeisgerber
1 Chris Qiu
1 David Zhao
1 Federico
1 James Bornholt
1 Jared Yu
1 Koen Denecker
1 Kristofer Gaudel
1 Marcin Szymański
1 Ménélik Vero
1 Noritaka Sekiyama
1 Platon G. Gimp
1 Pucheng Yang
1 R. Conner Howell
1 Rob Reeves
1 Ruiyang Wang
1 Sam Verhasselt
1 Sidra
1 Sumanth
1 Sung Yun
1 Thomas Pfeiffer
1 Vova Kot
1 Yong Zheng
1 abnobdoss
1 achasnovskiy
1 antonlin1
1 barking-code
1 committobetter
1 rcjverhoef
1 shiwk
1 spr0els
我们感谢所有贡献者为促成此版本所做的努力!
参与其中🔗
PyIceberg 项目欢迎贡献!我们使用 GitHub issues 来跟踪工作,并使用 Apache Iceberg 社区 Slack 进行讨论。
最简单的入门方式是:
代码审查也是非常受欢迎的贡献——请在您觉得合适的拉取请求上提供反馈!
了解更多信息,请访问 PyIceberg 仓库 或 文档。
这篇内容对你有用吗?
反馈只用于改善内容筛选,不等同于收藏