同步 Delta Lake 元数据
如果您使用 Athena 创建 Delta Lake 表,Athena 会将表元数据(包括架构、分区列和表属性)同步到 AWS Glue。随着时间推移,该元数据可能会中断与事务日志中基础表元数据的同步。要让表保持最新状态,您可以选择以下选项之一:
-
为 Delta Lake 表使用 AWS Glue 爬网程序。有关更多信息,请参阅 AWS 大数据博客中的带 AWS Glue 爬网程序的原生 Delta Lake 表支持的简介
和《AWS Glue 开发人员指南》中的计划 AWS Glue 爬网程序。 -
在 Athena 中删除并重新创建表格。
-
使用 SDK、CLI 或 AWS Glue 控制台手动更新 AWS Glue 中的架构。
请注意:以下功能要求您的 AWS Glue 架构始终具有与事务日志相同的架构:
-
Lake Formation
-
视图
-
行和列筛选器
如果您的工作流程不需要任何此功能,并且您不希望保持这种兼容性,则可以在 Athena 中使用 CREATE TABLE
DDL,然后将 Amazon S3 路径作为 SerDe 参数添加到 AWS Glue 中。
您可以参考以下过程,使用 Athena 和 AWS Glue 控制台创建 Delta Lake 表。
使用 Athena 和 AWS 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://amzn-s3-demo-bucket/
your-folder
/' TBLPROPERTIES ('spark.sql.sources.provider' = 'delta') 通过 https://console.aws.amazon.com/glue/
打开 AWS Glue 控制台。 -
在导航窗格中,选择数据目录、表。
-
在表的列表中,选择表的链接。
-
在表格页面上,选择操作、编辑表格。
-
在 Serde 参数部分,添加带有值
s3://amzn-s3-demo-bucket/
的键your-folder
/path
。 -
选择保存。
要使用 AWS CLI 创建 Delta Lake 表,请输入如下命令。
aws glue create-table --database-name dbname \ --table-input '{"Name" : "tablename", "StorageDescriptor":{ "Columns" : [ { "Name": "col", "Type": "array<string>" } ], "Location" : "s3://
amzn-s3-demo-bucket
/<prefix>
/", "SerdeInfo" : { "Parameters" : { "serialization.format" : "1", "path" : "s3://amzn-s3-demo-bucket
/<prefix>
/" } } }, "PartitionKeys": [], "TableType": "EXTERNAL_TABLE", "Parameters": { "EXTERNAL": "TRUE", "spark.sql.sources.provider": "delta" } }'