

# 查询 Linux Foundation Delta Lake 表
<a name="delta-lake-tables"></a>

Linux Foundation [Delta Lake](https://delta.io/) 是一种用于大数据分析的表格格式。您可以使用 Amazon Athena 直接读取存储在 Amazon S3 中的 Delta Lake 表，无需生成清单文件或运行 `MSCK REPAIR` 语句。

Delta Lake 格式会存储每个数据文件每列的最小值和最大值。Athena 实施利用该信息在谓词上启用文件跳过，以消除不需要的文件。

## 注意事项和限制
<a name="delta-lake-tables-considerations-and-limitations"></a>

Athena 中的 Delta Lake 支持具有以下注意事项和限制：
+ **仅包含 Amazon Glue 目录的表** – 仅通过注册到 Amazon Glue 的表支持原生 Delta Lake。如果 Delta Lake 表已注册到其他元存储，您仍可保留该表并将其视为主元存储。由于 Delta Lake 元数据存储在文件系统（例如 Amazon S3）中而不是元存储中，因此 Athena 只需 Amazon 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 集成可用于架构与 Amazon Glue 同步的 Delta Lake 表。有关更多信息，请参阅《*Amazon Lake Formation 开发人员指南*》中的 [Amazon Lake Formation 与 Amazon Athena 一起使用](https://docs.amazonaws.cn/lake-formation/latest/dg/athena-lf.html)和[为 Delta Lake 表设置权限](https://docs.amazonaws.cn/lake-formation/latest/dg/set-up-delta-table.html)。
+ **Limited DDL support**（有限的 DDL 支持）– 支持以下 DDL 语句：`CREATE EXTERNAL TABLE`、`SHOW COLUMNS`、`SHOW TBLPROPERTIES`、`SHOW PARTITIONS`、`SHOW CREATE TABLE` 和 `DESCRIBE`。有关使用 `CREATE EXTERNAL TABLE` 语句的信息，请参阅 [Delta Lake 表入门](delta-lake-tables-getting-started.md) 一节。
+ **不支持跳过 Amazon Glacier 对象** – 如果 Linux Foundation Delta Lake 表中的对象属于 Amazon 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\$1restored\$1glacier\$1objects。对于 Hudi 表，`ALTER TABLE` 命令不会产生错误，但是仍无法跳过 Amazon Glacier 对象。在 `ALTER TABLE` 命令之后运行 `SELECT` 查询会继续返回所有对象。
+ **加密表** – Athena 不支持原生读取 CSE-KMS 加密的 Delta Lake 表。这包括 SELECT 语句和 DDL 语句。

### Delta Lake 版本控制和 Athena
<a name="delta-lake-tables-versioning"></a>

Athena 不使用 Delta Lake 文档中列出的[版本控制](https://docs.delta.io/latest/releases.html)。要确定您的 Delta Lake 表是否与 Athena 兼容，请考虑以下两个特征：
+ **读取器版本**：每张 Delta Lake 表都提供读取器版本。目前，该版本为 1 到 3 的数字。如果查询包含 Athena 不支持的读取器版本的表，则查询将失败。
+ **表功能**：每个 Delta Lake 表也可以声明一组读取器/写入器功能。由于 Athena 对 Delta Lake 为只读支持，因此表写入器功能的兼容性不适用。但是，对于包含不支持的表读取器功能的表，对其的查询将失败。

下表显示了 Athena 支持的 Delta Lake 读取器版本和 Delta Lake 桌面读取器功能。


****  

| 查询类型 | 支持的读取器版本 | 支持的读取器功能 | 
| --- | --- | --- | 
| DQL（SELECT 语句） | <= 3 | [列映射](https://docs.delta.io/latest/delta-column-mapping.html)、[timestampnTZ](https://github.com/delta-io/delta/blob/master/PROTOCOL.md#timestamp-without-timezone-timestampntz) 和[删除向量](https://docs.delta.io/latest/delta-deletion-vectors.html) | 
| DDL | <= 1 | 不适用。只能在读取器版本为 2 或更高版本的表上声明读取器功能。 | 
+ 有关 Delta Lake 表功能的列表，请参阅 GitHub.com 上[表功能中的有效功能名称](https://github.com/delta-io/delta/blob/master/PROTOCOL.md#valid-feature-names-in-table-features)
+ 有关按协议版本划分的 Delta Lake 功能列表，请参阅 GitHub.com 上的 [Features by protocol version](https://docs.delta.io/latest/versioning.html#features-by-protocol-version)。

要在 Athena 中创建读取器版本高于 1 的 Delta Lake 表，请参阅[同步 Delta Lake 元数据](delta-lake-tables-syncing-metadata.md)。

**Topics**
+ [注意事项和限制](#delta-lake-tables-considerations-and-limitations)
+ [支持的列数据类型](delta-lake-tables-supported-data-types-columns.md)
+ [Delta Lake 表入门](delta-lake-tables-getting-started.md)
+ [使用 SQL 查询 Delta Lake 表](delta-lake-tables-querying.md)
+ [同步 Delta Lake 元数据](delta-lake-tables-syncing-metadata.md)
+ [其他资源](delta-lake-tables-additional-resources.md)