この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
S3バケットに置いたCSVファイルやJSONファイルをAmazon Athenaで確認することがあります。 そこでふと気になりました。ファイルを上書き(または削除してから追加)した場合、ちゃんと反映されるのだろうか?)と。 試してみました。
おすすめの方
- S3のファイルを上書き(または削除&追加)した際のAthena動作を知りたい方
最初に結論
- S3のファイルを上書き(または削除&追加)したとき、新しいファイルの内容が取得できる
CSVファイルで試してみる
S3バケットへのアップロード(CSV)
S3バケットにCSVファイルをアップロードします。
sample.csv
time,user,level
2020-11-23,aaa,111
2020-11-23,bbb,333
2020-11-24,aaa,113
2020-11-25,aaa,115
2020-11-25,bbb,334
- アップロード先:s3://cm-fujii.genki-athena-test/test/sample.csv
Athenaテーブルの作成
まずは適当にデータベースを作成します。
CREATE DATABASE overwrite_test
続いてテーブルを作成します。
CREATE EXTERNAL TABLE IF NOT EXISTS overwrite_test.csv_test_table (
`time` date,
`user` string,
`level` int
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES (
'serialization.format' = ',',
'field.delim' = ','
) LOCATION 's3://cm-fujii.genki-athena-test/test/'
TBLPROPERTIES ('has_encrypted_data'='false', 'skip.header.line.count'='1');
データ取得
データ取得してみます。バッチリ取得できました。
SELECT * FROM "overwrite_test"."csv_test_table" limit 10;
CSVファイルを上書きし、データ取得する
S3バケットのCSVファイルを上書きします。
sample.csv
time,user,level
2020-12-13,xxx,1111
2020-12-13,yyy,2222
2020-12-14,xxx,3333
2020-12-15,xxx,4444
2020-12-15,zzz,5555
テーブルの再作成などは行わず、そのままデータ取得してみます。
SELECT * FROM "overwrite_test"."csv_test_table" limit 10;
上書きしたCSVファイルの内容が取得できました。
CSVファイルを削除してから追加し、データ取得する
CSVファイルを削除し、Athenaでデータ取得します。
SELECT * FROM "overwrite_test"."csv_test_table" limit 10;
取得したデータは0件でした。
このまま新しいCSVファイルをアップロードします。
sample.csv
time,user,level
2000-10-03,foo,11
2000-10-03,bar,22
2000-10-04,bar,33
2000-10-05,foo,44
2000-10-05,bar,55
テーブルの再作成などは行わず、そのままデータ取得してみます。
SELECT * FROM "overwrite_test"."csv_test_table" limit 10;
アップロードしたCSVファイルの内容が取得できました。
さいごに
ふと疑問に思ったので試してみました。十中八九問題ないと考えていましたが、実際にそのとおりで安心です。