【Snowflake】クエリの実行時間を制御

【Snowflake】クエリの実行時間を制御 | Tableau-id Press -タブロイド-
snowflake-logo-1200x630-960x504-1 (1)

やしろです。

今回は、Snowflakeのクエリ実行時間の制御についてご紹介します。

ウェアハウスについて

Snowflakeのウェアハウスは、クエリの開始と終了のタイミングで自動的に再開、停止してくれます。
必要な間だけ勝手に起動し、一定時間稼働がないと勝手に停止してくれるのでありがたいのですが、気をつけないといけないのがうっかり重たいクエリを流してしまって、ウェアハウスががんばって延々と回り続ける…といった事態です。

STATEMENT_TIMEOUT_IN_SECONDSとは

こういった事態を避けるためにウェアハウスに「STATEMENT_TIMEOUT_IN_SECONDS」を設定しておきましょう。
これは、「実行中のSQLステートメント(クエリ、DDL、DMLなど)がシステムによってキャンセルされるまでの時間を秒単位で指定する」パラメータです。

ALTER WAREHOUSE COMPUTE_WH
SET STATEMENT_TIMEOUT_IN_SECONDS = 7200;

例えば上記のコマンドを実行すると、”COMPUTE_WH”ウェアハウスにおいて2時間以上かかるクエリを強制的にキャンセルする設定にできます。

ただ、この設定は個々のウェアハウスに対して実施しないといけないため、既存のウェアハウスの設定を1個ずつ変更する必要がある上、新たに作成するウェアハウスに対しても都度設定しなければなりません。
そこで、アカウント全体に対して、デフォルト値を設定しましょう。

ALTER ACCOUNT SET STATEMENT_TIMEOUT_IN_SECONDS = 7200;

こちらのコマンドを実行すると、アカウント全体のウェアハウスに対する「STATEMENT_TIMEOUT_IN_SECONDS」のデフォルト値を2時間に設定できます。
(ちなみになにも設定しないと、最大で172800秒 = 48時間 = 2日間ウェアハウスが頑張ってくれちゃいます…頼もしいけど恐ろしい)

このアカウント下では、特に指定がないウェアハウスに対しては2時間の制限、個別に明示的に「STATEMENT_TIMEOUT_IN_SECONDS」の値を指定しているウェアハウスに対しては、個別に設定した値が優先されます。
これは既存のウェアハウスと、今後このアカウント内に作成されるウェアハウスに適用されます。
あらかじめ設定しておくことで、うっかりサイズの大きいクエリを流しちゃってクレジット大量消費してしまった…なんていう事故を防ぐことができます。

個別のウェアハウスの設定値の変更も容易なので、とりあえずアカウントのデフォルト値として設定しておくことをおすすめします!!

おわりに

今回は、ウェアハウスのデフォルト値の設定についてご紹介しました。
細かなところですが、コストに直結するのでちゃんと意識しておきたいですよね。

truestarでは、Snowflake導入検討、導入支援や環境構築まで幅広くサポート可能です。
Snowflakeに興味がある、導入済みだけどもっとうまく活用したい等々ありましたら、ぜひこちらから相談ください!
また、truestarではSnowflake Marketplaceにて、加工済みオープンデータを無償提供するPrepper Open Data Bank、全国の飲食店の情報を集めたデータセットの販売を行っております。(サービスリンク

これまでのSnowflakeに関する記事はこちら