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

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

Amazon S3 中的表位置

在 Athena 中运行 CREATE TABLE 查询时,您将表注册到 AWS Glue Data Catalog。(如果您使用 Athena 的较旧内部目录,我们强烈建议您升级到 AWS Glue Data Catalog。)

要在 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 读取 全部 数据存储在 s3://bucketname/folder/'。如果您有数据 希望 Athena 要读取,请勿将该数据存储在同一个数据库中 Amazon S3 文件夹作为您想要的数据 Athena 阅读。如果您在使用分区确保 Athena 扫描某个分区中的数据,则 WHERE 筛选条件必须包括该分区。有关更多信息,请参阅表位置和分区

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

  • 使用尾部斜杠。

    使用:

    s3://bucketname/folder/
  • 请勿使用以下任何项目来指定数据的 LOCATION

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

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

    • 请勿指定 Amazon S3 接入点LOCATION 条款。

      注意

      虽然您无法在Location子句中指定接入点,但是只要请求者拥有对Bucket中对象的权限权限,Athena就可以使用存储桶的接入点查询对象。

    • 不要使用空文件夹,例如 // 在路径中,如下所示: 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 文件夹(称为分区)分组。例如,这些列可以表示创建特定记录的年、月和日。

创建表时,您可以选择对其进行分区。当WhenWhen Athena 针对非分区表运行SQL查询,它使用 LOCATION 表定义的属性作为列表的基本路径,然后扫描所有可用的文件。但是,您必须使用分区信息更新 AWS Glue Data Catalog,然后才能查询已分区的表。此信息表示特定分区中文件的架构,以及该分区的文件在 Amazon S3 中的 LOCATION

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

有关在 Athena 中使用分区来提升查询性能和降低查询成本的示例,请参阅 Amazon Athena 的最佳性能优化提示