跳至内容

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

2 分钟阅读
0

我希望我的 Amazon Athena 查询结果返回结果中每一行的 Amazon Simple Storage Service (Amazon S3) 源文件位置。

简短描述

您可以编写 Athena 查询,为查询返回的数据返回源文件路径。

  • 要查找包含 Athena 表中特定行返回的数据的 Amazon S3 文件,请运行 SELECT $path 查询。
  • 要查找与特定 Amazon S3 文件关联的 Athena 表行,请运行带有 WHERE $path 条件的 SELECT 查询。

解决方法

**先决条件:**在运行本文中的查询之前,必须具备以下条件:

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

从 Athena 表中查找与某行关联的 S3 文件

要查找 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

查找来自特定 S3 文件的 Athena 表行

要查找 Athena 表中包含特定 S3 源文件的所有行,请参阅以下步骤:

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

    aws s3 ls s3://awsexamplebucket/my_table/my_partition/
  2. 要返回与 Amazon S3 文件关联的数据,请对您的表运行 SELECT 查询:

    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'

Athena 查询通过 regexp_like 函数支持通配符功能。例如,要返回来自路径中包含相同字符串的所有源文件的数据,请运行如下查询:

SELECT *, "$path" FROM "my_database"."my_table" WHERE regexp_like("$path", 'file-1')

此查询返回文件路径名中包含 file-1 的所有行:

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

相关信息

Parquet SerDe

连接到数据来源

获取 Amazon S3 中源数据的文件位置

AWS 官方已更新 2 年前