查询 Linux Foundation Delta Lake 表
Linux Foundation Delta LakeMSCK REPAIR
语句。
Delta Lake 格式会存储每个数据文件每列的最小值和最大值。Athena 实施利用该信息在谓词上启用文件跳过,以消除不需要的文件。
注意事项和限制
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。
-
Delta Lake 读取器版本 – 支持最高版本 3 的 Delta Lake 读取器协议。
-
列映射和 timestampNtz – Delta 列映射
,它允许 Delta 表列和底层 Parquet 文件列使用不同的名称,并且支持不带时区的时间戳 (timestampNtz )。 -
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 一起使用和为 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
查询会继续返回所有对象。
支持的非分区列数据类型
对于非分区列,除 CHAR
外,支持 Athena 支持的所有数据类型(Delta Lake 协议本身不支持 CHAR
)。支持的数据类型包括:
boolean tinyint smallint integer bigint double float decimal varchar string binary date timestamp array map struct
支持的分区列数据类型
对于分区列,Athena 支持具有以下数据类型的表:
boolean integer smallint tinyint bigint decimal float double date timestamp varchar
有关 Athena 中数据类型的更多信息,请参阅 Amazon Athena 中的数据类型。
开始使用
要进行查询,Delta Lake 表必须存在于 Amazon Glue 中。如果表位于 Amazon S3 但不在 Amazon Glue 中,请使用以下语法运行 CREATE EXTERNAL TABLE
语句。如果表已存在于 Amazon Glue 中(例如,因为您正在将 Apache Spark 或其他引擎与 Amazon Glue 结合使用),则可以跳过此步骤。
CREATE EXTERNAL TABLE [
db_name
.]table_name
LOCATION 's3://DOC-EXAMPLE-BUCKET/your-folder
/' TBLPROPERTIES ('table_type' = 'DELTA')
请注意,列定义、SerDe 库和其他表属性会省略。与传统的 Hive 表不同,Delta Lake 表元数据是从 Delta Lake 事务日志中推断出来的,并直接同步到 Amazon Glue。
注意
对于 Delta Lake 表,不允许包含除 LOCATION
和 table_type
属性外的 CREATE TABLE
语句。
读取 Delta Lake 表
要查询 Delta Lake 表,请使用标准 SQL SELECT
语法:
[ WITH with_query [, ...] ]SELECT [ ALL | DISTINCT ] select_expression [, ...] [ FROM from_item [, ...] ] [ WHERE condition ] [ GROUP BY [ ALL | DISTINCT ] grouping_element [, ...] ] [ HAVING condition ] [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select ] [ ORDER BY expression [ ASC | DESC ] [ NULLS FIRST | NULLS LAST] [, ...] ] [ OFFSET count [ ROW | ROWS ] ] [ LIMIT [ count | ALL ] ]
有关 SELECT
语句的更多信息,请参阅 Athena 文档中的 SELECT。
Delta Lake 格式会存储每个数据文件每列的最小值和最大值。Athena 利用该信息在谓词上启用文件跳过,以消除不需要的文件。
同步 Delta Lake 元数据
如果您使用 Athena 创建 Delta Lake 表,Athena 会将表元数据(包括架构、分区列和表属性)同步到 Amazon Glue。随着时间推移,该元数据可能会中断与事务日志中基础表元数据的同步。要让表保持最新状态,您可以选择以下选项之一:
-
为 Delta Lake 表使用 Amazon Glue 爬网程序。有关更多信息,请参阅 Amazon 大数据博客中的带 Amazon Glue 爬网程序的原生 Delta Lake 表支持的简介
和《Amazon Glue 开发人员指南》中的计划 Amazon Glue 爬网程序。 -
在 Athena 中删除并重新创建表格。
-
使用 SDK、CLI 或 Amazon Glue 控制台手动更新 Amazon Glue 中的架构。
请注意:以下功能要求您的 Amazon Glue 架构始终具有与事务日志相同的架构:
-
Lake Formation
-
视图
-
行和列筛选器
如果您的工作流程不需要任何此功能,并且您不希望保持这种兼容性,则可以在 Athena 中使用 CREATE TABLE
DDL,然后将 Amazon S3 路径作为 SerDe 参数添加到 Amazon Glue 中。
使用 Athena 和 Amazon Glue 控制台创建 Delta Lake 表
从 https://console.aws.amazon.com/athena/
打开 Athena 控制台。 -
在 Athena 查询编辑器中,使用以下 DDL 创建您的 Delta Lake 表。请注意:使用此方法时,
TBLPROPERTIES
的值必须为'spark.sql.sources.provider' = 'delta'
,而不是'table_type' = 'delta'
。请注意:当您使用 Apache Spark(Athena for Apache Spark)或大多数其他引擎创建表时,会插入相同的架构(其中包含一个名为
col
的array<string>
类型列)。CREATE EXTERNAL TABLE [db_name.]table_name(col array<string>) LOCATION 's3://DOC-EXAMPLE-BUCKET/
your-folder
/' TBLPROPERTIES ('spark.sql.sources.provider' = 'delta') 通过 https://console.aws.amazon.com/glue/
打开 Amazon Glue 控制台。 -
在导航窗格中,选择数据目录、表。
-
在表的列表中,选择表的链接。
-
在表格页面上,选择操作、编辑表格。
-
在 Serde 参数部分,添加带有值
s3://DOC-EXAMPLE-BUCKET/
的键your-folder
/path
。 -
选择保存。
其他 资源
有关将 Delta Lake 表与 Amazon Glue 一起使用以及使用 Athena 查询表的讨论,请参阅 Amazon 大数据博客中的使用开源 Delta Lake 和 Amazon Glue 处理 UPSERT 数据操作