#はじめに
これはdatatech-jpのアドベントカレンダーの17日目の記事です。
2年弱Athenaを触ってきたので、運用してて注意していたところなどを共有できればと思います。
#記事の対象者
Amazon Athenaを使ってみようと思っている人
#Athenaの概要
##Amazon Athenaって何?
AWSのS3に保存されているファイルに対してSQLでデータを操作できるサービスです。
S3にcsvやparquetファイルなどを配置するとSQLで操作できるのでとっても便利で簡単です。
##料金について
料金はクエリーに対する課金です。
5USD/TBなので0.5TBスキャンしたらなら
0.5*5 = 2.5USD となります。
あとはGlueのデータカタログやS3の料金などは別途かかりますのでご注意を。
#Athenaの運用して思ったこと3選
- クエリーのスキャン量を抑えること
- S3に保存するファイルはcsvではなくparquetにしよう
- さまざまなデータソースと統合してデータ基盤として作るのはちょっとしんどい
##クエリーのスキャン量を抑えること
これまず基本中の基本かと思いますが、スキャン量でお金がかかってくるのでみんなコストは下げたいですよね。
そうなるとスキャン量を抑えるための工夫が必要になります。工夫を書こうと思ったんですが....
流石のAWSさん。公式で書いてくれているんですよね。もうこれを読んだらバッチリだと思います。
##S3に保存するファイルはcsvではなくparquetにしよう
例えばETL処理で、Pythonで前処理したデータをcsvでS3にアップロードしたとします。そのあとGlue Crawlerでテーブル化すると、csvだとうまく型の予測がされない時があります。実際にどういうことが起きたかというと、毎月csvを吐き出すスクリプトを書いたとして、2020-01.csvというcsvの中にIDという列があったとします。このID列はたまたま2020-01のデータにはない状態でした。その際Glueでクローリングするとnull扱いにするのですがデータ型はstringと判断します。2020-02になって新しくcsv吐かれてID列に整数が入ってきた場合にstringで認識されたままなので思っていた変換ができなかったりします。
ということがあり、もしS3に定期的にファイルを出力するようなことがあればparquetにして型を整えたのちに出力するのがおすすめです。
##さまざまなデータソースと統合してデータ基盤として作るのはちょっとしんどい
データ基盤を構築する上で重要な点として、簡単に色々なデータソースと繋げられてデータを投入できることだと思うのですが、巷のdata ingestion toolなど見るとAthenaに綺麗に対応しているツールってあんまり見かけないんですよね。S3に入れればなんとかできるんですが、JSONファイルを加工しないと厳しかったり、データレイクに入れる前に前処理が必要だったりして、そこがつらみだったりします。
BQが裏やま案件になるやつっすね。
Athenaをデータ基盤として利用するケース
個人的な意見ではありますが以下の点でAthenaを採用するのは良いと思います。
- AWS上に会社のデータを保有している
- Redshiftほど大きなデータではなくコストをあまりかけたくない
- 運用コストも下げたいのでマネージドサービスを利用したい
- お試しでデータ基盤をサクッと作りたい
#感想
Amazon Athenaについてすごく簡単に書いた記事でした。実際他にも色々とあったような気がしたんですがちょっとど忘れしてしまいましたw。やっぱり定期的にブログ等でアウトプットせねばダメっすね。
Athenaはとても扱いやすく素早くかつ低コストでデータ基盤を実現できます。その一方でさまざまなSaaSとの連携がしづらいというのが現時点でのデメリットかと思います。データ量も増えてくると実行結果が返ってくるまでに時間がかかったりとパフォーマンスチューニングを考えなきゃいけない点も気をつけないといけないです。
個人的な意見ですが、AWS上にサービス展開している会社でデータ基盤をちょっと構築してみたいというフェーズでは素早く作れるので良いと思います。AWSが出しているQuicksightをつかってデータの可視化も容易なので合わせて使うとなお良いと思います。またデータガバナンスに必要なデータアクセス管理についてはAWS Lake Formationを使って、Athenaの管理をするのがおすすめです。
話は変わりますが、AthenaのようにRedshiftが使えそうなRedshift Serverlessが発表されましたね。Athenaよりもっとデータ量が増える場合はRedshift Serverlessを利用するイメージなんですかねぇ。今後が楽しみです。(以下クラスメソッド様の記事)