Apache HudiUpsert
指的是将记录插入到现有数据集中(如果它们不存在)或对数据集进行更新(如果它们存在)的功能。
Hudi 处理数据插入和更新事件,而不会创建许多可能导致分析性能问题的小文件。Apache Hudi 会自动跟踪更改并合并文件,以便它们保持最佳大小。这样就不需要构建自定义解决方案来监控许多小文件并将其重写为大文件以减少其数量。
Hudi 数据集适用于以下使用案例:
-
遵守隐私法规,如《一般数据保护条例》
(GDPR)和《加州消费者隐私法》 (CCPA),这些法规将强制执行人们删除个人信息的权力或更改其数据使用方式。 -
处理来自传感器和其它需要特定数据插入和更新事件的物联网 (IoT) 设备的流数据。
Hudi 管理的数据集使用开放存储格式存储在 Amazon S3 中。目前,Athena 可以读取压缩的 Hudi 数据集,但不能写 Hudi 数据。Athena 支持将 Hudi 版本 0.14.0 与 Athena 引擎版本 3 结合使用。这可能随时更改。Athena 不保证与使用更高版本的 Hudi 创建的表具有读取兼容性。有关 Athena 引擎版本控制的更多信息,请参阅 Athena 引擎版本控制。有关 Hudi 功能和版本控制的更多信息,请参阅 Apache 网站上的 Hudi 文档
Hudi 数据集可以采用以下类型之一:
-
写入时复制 (CoW) – 数据以列状格式存储 (Parquet),并且每次更新都会在写入过程中创建一个新版本的文件。
-
读取时合并 (MOR) – 数据使用列式 (Parquet) 和基于行 (Avro) 的格式的组合进行存储。更新记录到基于行的
delta
文件中,并根据需要进行压缩以创建新版本的列式文件。
对于 CoW 数据集,每次更新记录时,包含该记录的文件都会使用更新后的值进行重写。对于 MoR 数据集,每次进行更新时,Hudi 仅写入已更改记录对应的行。MoR 更适合写入或更改繁重而读取量较少的工作负载。CoW 更适合更改频率较低但读取量繁重的工作负载。
Hudi 提供三个查询类型用于访问数据:
-
快照查询 – 该查询用于查看截至给定提交或压缩操作时表的最新快照。对于 MOR 表,快照查询通过在查询时合并最新文件切片的基本文件和增量文件来显示表的最新状态。
-
增量查询 – 查询只能看到自给定提交/压缩以来,写入表的新数据。这有效地提供了更改流以启用增量数据管道。
-
读取优化查询 – 对于 MOR 表,查询将看到最新压缩的数据。对于 CoW 表,查询将看到最新提交的数据。
下表显示了适用于每种表类型的可用 Hudi 查询类型。
表类型 | 可用的 Hudi 查询类型 |
---|---|
写入时复制 | 快照、增量 |
读取时合并 | 快照、增量、读取优化 |
目前,Athena 支持快照查询和读取优化查询,但不支持增量查询。在 MOR 表上,所有在读取优化查询中显示的 数据均已压缩。这提供了良好的性能,但不包括最新的增量提交。快照查询包含最新的数据,但会但产生一些计算开销,这使得这些查询的性能降低。
有关在表和查询类型之间权衡的更多信息,请参阅 Apache Hudi 文档中的表和查询类型
Hudi 术语变更:视图现在为查询
从 Apache Hudi 发布版本 0.5.1 开始,以前所谓的视图现在称为查询。下表总结了旧新术语之间的变更。
旧术语 | 新术语 |
---|---|
CoW:读取优化视图 MoR:实时视图 |
快照查询 |
增量视图 | 增量查询 |
MoR 读取优化视图 | 读取优化的查询 |