# Snowflakeの機能と実践的な使い方
🚀 「ストレージとコンピュートが分かれている」とよく言われるSnowflakeですが、その意味を正しく理解すると、コスト・性能・同時実行の議論がすべてスッと腑に落ちます。今回はSnowflakeの土台である3層アーキテクチャを掘り下げます。
📌 タイトルと機能のURL
タイトル: Key Concepts and Architecture
URL:
📝 概要
Snowflakeはクラウドネイティブに設計されたSQLデータプラットフォームで、ハードウェア管理やソフトウェア導入が不要なフルマネージドサービスです。アーキテクチャはシェアードディスクとシェアードナッシングの利点を組み合わせたハイブリッド構成で、「データベースストレージ」「クエリ処理(コンピュート)」「クラウドサービス」の3層から成ります。この3層が互いに独立してスケールするのが最大の特徴です。
🔧 機能の説明
3層それぞれの役割は次の通りです。
・データベースストレージ層: 取り込んだデータを内部最適化された圧縮列指向フォーマットに再編成し、マイクロパーティション(連続したストレージ単位)に分割して保管します。データの物理的な格納方法はSnowflakeが完全に管理し、ユーザーはSQLでのみアクセスします。
・コンピュート層(Virtual Warehouse): クエリを実行する計算リソースのクラスタです。各ウェアハウスはMPP(超並列処理)で独立して動き、あるウェアハウスの負荷が他のウェアハウスの性能に影響しません。
・クラウドサービス層: 認証・アクセス制御、メタデータ管理、クエリの解析と最適化、インフラ管理など、全体を統括する頭脳にあたります。
ストレージは中央に1つ共有され(シェアードディスクの利点)、処理は分散ノードで行われる(シェアードナッシングの利点)、というのが核心です。
🛠 実践的な使い方
この分離モデルを前提に、ワークロードごとにコンピュートを分けて設計するのが第一歩です。
・ETL用、BIダッシュボード用、データサイエンス用にそれぞれ別のVirtual Warehouseを用意します。ストレージは1つを共有しているため、データを多重化することなく同じテーブルを各ウェアハウスから参照できます。
・夜間バッチが重くても、別ウェアハウスで動くBIクエリは影響を受けません。負荷干渉を「構造的に」排除できます。
・テーブル種別はSnowflake標準テーブルのほか、外部クラウドストレージ上のApache Icebergテーブル、トランザクション向けのHybrid Tableも選べます。
🎯 ユースケース
・夜間ETLバッチでBIダッシュボードが遅くなる問題を、ウェアハウス分離で根本解決する。
・データサイエンスチームの探索的クエリを専用ウェアハウスに隔離し、本番分析への影響を防ぐ。
・部門ごとにウェアハウスを分けてコストを可視化・配賦する。
⚠️ 注意点
・コンピュートは起動中のみクレジットを消費します。ストレージ課金とは別計算なので、両者を分けて見積もります。
・ストレージが共有でも、アクセス権限はクラウドサービス層のRBACで別途制御する必要があります。共有=誰でも見られる、ではありません。
・「分離」はあくまで論理設計の話です。ウェアハウスを闇雲に増やすと管理対象が増えるため、ワークロード単位での適切な分割を心がけます。
#
Snowflake# #
DataWarehouse#