使用分区索引 - AWS Glue
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

使用分区索引

随着时间推移,数十万个分区被添加到一个表格。的 获取分区API 用于获取表中的现有分区。当在输入中提供有谓词时,API将返回与谓词匹配的分区。

让我们用一个 销售_数据 以表格为例,该表格由 国家, 类别, 、和 . 如果您想要获得销售的所有商品的销售数据, 书籍 类别 2020年,您必须 GetPartitions 以“类别=书籍和年份=2020”为前提的请求, Data Catalog.

如果表上没有分区索引, AWS Glue 加载表中的所有分区,然后使用用户在 GetPartitions 请致电。随着表上的分区数量增加,操作的延迟增加。使用指数, GetPartitions 将尝试获取分区的子集,而不是加载表中的所有分区。

关于分区索引

创建分区索引时,请指定给定表上已存在的分区密钥列表。分区索引是表上定义的分区密钥的子列表。可在表上定义的任何分区密钥排列上创建分区索引。对于上述sales_data表,可能的索引为(国家、类别、年、月)、(国家、类别、年)、(国家、类别)、(国家)(类别、国家、年、月)等。

的 Data Catalog 将按照索引注册时提供的顺序连接分区值。随着分区添加到表,索引构建一致。可以为String和numeric(int,bigint,long,smallint,andsmallint)列类型注册索引。例如,对于包含分区键的表 country (曲线), item (曲线), creationDate (日期),无法在分区键上创建索引 creationDate.

数字数据类型的索引支持操作员之间=、>、>=<和<=。String数据类型仅支持等(=)算子。目前,索引解决方案只支持 AND 逻辑操作员。在使用索引进行过滤的语句中,忽略了使用“点赞”、“在”、“或”和“否”等符号的子句式。在应用索引筛选后,对提取的分区进行忽略子表达的筛选。

使用索引时,将根据当前 AWS Glue 定价政策。更多信息,请参阅 灰浆定价.

创建分区索引

您可以在表创建期间创建分区索引。的 CreateTable 请求将获取 PartitionIndex 对象 作为输入。可在给定表上最多创建3个分区索引。每个分区索引需要一个名称和列表 partitionKeys 定义。可以使用 GetPartitionIndexes API

创建分区索引后的注意事项

创建分区索引后,请记下这些对表和分区功能的更改:

新分区创建(添加索引后)

在表上创建分区索引后,将验证添加到表的所有新分区,以检查索引键的数据类型。索引键的分区值将针对数据类型格式进行验证。如果数据类型检查失败,则创建分区操作将失败。对于销售表,如果为类别类型为关键(类别、年份)创建了索引 string 和类型年份 int,以年份为“焦点”创建新分区将失败。

启用索引后,使用索引键值添加包含字符U+0000、U+00001、U+0002的分区将开始失败。

表更新

在表上创建分区索引后,您不能修改现有分区密钥的分区密钥名称,也不能更改在索引中注册的密钥的类型或顺序。

在Athena中创建表格选择(CTAS)声明

插入选项 在具有分区索引的表中不支持。

使用索引进行优化GetPartitions拜访

当您致电 GetPartitions 在含有索引的表格中,您可以包括一个谓词,如果适用,GlueData目录将使用索引(如果可能)。索引的第一个键应在用于筛选的索引的谓词中传递。将优化筛选指标作为最佳措施。的 Data Catalog 尝试尽可能使用索引优化,但在缺少索引或不支持的操作员的情况下,它可回溯到加载所有分区的现有实施。

对于 销售_数据 请添加索引[国家、类别、年份]。如果谓词中“国家”未通过,则注册的索引将无法使用索引筛选分区。让我们举例说明预测,了解指数如何发挥作用:

Predicates 如何使用指数

国家=“美国”

索引将用于筛选分区。

国家=“美国”,类别=“鞋子”

索引将用于筛选分区。

类别=“鞋子”

指数不会使用,因为“国家/地区”未在谓词中提供。将加载所有分区以返回响应。

国家=“美国”,类别=“鞋子”,年份>“2018”

索引将用于筛选分区。

国家=“美国”,类别=“鞋子”,年份>“2018”,月份=2

索引将用于获取国家=“美国”且类别=“鞋子”且年份>2018的所有分区。然后,对月份预测值进行筛选。

国家=“美国”且类别=“鞋子”或年份>“2018”

指数不会用作 OR 操作员出现在表达中。

国家=“美国”且类别=“鞋子”AND(年份=2017或年份=“2018”)

索引将用于获取国家=“US”和类别=“shoes”的所有分区,然后执行对年份预测值的筛选。