Amazon Athena でテーブルをクエリしています。出力の各行のソースとなる Amazon Simple Storage Service (Amazon S3) ファイル、または特定のファイルに対応する行を見つけるにはどうすればよいですか。
簡単な説明
- Athena テーブルの特定の行から返されるデータが含まれる Amazon S3 ファイルを見つけるには、SELECT $path クエリを実行します。
- 特定の Amazon S3 ファイルに関連付けられている Athena テーブルの行を見つけるには、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
特定の Amazon S3 ファイルから生成された Athena テーブルの行を返す方法:
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
データソースへの接続