Delta Connectors 0.3.0 发布
我们很高兴地宣布发布 Delta Connectors 0.3.0,该版本引入了对写入 Delta 表的支持。此版本的关键功能包括:
Delta Standalone
-
写入功能 - 此版本引入了新的 API,支持在不使用 Apache Spark™ 的情况下创建和写入 Delta 表。外部处理引擎可以自行写入 parquet 数据文件,然后使用 API 以原子方式将文件添加到 Delta 表中。遵循 Delta 事务日志协议,该实现使用乐观并发控制来管理多个写入器,自动生成检查点文件,并根据协议管理日志和检查点清理。主要公开的 Java 类是
OptimisticTransaction
,可以通过DeltaLog.startTransaction()
访问。OptimisticTransaction.markFilesAsRead(readPredicates)
必须用于在事务期间读取所有元数据(而不是DeltaLog
)。它用于检测并发更新,并确定此事务与先前提交的事务之间的逻辑冲突是否可以解决。OptimisticTransaction.commit(actions, operation, engineInfo)
用于将更改提交到表中。如果冲突事务已首先提交(见上文),则会抛出异常,否则将返回已提交的表版本。- 幂等写入可以使用
OptimisticTransaction.txnVersion(appId)
来检查同一应用程序提交的版本增量。 - 每次提交都必须指定事务正在执行的
Operation
。 - 在 Microsoft Azure 和 Amazon S3 上并发写入的事务保证。此版本包括自定义扩展,以支持在 Azure 和 S3 存储系统上进行并发写入,这些系统本身不具备必要的原子性和持久性保证。请注意,事务保证仅适用于来自单个集群的 S3 上的并发写入。
-
用于读取快照中文件的内存优化迭代器实现 -
DeltaScan
引入了一种迭代器实现,用于读取快照中的AddFiles
,并支持分区剪枝。它可以通过Snapshot.scan()
或Snapshot.scan(predicate)
访问,后者根据predicate
和文件元数据中的任何分区列过滤文件。此 API 在读取Snapshot
中的文件和实例化DeltaLog
时(由于内部利用)显著减少了内存占用。 -
写入操作中元数据读取和冲突检测的分区过滤 - 此版本引入了一个简单的表达式框架,用于元数据查询中的分区剪枝。在快照中读取文件时,通过将
predicate
传递给Snapshot.scan(predicate)
来根据分区列过滤返回的AddFiles
。在事务期间更新表时,通过将readPredicate
传递给OptimisticTransaction.markFilesAsRead(readPredicate)
来指定读取了哪些分区,以便检测逻辑冲突并尽可能避免事务冲突。 -
其他更新
ParquetSchemaConverter
将StructType
模式转换为 Parquet 模式。Iterator<VersionLog> DeltaLog.getChanges()
公开了一个增量元数据更改 API。VersionLog 封装了版本号和该版本中的操作列表。- 修复了
RowRecord
的 #197,以便可以读取分区列中的值。 - 其他错误修复。
Delta Connectors
-
对 Hive Connector 的 Hive 3 支持
-
用于原生读取 Delta 表的 Microsoft PowerBI 连接器 - 无需运行 Spark 集群,即可直接从 PowerBI 从 PowerBI 支持的任何存储系统读取 Delta 表。功能包括 PowerBI 服务中的在线/计划刷新、支持 Delta Lake 时间旅行(例如
VERSION AS OF
)以及使用 Delta 表的分区模式进行分区消除。有关更多详细信息,请参阅专门的 README.md。
致谢
Alex、Allison Portis、Denny Lee、Gerhard Brueckl、Pawel Kubit、Scott Sandre、Shixiong Zhu、Wang Wei、Yann Byron、Yuhong Chen、gurunath
访问发行说明以了解有关此版本的更多信息。