如何查看 Athena 表中某一行的 Amazon S3 源文件?

上次更新时间:2019 年 11 月 6 日

我在查询 Amazon Athena 中的表。我要如何确定输出中各行的源是哪个 Amazon Simple Storage Service (Amazon S3) 文件,或者哪些行对应于某个特定文件呢?

简短描述

  • 要查明哪个 Amazon S3 文件包含 Athena 表中某个特定行返回的数据,可使用 SELECT $path 查询。
  • 要了解 Athena 表的哪些行关联到特定 Amazon S3 文件,可使用 WHERE $path 条件运行 SELECT 查询。

此类查询可用于调查意外数据和构建需要源数据相关信息的查询。

解决方法

运行以下查询之前,请确保您已拥有:

  • 一个 Athena 表。如果您没有表,请运行 CREATE TABLE 语句。
  • 具有运行 Athena 查询权限的 AWS Identity and Access Management (IAM) 用户或角色。

要查找与 Athena 表中某一行关联的 S3 文件:

1.    对您的表运行 SELECT 查询,以返回您想要的数据:

SELECT * FROM "my_database"."my_table" WHERE year=2019;

2.    要查找该数据的 Amazon S3 源文件,请运行类似于以下内容的查询:

SELECT "$path" FROM "my_database"."my_table" WHERE year=2019;

查询将返回该数据的 Amazon S3 路径:

s3://awsexamplebucket/datasets_mytable/year=2019/data_file1.json

要返回 Athena 表中源自特定 Amazon S3 文件的某些行:

1.    确认您要检索的行的 Amazon S3 对象的名称和位置。如果您不知道对象名称和位置,请运行 ls 命令以列出特定 S3 存储桶或前缀下的对象。在下面的示例中,将 s3://awsexamplebucket/my_table/my_partition/ 替换为您分区的路径。

aws s3 ls s3://awsexamplebucket/my_table/my_partition/

2.    在 Athena 中,对您的表运行 SELECT 查询,以返回与 Amazon S3 文件关联的数据:

SELECT *,"$path" FROM "my_database"."my_table" WHERE "$path" LIKE 's3://awsexamplebucket/my_table/my_partition/file-01.csv'

该查询返回匹配 Amazon S3 路径的数据:

id    name    year    $path
3     John    1999    's3://awsexamplebucket/my_table/my_partition/file-01.csv'
4     Jane    2000    's3://awsexamplebucket/my_table/my_partition/file-01.csv'

该查询还支持一些通配符功能。例如,要返回包含某文件名一部分的所有数据,可运行类似以下查询:

SELECT *,"$path" FROM "my_database"."my_table" WHERE "$path" LIKE '%-02%'

此查询返回文件名包含 -02 所有行:

id    name    year    $path
13    Mia     2009    's3://awsexamplebucket/my_table/my_partition/file-02.csv'
14    Mary    2010    's3://awsexamplebucket/my_table/my_partition/file-02.csv'
15    Max     2011    's3://awsexamplebucket/my_table/my_partition/file-02.csv'
16    Merriam 2012    's3://awsexamplebucket/my_table/my_partition/file-02.csv'

这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助吗?