実践 Zero to Snowflake #4:仮想ウェアハウス(Virtual Warehouses)の設定
個人的取り組みで始めた『実践 Zero to Snoflake』シリーズ。
当エントリは『#4:仮想ウェアハウス(Virtual Warehouses)の設定』について実践を進めていきます。
はじめに
このエントリで言及するチュートリアルで実践しているのは仮想ウェアハウスに関する設定・準備です。
Snowflakeにおける仮想ウェアハウスは単に「ウェアハウス」と呼ばれることが多く「Snowflakeの計算リソースのクラスター」を指します。仮想ウェアハウスには「標準」と「Snowpark用に最適化」の2つのタイプが存在します。
仮想ウェアハウスの仕組みを用いることでSnowflakeデータの分析を可能にする、動的でスケーラブル、かつ費用対効果の高いコンピューティングパワーをあらゆるデータ処理ニーズに対して活用することができるようになります。
その他仮想ウェアハウスに関する概要:
1. コンテキスト設定
実践エントリ#3で紹介していたSQLファイルのうち、下記部分を実行。
ALTER SESSION SET query_tag = '{"origin":"sf_sit-is","name":"tb_zts","version":{"major":1, "minor":1},"attributes":{"is_quickstart":1, "source":"tastybytes", "vignette": "getting_started_with_snowflake"}}';
USE DATABASE tb_101;
USE ROLE accountadmin;
1つめのALTER SESSION SET
コマンドでは、現在のセッションの動作を変更するパラメーターを設定しています。「セッション内のすべてのクエリに対して、由来・名前・バージョン情報・属性などを含む構造化タグを一括付与」しているようですね。項目詳細までは把握しきれていませんが、後述パートで何等か使う機会があるのでしょうか。期待しましょう。
2. ウェアハウスの作成
次いで「ウェアハウスの作成」。
SHOW WAREHOUSES
コマンドで現行環境のウェアハウス一覧を確認したうえで、
SHOW WAREHOUSES;
所定の設定値でmy_wh
というウェアハウスをCREATE OR REPLACE WAREHOUSE
コマンドで作成。
CREATE OR REPLACE WAREHOUSE my_wh
COMMENT = 'My TastyBytes warehouse'
WAREHOUSE_TYPE = 'standard'
WAREHOUSE_SIZE = 'xsmall'
MIN_CLUSTER_COUNT = 1
MAX_CLUSTER_COUNT = 2
SCALING_POLICY = 'standard'
AUTO_SUSPEND = 60
INITIALLY_SUSPENDED = true
AUTO_RESUME = false;
3.ウェアハウスの利用と再開
早速このウェアハウスを使ってクエリしてみましょう。USE WAREHOUSE
コマンドでウェアハウス:my_wh
の利用を宣言し、SELECT文でクエリを掛けてみます。
USE WAREHOUSE my_wh;
SELECT * FROM raw_pos.truck_details;
ですが以下のようにエラーが出てしまいました。これはウェアハウスが設定により一時停止されており、AUTO_RESUME
が有効になっていないため発生したものです。
確かに該当のウェアハウスにおけるAUTO_RESUME
列を見るとfalse
になっています。
ALTER WAREHOUSE
コマンドで設定を有効化し、
ALTER WAREHOUSE my_wh RESUME;
ALTER WAREHOUSE my_wh SET AUTO_RESUME = TRUE;
改めて設定を確認。有効化されていますね。
改めて先程のSELECT文を実行。
SELECT * FROM raw_pos.truck_details;
今度は結果が表示されました。
4. ウェアハウスの拡張
Snowflakeのウェアハウスは弾力性を重視して設計されており、より負荷の高いワークロードに対応するために、ウェアハウスをリアルタイムでスケールアップすることが可能です。
試しにウェアハウスをX-Largeサイズにスケールアップしてみます。ちなみに当エントリで扱っているウェアハウス: my_wh
は先述SQLで指定した通り、x-small
サイズとなっています。
ウェアハウスサイズを変更する前に、既存のx-smallサイズでこれから実行するクエリを動かしてみたらどれくらい掛かるか試してみましょう。
SELECT
o.truck_brand_name,
COUNT(DISTINCT o.order_id) AS order_count,
SUM(o.price) AS total_sales
FROM analytics.orders_v o
GROUP BY o.truck_brand_name
ORDER BY total_sales DESC;
結果、1分少々掛かりました。
以下のSQLを実行。
ALTER WAREHOUSE my_wh SET warehouse_size = 'XLarge';
改めてサイズを確認。x-large
に変更されています。(※ここで設定変更したウェアハウスサイズは次のステップでもとに戻します)
そして検証用クエリを再実行。x-small
サイズで1分掛かっていたクエリが、x-large
サイズのウェアハウスで実行したところ7秒で実行できました!これは明らかにウェアハウス変更の効果が効いていますね。
Snowflakeの「ウェアハウス設定」に関する有用情報
後学のために、Snowflakeにおけるウェアハウス設定で有用そうな情報をまとめておこうと思います。
- 公式ドキュメント
- 最適化・パフォーマンス改善
- Snowflake Query Optimization: 16 tips to make your queries run faster
- Top 5 Queries To Optimize Snowflake Warehouses | phData
- 7 Tips for Managing Snowflake Data Warehouses | Capital One
- Snowflake Warehouse Optimization: Complete 2025 Guide | Yuki Data
- Supercharge Snowflake Performance: Gen2 Standard Warehouses Explained | by Satish Kumar | Medium
- ベストプラクティス系
まとめ
という訳で、実践『Zero to Snowflake』第4弾、『仮想ウェアハウス(Virtual Warehouses)の設定』の紹介でした。
エントリ終盤でウェアハウスの性能そのものを変更してその効果を実感することができましたが、このように用途状況に応じて柔軟に実行性能を変更できるというのはとても便利ですね。
次は『#5:Query Result Cache(クエリリザルトキャッシュ)』について実践していきます。
Discussion