S3のバケットに
s3://バケット名/HOGE/20170824/00_0.gz
s3://バケット名/HOGE/20170824/00_1.gz
みたいな感じでログを置いています。
Athenaを利用して軽く集計してみようかなーと思ったところ、パーティションを分ける必要がありました。
(分けないでも実行できるけど、よりお金かかるから分けたほうがいい)
Hiveフォーマットに沿って格納されていれば簡単だけど、上記のように 20170824
だとそれぞれでAlter Tableを叩かないといけないのでめんどくさい・・・
ので、開始日と終了日を指定してわーっとAlter Table叩いてくれるShell Scriptを書きました。
#!/bin/sh
STARTDATE=2016-11-01
ENDDATE=2020-10-31
CURRENTDATE=$STARTDATE
while [ 1 ] ; do
CURRENTYEAR=`date -d "$CURRENTDATE" "+%Y"`
CURRENTMONTH=`date -d "$CURRENTDATE" "+%m"`
CURRENTDAY=`date -d "$CURRENTDATE" "+%d"`
aws --region ap-northeast-1 athena start-query-execution --query-string "ALTER TABLE データベース名.テーブル名 ADD PARTITION (year=$CURRENTYEAR,month=$CURRENTMONTH,day=$CURRENTDAY) location 's3://バケット名/HOGE/$CURRENTYEAR$CURRENTMONTH$CURRENTDAY/'" --result-configuration OutputLocation=s3://結果出力先
if [ $CURRENTDATE = $ENDDATE ] ; then
break
fi
CURRENTDATE=`date -d "$CURRENTDATE 1day" "+%Y-%m-%d"`
done
おしまい。