Snowflake使用時に長時間実行を防ぐ方法
うちもついにSnowflakeを導入したっす!
Snowflakeは処理時間が長いほど料金がかかっちゃうから、
WebFOCUSのタイムアウト設定 “connection_limit" をしっかり設定しておかないと!
かにくん・・・
残念だけど “connection_limit" ではSnowflakeは止まらないよ
え!?
“connection_limit" を設定したら長時間のリクエストを止められるって聞いたっすよ
画面やログにもちゃんとタイムアウトのメッセージが出てたっす!
“connection_limit" は、設定した時間で「WebFOCUSのエージェント」を停止してくれるからレポートやグラフの作成処理は停止されるけど、Snowflakeの処理までは止めてくれないんだ
Snowflakeの処理にタイムアウトを設定したいなら、アダプタに
queryTimeoutパラメータ
を設定しないと
Snowflakeの設定変更を行うことができる場合は、Snowflake側の「STATEMENT_TIMEOUT_IN_SECONDS」パラメータの時間を変更することでSnowflakeのタイムアウト時間を設定できます。
ご検討の際はSnowflakeの管理担当者様にご相談ください。
queryTimeoutパラメータとは
queryTimeoutパラメータは、SnowflakeのJDBCドライバーに追加することができるパラメータです。
クエリの処理時間が、このパラメータに指定した時間を超過した場合はSnowflakeの処理を強制終了します。
参考:Snowflake Documentation ドライバー – JDBC – パラメータ参照情報
https://docs.snowflake.com/ja/developer-guide/jdbc/jdbc-parameters#querytimeout
Snowflakeアダプタの「URL」欄にこのパラメータを追加することで、WebFOCUSから実行した
クエリ処理にのみタイムアウト時間を設定することができます!
設定手順
1)Webコンソールにアクセスして、Snowflakeアダプタのプロパティを開きます。
管理画面にアクセスし、[データの取得]をクリック。
「Snowflake」アダプタをダブルクリックして選択。
アダプタを右クリックし、[プロパティ]を選択。
2)queryTimeoutパラメータをURLに追加します。
プロパティ画面の[URL]欄を選択し、URL末尾に「&|queryTimeout=時間(秒)」を追加。
変更例
<変更前>
jdbc:snowflake://アカウント識別子/?warehouse=ウェアハウス名&|db=データベース名&|schema=スキーマ名&|role=ロール名
<変更後>※タイムアウト時間を90秒に設定しています。
jdbc:snowflake://アカウント識別子/?warehouse=ウェアハウス名&|db=データベース名&|schema=スキーマ名&|role=ロール名&|queryTimeout=90
「queryTimeout=90」を設定して5分以上かかるリクエストを実行した場合、
約90秒ほど経過時点でSnowflakeの処理が終了していました。
Snowflake処理にタイムアウト時間を設定することができました!
不要なコストの発生を防ぐために、是非タイムアウト設定の追加を検討してみてください!!