![]() |
皆さんこんにちは!入社して間もない新米エンジニアの佐々木です。
最近、Snowflakeの比較的新しい機能である「コンピュートプール」について調査する機会がありました。
そこで本記事では、コンピュートプールについて調べたことを皆さんと共有したいと思います!
特に、公式ドキュメントに記載されている細かい内容というよりも、コンピュートプールの概要について初学者でも分かりやすいようにお話できればと思います。
まだ触れたことのない方も、既に利用している方も、ぜひご覧ください!
コンピュートプールとは何か?
コンピュートプールとは、1つ以上の仮想マシン(VM)ノードを複数集めたサーバー群です。
分かりづらい方は「コンピューターの力を集めた場所」と考えてください。例えるなら、複数の人が集まって一つのチームとして働くようなものです。
仮想マシンとは、一台の物理コンピューターの中で動く、仮想的なコンピューターです。このVMをたくさん集めて、まとめて使えるようにしたものが、仮想マシンノードを集約したコンピュートプールです。
他にも似たクラウドサービスの代表例として、Amazon EC2、Google Compute Engine、Microsoft Azure Virtual Machinesなどがあります。
コンピュートプールの作成
では、実際にコンピュートプールを作成する際の手順についてですが至って簡単です。
コンピュートプールは CREATE COMPUTE POOL
コマンドを使って、ユーザーが自由に作成・管理することができます。
具体的には、ワークシートで以下のクエリを実行することで、コンピュートプールを作成することが可能です。
CREATE COMPUTE POOL tutorial_compute_pool MIN_NODES = 1 MAX_NODES = 3 INSTANCE_FAMILY = CPU_X64_XS;
上記で設定している必須プロパティの意味は以下の通りです。
- MIN_NODES:コンピューティングプールで起動する最小ノード数。
- MAX_NODES:コンピューティングプールがスケールできる最大ノード数。これにより、Snowflakeの自動スケーリングによって予期せぬ数のノードがコンピューティングプールに追加されることを防ぐことができます。
- INSTANCE_FAMILY:コンピューティングプールノードにプロビジョニングするマシンタイプ。
これらのプロパティをプロジェクトの規模やニーズに応じて変更することで、スケーラビリティの確保やコスト最適化などにつなげることができます。
他にも設定できるプロパティは複数あるのでプロパティの詳細について気になる方は、以下の公式ドキュメントを参照してみてください!
コンピュートプールの利点
ではコンピュートプールの利点は何なのか?についてですが、私が調査した限りだと以下の5つが挙げられるかと思います。
-
柔軟なリソース管理:
-
複数のVMノードをプールとして管理できるため、ワークロードに応じて柔軟にリソースを割り当て、最適化できます。
-
- コスト効率の向上:
- 個々のVMノードは必要な時に必要な分だけリソース(CPUやメモリ)を使います。そのため、使用していないVMノードを自動的にスケールダウンすることで、コストを削減できます。
-
高可用性の実現:
-
プール内のVMノードに障害が発生した場合でも、自動的に別のVMノードに切り替えることで、高可用性を実現できます。
-
-
スケーラビリティ:
- ワークロードの負荷に応じて、VMノードを簡単に追加、削除をすることができます。これにより、ワークロードのピーク時でも、プール内のVMノードを自動的にスケールアップすることで、パフォーマンスを維持できます。
-
管理の簡素化:
-
たくさんのVMを個別に管理するのは大変ですが、コンピュートプールを使うと、まとめて管理できます。VMの状態を監視したり、ソフトウェアをアップデートしたりするのが簡単になります。
-
特に上記で既述した「スケーラビリティ」について触れると、コンピュートプールは自動的にサイズ調整する自動スケーリングの仕組みを持っています。
まず、プールを作成すると、Snowflakeは最低限必要な数の仮想マシン(ノード)を起動します。その後、作業量が増えて現在のノードでは処理しきれなくなると、自動的に追加のノードを起動して処理能力を増強します。
例えば、既に2つのサービスが動いていて、新たに別のサービスを追加すると、そのサービスに必要なリソースに応じて自動的に新しいノードが追加されます。
逆に、ある期間、ノードがほとんど使われなくなると、Snowflakeは不要になったノードを自動的に削除してコストを削減します。そのような場合でも、コンピュートプールは最低限必要なノード数を維持します。
つまり、コンピュートプールは、作業量に合わせて自動的にサイズを調整し、常に最適なリソースを使用する仕組みになっているということです。ユーザーは、常に最大の処理能力を確保しつつ、無駄なコストを削減できます。
考えられる利用用途
コンピュートプールの利用用途として考えられるものを以下にいくつか挙げてみました。
1. データウェアハウス処理:
- 複雑なSQLクエリの実行:大量のデータを集計、分析、変換するための複雑なSQLクエリを実行します。例えば、数年分の売上データを地域別、商品別に集計して、売れ筋商品を特定するような処理です。
- 大規模データセットの結合:複数のテーブル(例えば、顧客テーブル、注文テーブル、商品テーブル)を結合して、より詳細な分析を行います。
- 高度な分析:データ分析に必要な高度なSQL関数(例えば、移動平均、累積和、順位付け)を実行します。
2. データエンジニアリング:
- ETL/ELTパイプラインの実行:外部システムからデータを抽出(Extract)、変換(Transform)、ロード(Load)するプロセスを実行します。
- データ変換:データをクレンジング、整形、標準化し、分析しやすい形に変換します。
- データ検証:データの品質を維持するために、データの整合性や正確性を検証します。
3. ビジネスインテリジェンス(BI):
- BIツールとの連携:Tableau、Power BI、LookerなどのBIツールからSnowflakeに接続し、データを可視化するためのクエリを実行します。
- ダッシュボードの作成:重要なビジネス指標を監視するためのダッシュボードを作成します。
- レポートの生成:定期的なレポートを生成します。
4. データサイエンス/機械学習:
- 特徴量エンジニアリング:機械学習モデルのトレーニングに必要な特徴量をデータから抽出します。
- モデルのトレーニング:Snowflakeのデータを活用して、機械学習モデルをトレーニングします。
- モデルのデプロイと予測:トレーニング済みのモデルをSnowflakeにデプロイし、新しいデータに対する予測を行います。
- リアルタイムデータ分析:ストリーミングデータソースからリアルタイムに近い形でデータをSnowflakeにロードし、分析します。
他にも利用用途は複数あるとは思いますが、上記だけでもコンピュートプールが様々なユースケースで役立ちそうなことが分かるかと思います。
まとめ
本記事では、Snowflake のコンピュートプールについて大まかな概要を調査しました。
その結果コンピュートプールは、複数の仮想マシンノードを束ね、クエリ実行やデータ処理といったワークロードを処理するための強力なリソースだと感じました。ただし、コンピュートプールを効果的に利用する上では、ワークロードの特性をよく理解し、適切なサイズと構成を選択することが何よりも重要だと思いました。
しかし、今回の調査だけではコンピュートプールの表面しか見ることができなかったのが実状です、、、
そのため今回の調査を踏み台に、次回以降で実際にコンピュートプールを活用したチュートリアルを実施して、コンピュートプールとは何ぞや?をもう少し深ぼってみたいと思います!