Snowflake使用時に長時間実行を防ぐ方法

2024年3月23日テクニカルメモ

かにくん

うちもついに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処理にタイムアウト時間を設定することができました!

不要なコストの発生を防ぐために、是非タイムアウト設定の追加を検討してみてください!!