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

1 分钟阅读
0

我在查询 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 regexp_like("$path", '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 regexp_like("$path", '\-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'

相关信息

Parquet SerDe

连接到数据源

AWS 官方
AWS 官方已更新 2 年前