Presto 厳格モードを有効にする - Amazon EMR

Presto 厳格モードを有効にする

特定の状況では、クエリを長時間実行するとコストが高くなり、Amazon EMR がより多くのクラスターリソースを使用する可能性があります。これにより、クラスター上の他のワークロードからリソースが奪われます。Amazon EMR バージョン 6.8 以降では、次のような長時間実行されるクエリを拒否または警告する厳格モード機能を使用できます。

  • パーティション化された列に述語がないクエリ。これにより大量のデータがテーブルスキャンされます

  • 2 つの大きなテーブルを相互結合するクエリ

  • 多数の行を無制限にソートするクエリ

Presto がクエリプランを完全に最適化すると、厳格モードが実行されます。厳格モードを使用してクエリのニーズに合わせてカスタマイズするには、以下の方法で Presto を設定できます。

厳格モードのための Presto 設定
設定 説明 デフォルト
strict-mode-enabled 厳格モードのオンとオフを切り替えます。true の値は厳格モードがオンであることを示します。 false
strict-mode-fail-query 厳格モードでは実行時間が長くなりそうなクエリが検出された場合、クエリを拒否します。false の場合、Amazon EMR は警告を発するだけです。 false
strict-mode-restrictions 厳格モードを有効にするときに適用する制限を指定します。厳格モードでは次の制限がサポートされます: MANDATORY_PARTITION_PREDICATE、DISALLOW_CROSS_JOIN、LIMITED_SORT。

MANDATORY_PARTITION_PREDICATE、DISALLOW_CROSS_JOIN、LIMITED_SORT

厳格モードを試してみるには、これらの設定をオーバーライドするか、Presto クライアントを使用するときにセッションプロパティとして設定します。

AWS Management Consoleを使用して、クラスター作成時に設定するには
  1. [クラスターの作成] を選択し、Amazon EMR バージョン 6.8.0、および Presto または Trino を選択します。詳細については、「PrestoDB と Trino をインストールする」を参照してください。

  2. 厳格モードの設定プロパティを直接指定するか、JSON ファイルを Amazon S3 にアップロードします。オプションで、メタストア用を選択します。VPC、サブネット、ブートストラップアクション、キーペア、セキュリティグループを指定します。クラスターを作成するには、[クラスターの作成] を選択します。

  3. クラスターのプライマリノードにログインし、presto-cli または trino-cli を実行します。

  4. クエリを送信します。厳格モードは各クエリを検証し、実行時間が長いかどうかを判断します。strict-mode-fail-query 設定に応じて、Amazon EMR はクエリを拒否するか、警告を発します。

  5. クエリが完了したら、クラスターを終了し、リソースを削除します。

AWS CLI を使用して、実行中のクラスターに設定するには
  1. AWS CLI を使用して、クラスターのプライマリノードにログインし、presto-cli または trino-cli を実行します。

  2. 以下のコマンドを希望する値で実行します。

    set session strict_mode_enabled = true; set session strict_mode_fail_query = false; set session strict_mode_restrictions = 'DISALLOW_CROSS_JOIN,LIMITED_SORT';

考慮事項

厳格モードを使用する場合は、次の点を考慮してください。

  • 厳格モードでは、リソースをあまり消費しない短時間のクエリを拒否できる場合があります。例えば、小さなテーブルのクエリでは、動的フィルタリングは適用されず、内部結合をクロス結合に置き換えることもありません。これにより、クエリで必須パーティション述語が使用されたり、クロス結合が禁止されたりする可能性があります。この場合、厳格モードではクエリが拒否されます。

  • 厳格モードのチェックは、SELECT、INSERT、CREATE TABLE AS SELECT、および EXPLAIN ANALYZE クエリタイプにのみ適用されます。

  • 必須パーティション述語の制限は Hive コネクタでのみ使用できます。