Closed3

Amazon Athenaの使い方まとめ

harrythecodeharrythecode

初めに

「Amazon Athena」は「Amazon S3」に直接SQLクエリを実行することが可能なサービスです。データが少量の場合には特に気をつける事項はないのですが、利用量が増えれば増えるほど、最初のデータ設計が非常に重要になってきます。

本書では基本的な使い方含め、もう一歩踏み込んだ使い方までをまとめていきます。なお著者自身もAthenaを使うのは初めてなので悪しからず。

harrythecodeharrythecode

初心者向け

用語解説

基本的な使い方はAthena Console上で行うのが1番理解しやすいです。押さえておきたい用語は以下の通り。

用語 説明
workgroup クエリ制限、結果保存場所など、全体設定が可能
datasource クエリを投げる対象のサービスを指定可能 (Glue,S3,DynamoDB/etc)
table datasourceと紐付き、どのs3パスから何のデータを取得するかを定義する
query SQLクエリ

案外AWSのユーザガイドが1番よくまとまってたりします→Amazon Athena とは

避けて通れないパーティション

https://dev.classmethod.jp/articles/athena-partition-reinvent/

パーティションを一言で表すと「S3上の特定のフォルダ(パス)のみを検索用に使うID」みたいなものです。例えば、S3上で日付フォルダで1年分のデータがあるとします。

* 2022-01-01/**(この下に数百件のファイルが存在する)
* 2022-01-02/**(以下同じ)
...
* 2022-12-31/**

これを全て検索させるととんでもない量になるので日付のパーティションを事前に用意しておくことで、特定日付のフォルダ配下だけを検索することが可能になり、効率化が図れます。

ちなみにS3上で規則正しい状態に保存されてない場合は手動で全てのフォルダにパーティション情報を紐づけていく必要があります😩

トラブルシューティング

JSONエラー: Row is not a valid JSON Object が発生

  • ALTER TABLE <table_name> SET TBLPROPERTIES ('ignore.malformed.json' = 'true')

ignore.malformed.json が true に設定されている場合、不正な形式のレコードは NULL として返されます。

https://aws.amazon.com/jp/premiumsupport/knowledge-center/error-json-athena/

このスクラップは2022/10/18にクローズされました