设置分区投影 - Amazon Athena
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

设置分区投影

在表的属性中设置分区投影是一个包含两个步骤的过程:

  1. 指定每个分区列的数据范围和相关模式,或使用自定义模板。

  2. 为表启用分区投影。

此部分说明如何为 AWS Glue 设置这些表属性。要设置这些表属性,您可以使用 AWS Glue 控制台、Athena CREATE TABLE 查询或 AWS Glue API 操作。以下过程说明如何在 AWS Glue 控制台中设置属性。

如何使用 AWS Glue 控制台

  1. 登录 AWS 管理控制台并通过以下网址打开 AWS Glue 控制台:https://console.amazonaws.cn/glue/

  2. 选择 Tables (表) 选项卡。

    Tables (表) 选项卡上,您可以编辑现有表,也可以选择 Add tables (添加表) 来创建新表。有关手动添加表或使用爬探器的信息,请参阅 使用 AWS Glue 控制台AWS Glue 开发人员指南.

  3. 在表的列表中,选择要编辑的表的链接。

    
                        在 AWS Glue 控制台,选择要编辑的表格。
  4. 选择 Edit table (编辑表)

    
                        选择 编辑表格 在 AWS Glue 控制台。
  5. Edit table details (编辑表详细信息) 对话框的 Table properties (表属性) 部分中,对于每个分区列,添加以下键/值对:

    1. 对于 Key (键),添加 projection.columnName.type

    2. 对于 ,添加一个支持的类型: enumintegerdate,或 injected。有关详细信息,请参阅 受支持的分区投影类型.

  6. 按照受支持的分区投影类型中的指导信息进行操作,根据配置要求添加其他键/值对。

    以下示例表配置将为分区投影配置 year 列,从而将可返回的值限定为 2000 年至 2016 年的数据。

    
                        配置分区列的分区投影 AWS Glue 控制台表属性。
  7. 添加键/值对以启用分区投影。对于 Key (键),输入 projection.enabled,对于其 Value (值),输入 true

    
                        启用表中的表中的分区投影 AWS Glue 控制台。
    注意

    您可以随时通过将 projection.enabled 设置为 false 来对此表禁用分区投影。

  8. 完成后,请选择 Apply (应用)

  9. 在 Athena 查询编辑器中,测试查询为表配置的列。

    以下示例查询使用 SELECT DISTINCTyear 列返回唯一值。数据库包含 1987 年至 2016 年的数据,但 projection.year.range 属性将返回的值限定为 2000 年至 2016 年的数据。

    
                        查询使用分区投影的列。
    注意

    如果将 projection.enabled 设置为 true,但未能配置一个或多个分区列,则会收到与以下内容类似的错误消息:

    HIVE_METASTORE_ERROR: Table database_name.table_name is configured for partition projection, but the following partition columns are missing projection configuration: [column_name] (table database_name.table_name).

指定自定义 S3 存储位置

在 AWS Glue 中编辑表属性时,还可以为投影分区指定自定义 Amazon S3 路径模板。利用自定义模板,Athena 可以将分区值正确映射到未遵循典型 .../column=value/... 模式的自定义 Amazon S3 文件位置。

可以选择使用自定义模板。但是,如果您使用自定义模板,则该模板中必须为每个分区列包含一个占位符。

指定自定义分区位置模板

  1. 按照步骤操作以configure and enable partition projection using the AWS Glue console,添加一个指定自定义模板的附加键/值对,如下所示:

    1. 对于,输入 storage.location.template

    2. 对于 Value (值),指定一个位置,该位置为每个分区列包含一个占位符。

      以下示例模板值假定一个具有分区列 abc 的表。

      s3://bucket/table_root/a=${a}/${b}/some_static_subdirectory/${c}/
      s3://bucket/table_root/c=${c}/${b}/some_static_subdirectory/${a}/${b}/${c}/${c}/

      对于同一个表,以下示例模板值无效,因为它不包含列 c 的占位符。

      s3://bucket/table_root/a=${a}/${b}/some_static_subdirectory/
  2. 选择 Apply