【Snowflake】Snowflake ~ ウェアハウス / Warehouse ~

■ はじめに

 Snowflake の
ウェアハウス(Warehouse、仮想ウェアハウスも同じ意味)
について、こつこつまとめていく

目次

【1】ウェアハウス (Warehouse)
【2】SQL文 / コマンド
 1)CREATE WAREHOUSE
 2)ALTER WAREHOUSE
 3)DROP WAREHOUSE
 4)SHOW WAREHOUSES
 5)DESCRIBE WAREHOUSE
【3】ウェアハウスの種類
 補足:Snowpark
【4】ウェアハウスのサイズ
 1)ウェアハウスのサイズ変更方法
 注意点1)5XL-6XLの使用について
 注意点2)サーバ数の制限
【5】マルチクラスターウェアハウス

【1】ウェアハウス (Warehouse)

より抜粋
~~~~~~~~~
ウェアハウスは、Snowflakeセッションで次の操作を実行するために、
 CPU、メモリ、一時ストレージなどの必要なリソースを提供します
~~~~~~~~~
 => SQLなどの処理に使用されるクラスタ(コンピュートリソース)を
  ウェアハウスとして定義
 => AWS の EC2 みたいなもんで、サイズが存在し、
  大きければレスポンスも早くなるがお金も掛かる

cf. warehouse = 倉庫

* 以下のサイトが参考になるかも。

https://dev.classmethod.jp/articles/snowflake-introduction-virtualwarehouses/

【2】SQL文 / コマンド

* 説明する順番として、少しおかしいが、
 ウェアハウスがどういった要素で成り立っているかを
 知るために、SQL文を見るのがいいのかなっと思い
 この順番で説明する

1)CREATE WAREHOUSE

https://docs.snowflake.com/ja/sql-reference/sql/create-warehouse.html

CREATE WAREHOUSE IF NOT EXISTS demo_wh
  -- 「【3】ウェアハウスの種類」を参照
  WAREHOUSE_TYPE = STANDARD
  -- 「【4】ウェアハウスのサイズ」を参照
  WAREHOUSE_SIZE = LARGE
  -- 「【5】マルチクラスターウェアハウス」を参照
  MIN_CLUSTER_COUNT = 1
  MAX_CLUSTER_COUNT = 10
  -- スケーリングポリシーの設定
  SCALING_POLICY = STANDARD
  -- ウェアハウスが自動的に中断されるまでの非アクティブの秒数を指定
  AUTO_SUSPEND = 600
  -- ウェアハウスを自動的に再開するかどうか
  AUTO_RESUME = TRUE
  -- ウェアハウスが最初に「一時停止」状態で作成されるかどうかを指定
  INITIALLY_SUSPENDED = TRUE
  -- 関連記事「Snowflake ~ リソースモニター ~」を参照
  -- https://dk521123.hatenablog.com/entry/2022/12/01/000000  
  RESOURCE_MONITOR = demo_resource_monitor
  -- コメント文
  COMMENT = 'This is a sample'
  -- クエリアクセラレーションサービス を有効にするかどうかを指定
  ENABLE_QUERY_ACCELERATION = TRUE
  -- クエリアクセラレーション用のコンピューティングリソースを
  -- リースするための最大スケールファクターを指定 (0-100)
  QUERY_ACCELERATION_MAX_SCALE_FACTOR = 8
;

2)ALTER WAREHOUSE

https://docs.snowflake.com/ja/sql-reference/sql/alter-warehouse.html

-- Size を「XLARGE」に変更する場合 (SETが必要)
ALTER WAREHOUSE demo_wh
  SET WAREHOUSE_SIZE=XLARGE
;

-- クラスター数を変更する場合(SETは一回でOK)
ALTER WAREHOUSE demo_wh
  SET
    MIN_CLUSTER_COUNT=2
    MAX_CLUSTER_COUNT=5
;

3)DROP WAREHOUSE

-- 指定された仮想ウェアハウスをシステムから削除
DROP WAREHOUSE demo_wh;

-- あったら削除
DROP WAREHOUSE IF EXISTS demo_wh;

4)SHOW WAREHOUSES

https://docs.snowflake.com/ja/sql-reference/sql/show-warehouses.html

