Amazon Athenaで実行するクエリが想定通りの結果になるかをフルスキャンせずに確かめる方法


結論

  • 任意のテーブル t に対して FROM t TABLESAMPLE SYSTEM(5)JOIN t TABLESAMPLE SYSTEM(5) USING(id) のように書くと、約5%のレコードに対してクエリのロジックを確かめられる。

前提

  • 2019-01-24時点のAthenaを想定。
    • ベースのPrestoはバージョン0.172。

状況

  • クエリが想定通りのロジックになっているか確かめたい。
    • レコードの一部を対象にクエリを実行してテストしたい。
      • より安く早く処理結果を見たい。
        • パーティション指定だけでは不十分。

対応策

  • TABLESAMPLE SYSTEM を使う。
    • TABLESAMPLE SYSTEM(5) なら5%抽出。
    • データのスキャン量が減る。
      • 安くなる。
      • 早くなるはず。

補足

  • TABLESAMPLE で指定する SYSTEMBERNOULLI の違い
    • SYSTEM
      • 抽出率に応じて部分スキャン。
      • レコードの抽出元は偏る可能性がある。
        • サンプルの独立性は保証されない。
    • BERNOULLI
      • 抽出率によらずフルスキャン。

情報源