元々AWS Redshiftを使っていたのですが、結構お高く、Google BigQueryに乗り換えました。
その後、Redshift Spectrum が出て、ひょっとしたらBigQueryよりいいのではと気になっていたので触ってみた感想です。
また、Redshift Spectrumが使えるようセットアップすると、合わせてAWS Athenaも使えるようになるので、その使用感も記載しました。
Redshift Spectrum とは?
AWS Redshift Spectrum とは、Redshiftの機能の一部で、わざわざテーブルにデータをロードする必要はなく、S3に置かれたファイルを直接Redshiftのテーブルとして使うことができます。
それにより、データベースの料金を抑えることができるというメリットがあります。
使い方
S3のファイルを直接テーブルとして読めるからといって、S3のディレクトリを指定すれば直ぐに使えるほど、うまい話ではありませんでした…。
データ自体はS3にあるとしても、テーブル定義(テーブル名・カラム名・データ型)をまず準備する必要があります。
テーブル定義は、AWS Glueを使って自動で行います。
Glueでは、S3のディレクトリを指定すると、その配下のファイルをクロールして、そこに置かれているデータのテーブル定義を自動で作ってくれます。1つのフォルダに複数の種類のテーブルのデータがあっても自動識別して、それぞれ別のテーブルとして定義してくれます。
テーブル定義を自動でやってくれるなんて、そんなうまい話があるのか!?とテンション上がったのですが、そんなうまい話ではありませんでした…。
自動で作られたテーブル定義は、そのままでは使えない場合が多く、結局手動で修正し直します。しかも、明確にこちら側で定義したい場合でも、自動識別がその定義を勝手に変えたりして、逆に邪魔だったりします。更に、テーブル定義の技術はHiveのメタストアを利用していて、色々自分で意図通りに調整するとなると敷居は低くないです。
テーブル定義が済むと、後はRedshiftから、通常のテーブルと同じように扱えるようになります。
Redshft Spectrum の使用感
速度に関してはまぁこんなものかなっといった感じです。特に遅くも、早くも感じませんでした。
気になったのは料金。データがS3ファイルになったところで、Redshiftの料金は従来通りのものがかかります。
そもそもRedshiftはデータベース容量料金が高いのではなく、計算するクラスター料金が高いので、データソースをRedshift Spectrumにしても料金は高いまま変わりませんでした。
Athena
AWS Athena とは?
AthenaもRedshft Spectrum同様、S3のファイルをテーブルとして直接見に行けるデータベースサービスです。
テーブル定義もRedshft Spectrum同様、必要になります。
テーブル定義はAthenaでAthena専用に作ることもできるのですが、Redshft Spectrumの時にGlueで作成したものも使えます。Glueはデータ加工機能もあり、AWS的にはGlueをデータ処理のハブにしたそうな雰囲気を感じました。
Redshft Spectrumは使用している・いないにかかわらず、Redshiftクラスターが立ち上がっている間中料金が発生するのですが、Athenaはクエリを実行して、クエリがデータを見にいった量に対して料金が発生します。そういった意味では、Google BigQueryに近い料金体系です。
Athena の使用感
Athenaは「Presto」という技術を使っているのですが、クエリの書き方にクセがあって使いづらかったです。Redshft Spectrum用のクエリもそのままではAthenaでは動かず、一般的なクエリもそのままではAthenaでは動かず、結局Prestoのリファレンスを見ながら、Athena用のクエリを書く必要があります。
雰囲気は分かったので、必要になったらその時考えようということで、現時点で積極的に使っていく気にはなりませんでした。
結論
- Redshft Spectrum は、料金高いままなので、BigQueryでいいかなぁといった感想です。
- Athena は、「テーブル定義準備」「方言の強いクエリ作成」… 面倒くさいからいいやぁといった感想です。