-- アクセス権限があるアカウント内の全ウェアハウスを一覧表示
SHOW WAREHOUSES;

-- LIKEによる絞り込み
SHOW WAREHOUSES LIKE '%demo%';

5)DESCRIBE WAREHOUSE

https://docs.snowflake.com/ja/sql-reference/sql/desc-warehouse.html

* 指定したウェアハウスの以下の情報を表示
 + ウェアハウス名
 + ウェアハウスが作成された日付

 => 正直、存在チェックくらいしか使い道ないかと、、、

describe warehouse demo_wh;

【3】ウェアハウスの種類

1)標準(STANDARD)
2)Snowpark用に最適化(SNOWPARK-OPTIMIZED)

補足:Snowpark

https://docs.snowflake.com/ja/developer-guide/snowpark/index.html

より抜粋
~~~~~~~
データパイプライン内のデータをクエリおよび処理するための
直感的な API を提供
~~~~~~~
 => サポート言語でプログラム的にデータを取得・加工できるAPIみたい。。。

* 以下のサイトなど、参照。

https://qiita.com/ta9ma_0k/items/ecef74f5e10b405124d0

サポート言語

1)Scala
2)Java
3)Python

【4】ウェアハウスのサイズ

https://docs.snowflake.com/ja/user-guide/warehouses-overview.html#warehouse-size

XS/S/M/L/XL/2XL-4XL の8種類 + 5XL-6XL (AWS限定)

※ 5XL-6XLについては、「注意点1)5XL-6XLの使用について」も参照

1)ウェアハウスのサイズ変更方法

* 以下の2通り。
 方法1:Web UIから変更する
 方法2:SQL文「ALTER WAREHOUSE」で変更する

方法1:Web UIから変更する

[1] Snowflake の Web UI (Classic Web Interface) にログイン
[2] 画面上部の[Warehouses]タブを選択
[3] 使用しているウェアハウス一覧が表示されるので、
 対象の <ウェアハウス名> を選択する(リンク押下じゃない)
[4] 対象ウェアハウスを選択した状態で[Configure...]ボタン押下
[5] Size欄で、変更したいSizeに選択し、「Finish」ボタン押下
 => 一覧で対象ウェアハウスで変更できているかを確認する

方法2:SQL文「ALTER WAREHOUSE」で変更する

* 「2)ALTER WAREHOUSE」を参照

注意点1)5XL-6XLの使用について

使いたいと思ったからといって、すぐには使えなさそう。

https://docs.snowflake.com/ja/user-guide/warehouses-overview.html#larger-warehouse-sizes

より抜粋
~~~~~~~~~~~~~~
5XLまたは6XLウェアハウスをプロビジョニングする前に、
Snowflakeサポートにお問い合わせください。
~~~~~~~~~~~~~~

注意点2)サーバ数の制限

X4LargeのWarehouse を2つ使って、SQLを実行しようとした際に
以下のエラーが発生した。
 => 1アカウントで、使える最大サーバ数が制限されている模様

エラー内容

Maximum number of servers for the account exceeded.
Please try again with smaller or fewer warehouses, or contact Snowflake Support.

[訳]
本アカウントの最大サーバ数を超えました。
小さい又はいつかのウェアハウスで再度実行して頂くか
Snowflakeサポートまでお問合せください。

【5】マルチクラスターウェアハウス

* 複数サーバクラスターで
 ピーク時など変動する同時同時クエリ数を処理
* Min/Max を 1-10 で指定できる

https://docs.snowflake.com/ja/user-guide/warehouses-multicluster.html

関連記事

Snowflake ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2021/11/02/130111
Snowflake ~ 基本編 / ステージ ~
https://dk521123.hatenablog.com/entry/2022/09/01/220643
Snowflake ~ 基本編 / データロード ~
https://dk521123.hatenablog.com/entry/2021/11/15/221245
Snowflake ~ データロードのパフォーマンス ~
https://dk521123.hatenablog.com/entry/2022/12/07/111847
Snowflake ~ ウェアハウス負荷監視 ~
https://dk521123.hatenablog.com/entry/2022/12/06/191727
Snowflake ~ リソースモニター ~
https://dk521123.hatenablog.com/entry/2022/12/01/000000