查询 Linux Foundation Delta Lake 表
Linux Foundation Delta LakeMSCK REPAIR
语句。
Delta Lake 格式会存储每个数据文件每列的最小值和最大值。Athena 实施利用该信息在谓词上启用文件跳过,以消除不需要的文件。
注意事项和限制
Athena 中的 Delta Lake 支持具有以下注意事项和限制:
-
仅包含 AWS Glue 目录的表 – 仅通过注册到 AWS Glue 的表支持原生 Delta Lake。如果 Delta Lake 表已注册到其他元存储,您仍可保留该表并将其视为主元存储。由于 Delta Lake 元数据存储在文件系统(例如 Amazon S3)中而不是元存储中,因此 Athena 只需 AWS Glue 中的位置属性即可从 Delta Lake 表中进行读取。
-
V3 engine only(仅限 V3 引擎)– 仅支持在 Athena 引擎版本 3 上进行 Delta Lake 查询。您必须确保创建的工作组配置为使用 Athena 引擎版本 3。
-
No time travel support(不支持时间旅行)– 不支持使用 Delta Lake 时间旅行功能的查询。
-
Read only(只读)– 不支持编写
UPDATE
、INSERT
、或DELETE
等 DML 语句。 -
Lake Formation 支持 – Lake Formation 集成可用于架构与 AWS Glue 同步的 Delta Lake 表。有关更多信息,请参阅《AWS Lake Formation 开发人员指南》中的 AWS Lake Formation 与 Amazon Athena 一起使用和为 Delta Lake 表设置权限。
-
Limited DDL support(有限的 DDL 支持)– 支持以下 DDL 语句:
CREATE EXTERNAL TABLE
、SHOW COLUMNS
、SHOW TBLPROPERTIES
、SHOW PARTITIONS
、SHOW CREATE TABLE
和DESCRIBE
。有关使用CREATE EXTERNAL TABLE
语句的信息,请参阅 开始使用 一节。 -
不支持跳过 S3 Glacier 对象 – 如果 Linux Foundation Delta Lake 表中的对象属于 Amazon S3 Glacier 存储类,将
read_restored_glacier_objects
表属性设置为false
则无效。例如,假设发出以下命令:
ALTER TABLE
table_name
SET TBLPROPERTIES ('read_restored_glacier_objects' = 'false')对于 Iceberg 和 Delta Lake 表,该命令会生成错误
Unsupported table property key: read_restored_glacier_objects
。对于 Hudi 表,ALTER TABLE
命令不会产生错误,但是 Amazon S3 Glacier 对象仍无法跳过。在ALTER TABLE
命令之后运行SELECT
查询会继续返回所有对象。
Delta Lake 版本控制和 Athena
Athena 不使用 Delta Lake 文档中列出的版本控制
-
读取器版本:每张 Delta Lake 表都提供读取器版本。目前,该版本为 1 到 3 的数字。如果查询包含 Athena 不支持的读取器版本的表,则查询将失败。
-
表功能:每个 Delta Lake 表也可以声明一组读取器/写入器功能。由于 Athena 对 Delta Lake 为只读支持,因此表写入器功能的兼容性不适用。但是,对于包含不支持的表读取器功能的表,对其的查询将失败。
下表显示了 Athena 支持的 Delta Lake 读取器版本和 Delta Lake 桌面读取器功能。
查询类型 | 支持的读取器版本 | 支持的读取器功能 |
---|---|---|
DQL(SELECT 语句) | <= 3 | 列映射 |
DDL | <= 1 | 不适用。只能在读取器版本为 2 或更高版本的表上声明读取器功能。 |
-
有关 Delta Lake 表功能的列表,请参阅 GitHub.com 上表功能中的有效功能名称
-
有关按协议版本划分的 Delta Lake 功能列表,请参阅 GitHub.com 上的 Features by protocol version
。
要在 Athena 中创建读取器版本高于 1 的 Delta Lake 表,请参阅同步 Delta Lake 元数据。