Amazon Athena

S3のデータに対してSQLクエリできる。 課金体系は、スキャン量課金で、1TB毎に5ドル程度(BigQueryやRedshift Spectrumも同程度の額)。

コスト最適化

主に2パターンある。

  • データを列指向のparquet型などで持つ

  • パーティション分割により、データのスキャン量を削減

パーティション分割

  • Hiveパーティションの場合

    • MSCK REPAIR TABLEでパーティションを認識させられる

      • この場合、GlueのData Catalogでパーティション状況がわかる。

    • Athenaからのパーティション射影により、DDLでパーティション認識させることができる

      • この場合、GlueのData Catalogでパーティション状況が見えなくなり、テーブルのスキーマ定義などだけが記録される。

後者の場合が設定は楽だが、他サービスはこのパーティション射影に対応してない場合があり、その場合はMSCK REPAIR TABLEを使う方が良い可能性がある。 他、メリットデメリットについては参考URLを参照。

参考

カラム更新時のPARTITION再設定

カラムを変更(float->double)などに変更した場合、作成済みのPARTITIONについては再度作成が必要となる。 (データをINSERT INTOなどで挿入しようとすると、エラーとなる。)

エラーとなったパーティションについてGlueで型の定義を確認することが可能。

以下のクエリでエラーとなったパーティションを再作成して上書きすることも可能。

ALTER TABLE default.device_table ADD
PARTITION (year = '2022', month = '10', day = '25')

ただしAthenaの場合、通常は一回DROPするか、MSCK REPAIR TALBEする方が良いと考えられる。

なおパーティション射影の場合は、これは発生しない?と思われる。

参考記事

Last updated