注意事项和限制
使用 Athena 读取 Apache Hudi 表时,请考虑以下几点。
-
读取和写入操作:Athena 可以读取压缩的 Hudi 数据集,但不能写入 Hudi 数据。
-
Hudi 版本:Athena 支持 Hudi 版本 0.14.0(默认值)和 0.15.0。Athena 不保证与使用更高版本的 Hudi 创建的表具有读取兼容性。有关 Hudi 功能和版本控制的更多信息,请参阅 Apache 网站上的 Hudi 文档
。请注意,Athena 上的 0.15.0 版 Hudi 连接器不支持引导启动表。要使用 Hudi 连接器 0.15.0,请设置以下表属性: ALTER TABLEtable_nameSET TBLPROPERTIES ('athena_enable_native_hudi_connector_implementation' = 'true') -
跨账户查询:Hudi 连接器 0.15.0 版不支持跨账户查询。
-
查询类型:目前,Athena 支持快照查询和读取优化查询,但不支持增量查询。在 MOR 表上,所有在读取优化查询中显示的 数据均已压缩。这提供了良好的性能,但不包括最新的增量提交。快照查询包含最新的数据,但会但产生一些计算开销,这使得这些查询的性能降低。有关在表和查询类型之间权衡的更多信息,请参阅 Apache Hudi 文档中的表和查询类型
。 -
增量查询 – Athena 不支持增量查询。
-
CTAS – Athena 不支持对 Hudi 数据执行 CTAS 或者 INSERT INTO。如果您希望 Athena 支持编写 Hudi 数据集,请将反馈发送至
<athena-feedback@amazon.com>。有关编写 Hudi 数据的更多信息,请参阅以下资源:
-
Apache Hudi 文档中的写入数据
。
-
MSCK REPAIR TABLE – 不支持在 Athena 的 Hudi 表上使用 MSCK REPAIR TABLE。如果您需要加载未在 Amazon Glue 中创建的 Hudi 表,请使用 ALTER TABLE ADD PARTITION。
-
不支持跳过 Amazon Glacier 对象 – 如果 Apache Hudi 表中的对象属于 Amazon Glacier 存储类别,将
read_restored_glacier_objects表属性设置为false则无效。例如,假设发出以下命令:
ALTER TABLEtable_nameSET TBLPROPERTIES ('read_restored_glacier_objects' = 'false')对于 Iceberg 和 Delta Lake 表,该命令会生成错误
Unsupported table property key: read_restored_glacier_objects。对于 Hudi 表,ALTER TABLE命令不会产生错误,但是仍无法跳过 Amazon Glacier 对象。在ALTER TABLE命令之后运行SELECT查询会继续返回所有对象。 -
时间戳查询 – 当前,试图读取 Hudi 实时表中时间戳列的查询要么失败,要么产生空结果。此限制仅适用于读取时间戳列的查询。仅包含同一表中非时间戳列的查询会成功。
失败的查询会返回类似于以下内容的消息:
GENERIC_INTERNAL_ERROR: class org.apache.hadoop.io.ArrayWritable cannot be cast to class org.apache.hadoop.hive.serde2.io.TimestampWritableV2 (org.apache.hadoop.io.ArrayWritable and org.apache.hadoop.hive.serde2.io.TimestampWritableV2 are in unnamed module of loader io.trino.server.PluginClassLoader @75c67992)