Snowpark と Snowflake の ML/AI 機能:Python 対応、Cortex、Feature Store

この記事について

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

コメントする