shobylogy

叩けシンプルの杖

S3に貯めてあるログデータを短い準備期間で分析可能な状態にする

S3に貯めているログデータを短い準備期間で分析可能な状態にする必要に迫られたため、AWSのサービスで実現する方法を検討しました。

基本的には、Amazon Athena、もしくはAmazon Redshift Spectrumを使い、S3上のファイルに対して直接クエリを打てる状態にするのが準備速度的にも好ましいと思われます。*1

今回は、主にそれらの二つのサービスの比較検討を行いました。

Amazon Athena

Amazon S3上のデータに対して、標準SQLでクエリを書くことができるサービスです。

aws.amazon.com

データの抽出、加工、読み込みはAmazon Glueを利用しており、CSVなどは簡単にテーブルにマッピングでき、サーバーレスで実行できます。*2

aws.amazon.com

料金はクエリ課金で、1 TB あたり 5 USDと格安です。

ただし、データのパーティションを適切に設定しないとフルスキャンになる上、S3のpathを /key=value/ 形式にしておかないと自動ではパーティションが設定できません。pathが規定のルールに則っていない場合、手動でpartitionを設定する必要があります。

aws.amazon.com

pathなどの制約はありつつも、サクッとS3のデータを分析したい場合は良い選択肢に入ると思います。

Amazon Redshift Spectrum

S3のデータをRedShift上に読み込み、PostgreSQL互換のクエリを書くことができるサービスです。

https://aws.amazon.com/jp/redshift/spectrum/aws.amazon.com

Athenaがサーバーレスなのに対して、こちらはRedShiftクラスターのインスタンスを立ち上げる必要があります。 こちらも1 TB あたり 5 USDのクエリ課金ですが、立ち上げたRedShiftクラスター分の費用は別途かかります。

aws.amazon.com

複雑なクエリに対しては、クラスター数を積めばAthenaよりも高速に処理できるのがメリットとなりそうです。

AthenaとRedshift Spectrumどちらを選ぶか

準備期間が短い分析案件の場合、Athenaを選択するのが良さそうです。 セットアップが容易なのに対して必要十分な機能が得られ、ResShiftクラスターの管理といった煩雑な作業をする必要がありません。

まとめ

S3に貯めてあるログデータを短い準備期間で分析可能な状態にする必要が生じた場合、 Amazon Athena、もしくはAmazon Redshift Spectrumを用いるのが良さそうです。

*1:なお、十分な準備期間がある場合は、RedShiftやBigQueryといったデータウェアハウスにS3のデータをimportする方法も選択肢に入ると思います。

*2:裏側はPrestoが使われているようです