[小ネタ]Snowflakeのウェアハウス新規作成時に起動しないように設定してみる #SnowflakeDB

2022.01.21

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

さがらです。

小ネタですが、Snowflakeでウェアハウスを新規作成したときに起動しないように設定する方法をまとめてみます。

デフォルト設定の場合

まず、何も意識せずにウェアハウスを起動した場合を考えてみます。

下図のようにSnowsightのGUI上で設定し、Create Warehouseを押してウェアハウスを新しく作成してみます。

すると、作成したウェアハウスはStarted、つまり起動した状態で作成されます。

凄い細かいのですが、ウェアハウスを作成した直後にそのウェアハウスでクエリを実行することは、あまりないのでは…と個人的に感じています。とりあえずウェアハウスを先に作っておいて…といった流れでウェアハウスを先に定義しておく方が多いのではないでしょうか。

そうすると、ウェアハウスが起動しているのにクエリを実行しないということで、最悪Auto Suspendで指定した時間無駄にウェアハウスが起動してしまうことが想定されます。

最小1分でも起動しているだけで、XLなど大きめのサイズのウェアハウスだとAWS・Enterpriseエディション、TOKYOリージョンの場合、16* (1/60) * 4.3USD = 1.1466666666USD、つまり約130円ほど無駄に消費してしまうわけです。これはAuto Suspendを1分で計算していますが、仮にAuto Suspendを5分で設定している場合、最大650円分無駄に消費するリスクがあります。こう考えると、馬鹿にできなくなってきますよね。

そのため、新規作成したウェアハウスですぐにクエリを実行しない場合、起動しないように設定できたほうが望ましいケースが多いと私は考えています。

対策:INITIALLY_SUSPENDED = TRUEと設定しましょう

ということで、ウェアハウスの新規作成時に起動しないように設定する方法なのですが、コマンドでウェアハウスを作成するCREATE WAREHOUSEを実行する際に、INITIALLY_SUSPENDED = TRUEというオプションを設定すればOKです。

このINITIALLY_SUSPENDEDというオプションですが、デフォルト値はFALSEです。TRUEFALSEでは以下の違いがあります。

  • 指定したウェアハウスは新規作成されますが、「一時停止」状態で作成されます。
  • 指定したウェアハウスは新規作成され、「起動」の状態で作成されます。

実際に実行する時には、下記のようなコマンドになると思います。

CREATE OR REPLACE WAREHOUSE demo_wh WITH
WAREHOUSE_SIZE = 'XSMALL'
WAREHOUSE_TYPE = 'STANDARD'
AUTO_SUSPEND = 60
AUTO_RESUME = TRUE
MIN_CLUSTER_COUNT = 1
MAX_CLUSTER_COUNT = 1
SCALING_POLICY = 'STANDARD'
INITIALLY_SUSPENDED = TRUE;

このコマンドを実行してすぐにウェアハウスの状態を確認すると、Startedになっていませんでした!これで、ウェアハウスの新規作成後にクエリをすぐ実行しなくても、ウェアハウスが起動していないので無駄に課金されることはないですね。

最後に

とても簡単にですが、Snowflakeのウェアハウス新規作成時に起動しないように設定する方法をまとめてみました。

できれば、GUIからもINITIALLY_SUSPENDEDの設定を変更してウェアハウスを作成できると嬉しいですね。アップデートに期待しています!笑