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
访问发行说明以了解有关此版本的更多信息。