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

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

设置分区投影

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

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

  2. 为表启用分区投影。

此部分说明如何为 Amazon Glue 设置这些表属性。要设置这些地址,您可以使用Amazon Glue控制台, AthenaCREATE TABLE查询,或 Amazon Glue API 运算。以下过程说明如何在 Amazon Glue 控制台中设置属性。对于一个使用CREATE TABLE语句,请参阅Amazon Kinesis Data Firehose 示例.

使用Amazon Glue控制台

  1. 登录到Amazon Web Services Management Console并打开Amazon Glue在处控制台https://console.aws.amazon.com/glue/.

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

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

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

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

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

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

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

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

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

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

    
                        在中的表属性中启用分区投影Amazon 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 存储位置

当您在Amazon Glue中,您还可以为投影分区指定自定义 Amazon S3 路径模板。使用自定义模板,Athena 可以将分区值正确映射到自定义 Amazon S3 文件位置,这些位置不遵循典型.../column=value/...模式。

可以选择使用自定义模板。但是,如果您使用自定义模板,则该模板中必须为每个分区列包含一个占位符。模板化位置必须以正斜杠结尾,以便分区的数据文件位于每个分区的 “文件夹” 中。

指定自定义分区位置模板

  1. 按照步骤操作使用Amazon Glue控制台中,添加一个指定自定义模板的附加键/值对,如下所示:

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

    2. 对于 Value (值),指定一个位置,该位置为每个分区列包含一个占位符。确保每个占位符(和 S3 路径本身)都以单个正斜杠终止。

      以下示例模板值假定一个具有分区列 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