使用Polars读取Azure Databricks创建的Delta表报错:未知单位'days'
问题描述
我通过Azure Databricks在Azure Data Lake中创建了一些Delta表,尝试参照Polars官方文档指引执行pl.read_delta(table_path, storage_options=storage_options)读取这些表,但操作失败并出现报错。具体报错信息如下:
Exception has occurred: PyDeltaTableError X Failed to apply transaction log: Failed to read delta config: Validation failed - Unknown unit 'days File "C:\Users\S1P967\Untitled-1.txt", line 12, in <module> pl.read_delta(table_path, storage_options=storage_options) deltalake.PyDeltaTableError: Failed to apply transaction log: Failed to read delta config: Validation failed - Unknown unit 'days'
请问这是否意味着Databricks实现的Delta事务日志结构存在差异?
解答
这个报错本质是Databricks的Delta Lake扩展了标准Delta Lake的配置项,而Polars依赖的deltalake库(Rust实现的Delta Lake客户端)目前不支持这些Databricks专属的配置单位。
具体来说,你遇到的Unknown unit 'days'问题,大概率是因为Databricks创建的Delta表中包含了类似delta.logRetentionDuration或delta.deletedFileRetentionDuration这类配置,且使用了days作为时间单位——而标准Delta Lake的Rust客户端(deltalake)目前只支持seconds作为这类配置的单位,无法识别days。
这并非事务日志核心结构的差异,而是Databricks对Delta Lake做了厂商专属扩展,而Polars依赖的底层Delta客户端尚未兼容这些扩展项。
可行的解决方向:
- 手动修改Delta表的配置,将时间单位改为
seconds(比如把30 days替换为2592000 seconds),之后再用Polars读取 - 等待
deltalake库更新,支持Databricks的时间单位扩展 - 先通过Databricks将Delta表导出为Parquet格式,再用Polars读取Parquet文件
内容的提问来源于stack exchange,提问作者Grevioos
相关产品推荐
相关产品推荐

