Amazon Athena クエリの結果が、結果内の各行における Amazon Simple Storage Service (Amazon S3) ソースファイルのロケーションを返すよう設定したいと考えています。
簡単な説明
クエリが返したデータのソースファイルパスを返す、Athena クエリを記述します。
- Athena テーブル内の特定の行が返すデータに含まれる Amazon S3 ファイルを特定するには、SELECT $path クエリを実行します。
- 特定の Amazon S3 ファイルに関連する Atrhena テーブルの行を特定するには、WHERE $path 条件を指定して SELECT クエリを実行します。
解決策
前提条件: 本記事のクエリを実行する前に、次の項目が必要です。
- Athena テーブル。テーブルが存在しない場合は、CREATE TABLE ステートメントを実行します。
- Athena クエリの実行権限を持つ AWS Identity and Access Management (IAM) ユーザーまたはロール。
Athena テーブルの行に関連する S3 ファイルを特定する
Athena テーブルの行に関連する S3 ファイルのパスを特定するには、次の例に類似したクエリを実行します。
-
目的のデータを返すには、テーブルに対し、SELECT クエリを実行します。
SELECT * FROM "my_database"."my_table" WHERE year=2019;
-
データに関連する 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 ソースファイルを含むすべての行を特定する場合は、次の手順を参照してください。
-
取得対象の行に関連する Amazon S3 オブジェクトの名前とロケーションを確認します。オブジェクト名とロケーションが不明の場合は、ls コマンドを実行し、特定の S3 バケットまたはプレフィックスに属するオブジェクトを一覧表示します。次の例において、s3://awsexamplebucket/my_table/my_partition/ を目的のパーティションパスに置き換えてください。
aws s3 ls s3://awsexamplebucket/my_table/my_partition/
-
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 ソースデータのファイルロケーションを取得する