この記事について
Snowflake は SQL の DWH から「Data Cloud」への進化を目指し、Python / ML / AI 機能を急速に拡充している。この記事では Snowpark、Cortex、ML 関連機能を整理し、Databricks の ML 機能と比較する。
1. Snowpark
1-1. Snowpark とは
Snowflake 上で Python / Java / Scala を実行するフレームワーク。DataFrame API を提供し、処理は Snowflake の Virtual Warehouse 上で実行される。
from snowflake.snowpark import Session
from snowflake.snowpark.functions import col, sum as sum_
session = Session.builder.configs(connection_params).create()
# Snowpark DataFrame(Snowflake 上で実行される)
df = session.table("sales")
result = df.filter(col("amount") > 100) \
.group_by("region") \
.agg(sum_("amount").alias("total"))
result.show()1-2. Snowpark vs PySpark
| 観点 | Snowpark | PySpark |
|---|---|---|
| 実行場所 | Snowflake Virtual Warehouse | Spark クラスタ |
| エンジン | Snowflake SQL エンジン | Apache Spark |
| データの場所 | Snowflake 内部 | S3 / HDFS / Delta Lake |
| API | Snowpark DataFrame | Spark DataFrame |
| UDF | Python UDF(Snowflake 上で実行) | Python UDF(Executor 上で実行) |
| ML ライブラリ | scikit-learn, XGBoost 等 | MLlib, scikit-learn 等 |
| 管理 | Warehouse のみ | クラスタ管理が必要 |
1-3. Snowpark の実行モデル
ユーザーの Python コード
│
├── DataFrame 操作 → SQL に変換 → Snowflake SQL エンジンで実行
│ (Snowflake のクエリ最適化が効く)
│
└── Python UDF / UDTF → Snowflake 上の Python サンドボックスで実行
(Anaconda パッケージが利用可能)
DataFrame 操作は内部的に SQL に変換されるため、Snowflake のクエリ最適化の恩恵を受ける。
2. Snowflake Cortex
2-1. 概要
Snowflake Cortex は Snowflake に組み込まれた AI / ML 機能群。
| 機能 | 説明 |
|---|---|
| Cortex LLM Functions | SQL から LLM を呼び出し(要約、翻訳、感情分析) |
| Cortex Search | セマンティック検索 |
| Cortex Fine-tuning | LLM のファインチューニング |
| Cortex Analyst | 自然言語で SQL を生成 |
2-2. Cortex LLM Functions
-- テキストの要約
SELECT SNOWFLAKE.CORTEX.SUMMARIZE(review_text) FROM reviews;
-- 感情分析
SELECT SNOWFLAKE.CORTEX.SENTIMENT(review_text) FROM reviews;
-- 翻訳
SELECT SNOWFLAKE.CORTEX.TRANSLATE(text, 'ja', 'en') FROM documents;
-- 任意のプロンプト
SELECT SNOWFLAKE.CORTEX.COMPLETE(
'llama3.1-70b',
'この商品レビューのポイントを3つ挙げてください: ' || review_text
) FROM reviews;SQL から直接 LLM を呼べる点が特徴。データを Snowflake の外に出す必要がない。
2-3. Databricks の AI 機能との比較
| 観点 | Snowflake Cortex | Databricks |
|---|---|---|
| LLM 呼び出し | SQL 関数(簡単) | MLflow + Model Serving |
| カスタムモデル | Fine-tuning(限定的) | 任意のモデルを学習・デプロイ |
| 自社モデル | なし | DBRX(OSS LLM) |
| ML フレームワーク | scikit-learn, XGBoost | MLlib, PyTorch, TensorFlow, 何でも |
| Feature Store | あり(発展途上) | Feature Store(成熟) |
| MLOps | 限定的 | MLflow(業界標準) |
| GPU | 限定的 | GPU クラスタ対応 |
Snowflake は「SQL ユーザーが簡単に AI を使える」方向。Databricks は「データサイエンティストが本格的な ML を行う」方向。
3. Snowflake ML
3-1. ML Functions(SQL ベース)
SQL だけで ML モデルを学習・推論できる。
-- 予測モデルの学習
CREATE SNOWFLAKE.ML.FORECAST sales_forecast (
INPUT_DATA => TABLE(sales_training),
TIMESTAMP_COLNAME => 'date',
TARGET_COLNAME => 'amount'
);
-- 予測
SELECT * FROM TABLE(sales_forecast!FORECAST(
FORECASTING_PERIODS => 30
));| ML Function | 用途 |
|---|---|
| FORECAST | 時系列予測 |
| ANOMALY_DETECTION | 異常検知 |
| CLASSIFICATION | 分類(将来) |
| CONTRIBUTION_EXPLORER | 要因分析 |
3-2. Snowpark ML(Python ベース)
from snowflake.ml.modeling.xgboost import XGBClassifier
from snowflake.ml.modeling.preprocessing import StandardScaler
# Snowflake 上でモデル学習
scaler = StandardScaler(input_cols=features, output_cols=features)
model = XGBClassifier(input_cols=features, label_cols=["target"])
# パイプライン
pipeline = Pipeline(steps=[("scaler", scaler), ("model", model)])
pipeline.fit(train_df)
# Snowflake Model Registry に登録
from snowflake.ml.registry import Registry
reg = Registry(session)
reg.log_model(pipeline, model_name="churn_model", version_name="v1")3-3. Model Registry
| 観点 | Snowflake Model Registry | MLflow (Databricks) |
|---|---|---|
| 登場時期 | 2024年 | 2018年 |
| 成熟度 | 発展途上 | 業界標準 |
| 対応フレームワーク | scikit-learn, XGBoost, PyTorch | ほぼ全て |
| モデルサービング | Snowflake 内で推論 | Model Serving(REST API) |
| 実験管理 | 限定的 | 充実(パラメータ、メトリクス、アーティファクト) |
| OSS | ❌ | ✅ |
4. Snowflake のタスクとストリーム
4-1. Tasks(スケジューリング)
Snowflake 内蔵のジョブスケジューラ。
-- 日次で集計を実行するタスク
CREATE TASK daily_aggregation
WAREHOUSE = etl_wh
SCHEDULE = 'USING CRON 0 0 * * * UTC'
AS
INSERT INTO gold.daily_sales
SELECT date, region, SUM(amount)
FROM silver.orders
GROUP BY date, region;
-- タスクの依存関係(DAG)
CREATE TASK downstream_task
WAREHOUSE = etl_wh
AFTER daily_aggregation
AS
CALL refresh_dashboard();4-2. Streams(CDC)
テーブルの変更を追跡する。
-- Stream を作成
CREATE STREAM orders_stream ON TABLE raw.orders;
-- 変更を確認
SELECT * FROM orders_stream;
-- → INSERT / UPDATE / DELETE された行が見える
-- 変更を処理して Stream を消費
INSERT INTO silver.orders
SELECT * FROM orders_stream WHERE METADATA$ACTION = 'INSERT';4-3. Airflow / Databricks Workflows との比較
| 観点 | Snowflake Tasks | Airflow | Databricks Workflows |
|---|---|---|---|
| 定義 | SQL | Python(DAG) | UI / JSON |
| 複雑さ | シンプル(SQL のみ) | 高い(任意のロジック) | 中程度 |
| 外部連携 | 限定的 | 豊富(Operator) | Databricks 内 |
| 用途 | Snowflake 内の ETL | 汎用オーケストレーション | Databricks 内の ETL |
5. まとめ
| 機能 | 成熟度 | Databricks 比較 |
|---|---|---|
| Snowpark(Python) | 成熟 | PySpark と同等の API。実行は Snowflake 上 |
| Cortex(LLM) | 発展中 | SQL から LLM を呼べる手軽さが強み |
| ML Functions | 発展中 | SQL だけで予測・異常検知。簡単だが限定的 |
| Snowpark ML | 発展途上 | MLflow に比べると機能・エコシステムが小さい |
| Tasks / Streams | 成熟 | Snowflake 内で完結する ETL には十分 |
Snowflake の ML/AI 戦略は「SQL ユーザーでも AI を使える」こと。Databricks は「データサイエンティストのための本格的な ML プラットフォーム」。ターゲットユーザーが異なる。
参考文献
- Snowflake. “Snowpark Developer Guide.” https://docs.snowflake.com/en/developer-guide/snowpark/
- Snowflake. “Snowflake Cortex.” https://docs.snowflake.com/en/user-guide/snowflake-cortex/
- Snowflake. “Snowflake ML.” https://docs.snowflake.com/en/developer-guide/snowflake-ml/
- Snowflake. “Tasks.” https://docs.snowflake.com/en/user-guide/tasks-intro