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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

设置分区投影

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

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

  2. 为表启用分区投影。

此部分说明如何为 设置这些表属性。AWS Glue. 要设置它们,您可以使用 AWS Glue 控制台、Athena CREATE TABLE 查询或 AWS Glue API 操作。以下过程说明如何在 AWS Glue 控制台中设置属性。有关使用 CREATE TABLE 语句的示例,请参阅 Amazon Kinesis Data Firehose 示例

使用 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 (编辑表).

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

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

    2. 对于 Value (值),添加受支持的类型之一:enumintegerdateinjected。 有关更多信息,请参阅受支持的分区投影类型

  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 可以将分区值正确映射到未遵循典型 Amazon S3 模式的自定义 .../column=value/... 文件位置。

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

指定自定义分区位置模板

  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.