#この記事の内容
AWS-Athenaで、ファイル名をカラムに追加するやり方をご紹介します。
もう少し具体的に述べると、
以下のファイル名のデータがS3の同じ場所に格納されていて、
YYYYMMの部分をクエリで利用したいケースを想定しました。
・「test_file_202001.csv」
・「test_file_202002.csv」
・「test_file_202003.csv」
#クエリ例
Athenaでファイル名をカラムとして取得するには、「"$path"」を利用します。
SELECT "$path" FROM テーブル名
#やってみた(環境構築)
バケット名「test-bucket」の配下に、以下3つのデータが格納されています。
・「test_file_202001.csv」
name |
---|
satoshi |
kasumi |
・「test_file_202002.csv」
name |
---|
takeshi |
・「test_file_202003.csv」
name |
---|
musashi |
kojiro |
sakaki |
#やってみた(クエリ実行)
クエリを早速実行してみます。
SELECT
*
, "$path"
FROM
バケット名
S3のバケット名とファイル名の両方が取得できました。
name | $path |
---|---|
satoshi | s3://test-bucket/test_file_202001.csv |
kasumi | s3://test-bucket/test_file_202001.csv |
takeshi | s3://test-bucket/test_file_202002.csv |
musashi | s3://test-bucket/test_file_202003.csv |
kojiro | s3://test-bucket/test_file_202003.csv |
sakaki | s3://test-bucket/test_file_202003.csv |
#応用例
今回のように「YYYYMM」部分のみを取得したい場合は、正規表現を用いて置換して取得しました。
SELECT
*
, REGEXP_REPLACE(REGEXP_REPLACE("$path", '^s3://test-bucket/test_file_', ''), '.csv$', '') AS yyyymm
FROM
バケット名
意図した通りの結果が取得できました!
name | yyyymm |
---|---|
satoshi | 202001 |
kasumi | 202001 |
takeshi | 202002 |
musashi | 202003 |
kojiro | 202003 |
sakaki | 202003 |
#最後に
簡単にカラムを追加できるので非常に便利ですね!
#参考文献
Amazon Athena ユーザーガイド