Amazon S3 中的表位置 - Amazon Athena

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

Amazon S3 中的表位置

当你在 Athena 中运行CREATE TABLE查询时,Athena 会在数据目录中注册你的表 AWS Glue ,这是 Athena 存储元数据的地方。

要在 Amazon S3 中指定数据的路径,请使用 LOCATION 属性,如以下示例中所示:

CREATE EXTERNAL TABLE `test_table`( ... ) ROW FORMAT ... STORED AS INPUTFORMAT ... OUTPUTFORMAT ... LOCATION s3://bucketname/folder/
  • 有关命名存储桶的信息,请参阅《Amazon Simple Storage Service 用户指南》中的 存储桶限制和局限

  • 有关在 Amazon S3 中使用文件夹的信息,请参阅《Amazon Simple Storage Service 用户指南》中的 使用文件夹

Amazon S3 中的 LOCATION 指定表示您的表的所有文件。

重要

Athena 会读取存储在您指定的 Amazon S3 文件夹中的全部数据。如果您有希望 Athena 读取的数据,请不要在与您希望 Athena 读取的数据所在的相同 Amazon S3 文件夹中存储这些数据。如果您在使用分区确保 Athena 扫描某个分区中的数据,则 WHERE 筛选条件必须包括该分区。有关更多信息,请参阅表位置和分区

CREATE TABLE 语句中指定 LOCATION 时,请使用以下准则:

  • 使用尾部斜杠。

  • 您可以使用 Amazon S3 文件夹或 Amazon S3 访问点别名的路径。有关 Amazon S3 访问点别名的信息,请参阅《Amazon S3 用户指南》中的为您的访问点使用存储桶式别名

使用:

s3://bucketname/folder/
s3://access-point-name-metadata-s3alias/folder/

请勿使用以下任何项目来指定数据的 LOCATION

  • 请勿使用文件名、下划线、通配符或 glob 模式来指定文件位置。

  • 请勿将完整 HTTP 表示法(例如 s3.amazon.com)添加到 Amazon S3 存储桶路径。

  • 请勿在路径中使用空文件夹(如 //),如下所示:S3://bucketname/folder//folder/。虽然这是有效的 Amazon S3 路径,但 Athena 不允许并会将其更改为 s3://bucketname/folder/folder/,删除额外的 /

    请勿使用

    s3://path_to_bucket s3://path_to_bucket/* s3://path_to_bucket/mySpecialFile.dat s3://bucketname/prefix/filename.csv s3://test-bucket.s3.amazon.com S3://bucket/prefix//prefix/ arn:aws:s3:::bucketname/prefix s3://arn:aws:s3:<region>:<account_id>:accesspoint/<accesspointname> https://<accesspointname>-<number>.s3-accesspoint.<region>.amazonaws.com

表位置和分区

您的源数据可以基于一组列按 Amazon S3 文件夹(称为分区)分组。例如,这些列可以表示创建特定记录的年、月和日。

创建表时,您可以选择对其进行分区。当 Athena 针对未分区的表执行 SQL 查询时,它使用来自表分区定义的 LOCATION 属性作为基本路径,以列出并随后扫描所有可用文件。但是,在查询分区表之前,必须使用分区信息更新 AWS Glue 数据目录。此信息表示特定分区中文件的架构,以及该分区的文件在 Amazon S3 中的 LOCATION

Athena 对已分区的表运行查询时,它检查以确认在查询的 WHERE 子句中是否使用了任何分区列。如果使用分区列,Athena 会请求数据目录返回 AWS Glue 与指定分区列匹配的分区规范。分区规范包含 LOCATION 属性,从而告知 Athena 在读取数据时应使用哪个 Amazon S3 前缀。在这种情况下, 扫描使用此前缀存储的数据。如果不在 WHERE 子句中使用已分区的列,则 Athena 将扫描属于表的分区的所有文件。

有关在 Athena 中使用分区来提高查询性能和降低查询成本的示例,请参阅 Amazon Athena 的十大性能调整技巧