データマネジメントチームの日下部 佑起です。
本記事では、Treasure DataのPrestoでのオプションで提供しておりましたresult_output_redirectのオプションについて変更がありましたので、紹介をしていきます。
result_output_redirectについて
Prestoクエリの結果データサイズが大きくなる場合に、パフォーマンスの向上やクエリ結果サイズ上限エラー回避のためのワークアラウンドとしてresult_output_redirectをマジックコメントで記載するオプションを提供しておりました。
result_output_redirectの仕様
result_output_redirectの仕様についてはこちらのドキュメントをご確認ください。
どのようなPrestoクエリに効果的か以下に記載致します。
- SELECT * FROM table のようなシンプルなクエリを巨大なテーブルに実行した場合に特に効果が出やすい
ただ、上記のようなシンプルなクエリーは推奨していないため、以下の弊社ブログの「SQLパフォーマンスチューニングのいろは」をご確認いただき、遅いクエリの場合はチューニングをすることをおすすめ致します。
特にSELECT * FROM tableはすべてのカラムとすべての行を取得するクエリですので、テーブルに何が入っているか確認する際はLIMIT 100などLIMIT句を最後につけて、行数を少なくして実行することを強く推奨しております。
result_output_redirectの常時有効化について
これまではクエリ実行者がマジックコメントで記載することで有効化されておりましたが、この機能をデフォルトですべてのPrestoクエリに対して有効化することとなりました。
常時有効化とした理由について
多くのPrestoクエリにおいてパフォーマンスの向上に効果があり、処理効率の改善に伴うPrestoクラスタの安定化にも効果があると判断し、有効化することとなりました。内部のテスト環境ではPrestoクエリの中で100MB以上のクエリに対して、95%にパフォーマンス向上効果が見られました。本番環境に置きましては、Presto クエリの 20% が result_output_redirect を使用することで、顧客全体のクエリ処理時間が 25%~30% 短縮されました。
以下USリージョンと東京リージョンでの傾向をグラフに示しております。青い棒グラフがresult_output_redirect を使用したジョブ数となっており、黄色の折れ線グラフがクエリの実行時間となっております。result_output_redirect を使用したジョブ数が増えることで、クエリの実行時間が減っていることがわかると思います。
▼USリージョン
▼東京リージョン
スケジュールについて
2021年11月現在においてすべての環境にて有効化となっております。
必要なアクションについて
本オプションは、Prestoクエリの結果データセットの生成プロセスを簡略化するものであり、クエリ結果自体に変更や影響のあるものではありません。そのため、お客様の方で必要なアクションは特にございません。
result_output_redirectが使用できない場合について
以下の条件に合致するPrestoクエリにおいてはresult_output_redirectのオプションはご利用になれません。条件に合致した場合は、result_output_redirectオプションは自動的に無効化されます。Prestoクエリがエラーになることはございません。
- ORDER BYを含むPrestoクエリ(WINDOW関数など並び替えを伴うクエリを含む)
- カラム名に大文字を指定されているPrestoクエリ
- カラム名に重複があるPrestoクエリ
- CREATE TABLE文もしくはINSERT文のPrestoクエリ
result_output_redirectを無効化する場合
ご自身でresult_output_redirectオプションを無効化されたい場合は、以下のマジックコメントをPrestoクエリに記載ください。
--set session result_output_redirect= ‘false’
result_output_redirectについてご不明点やご質問等ございましたら弊社のサポートチームまでご連絡ください。