Amazon S3 中的表位置 - Amazon Athena
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Amazon S3 中的表位置

在 Athena 中运行 CREATE TABLE 查询时,Athena 将您的表注册到 Amazon Glue Data Catalog 中,这是 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 属性作为基本路径,以列出并随后扫描所有可用文件。但是,您必须使用分区信息更新 Amazon Glue Data Catalog,然后才能查询已分区的表。此信息表示特定分区中文件的架构,以及该分区的文件在 Amazon S3 中的 LOCATION

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

有关在 Athena 中使用分区来提升查询性能并降低查询成本的示例,请参阅 Top 10 performance tuning tips for Amazon Athena