ノートブックでSnowflakeを体験する

Snowflake Notebooks は、Snowflakeの他の機能と一緒に使用できる開発環境です。このトピックでは、ノートブック内で他のSnowflake機能を活用する方法を示します。

ノートブックのSnowpark Python

Snowparkライブラリ は、データパイプライン内のデータをクエリおよび処理するための直感的な API を提供します。Snowparkライブラリを使用すると、アプリケーションコードが実行されるシステムにデータを移動することなく、Snowflakeでデータを処理するアプリケーションをビルドできます。ストアドプロシージャを作成し、それらのプロシージャを Snowflake のタスクとしてスケジュールすることで、データの変換と処理を自動化することもできます。

Snowparkを使用して、ノートブックのPythonセルにSnowparkコードを記述することで、Snowflakeでデータを大規模にクエリおよび処理することができます。

使用例

Snowpark Python は Snowflake Notebooks 環境にプリインストールされています。次の例では、ノートブックでSnowparkライブラリを使用して、CSVファイルとSnowflakeテーブルを読み込み、その内容を出力として表示します。

  1. ノートブックにPythonセルを追加します。 キーボードショートカット を使うか、 + Python を選択します。 Snowflake Notebooks と Snowpark はどちらも Python 3.9 をサポートしています。

  2. Snowparkセッションのセットアップ。ノートブックでは、セッションコンテキスト変数はあらかじめ設定されています。セッションコンテキスト変数を取得するには、 get_active_session メソッドを使用します。

    from snowflake.snowpark.context import get_active_session
    session = get_active_session()
    
    Copy
  3. Snowparkを使って、CSVファイルをステージングされた場所からSnowpark DataFrameに読み込みます。この例では、 tastybyte_stage というステージングを使用しています。

    df = session.read.options({"infer_schema":True}).csv('@TASTYBYTE_STAGE/app_order.csv')
    
    Copy
  4. 既存のSnowflakeテーブル app_order をSnowpark DataFrame にロードします。

    df = session.table("APP_ORDER")
    
    Copy
  5. Snowpark DataFrameを表示します。

    df
    
    Copy

注釈

Snowflake Notebooks 環境の外では、 DataFrame をプリントアウトするために df.show() を呼び出す必要があります。 Snowflake Notebooks、 DataFrames は、 df がプリントアウトされるときに積極的に評価されます。DataFrameは、インタラクティブなStreamlit DataFrameディスプレイ(st.dataframe)として出力されます。DataFrames 出力は10,000行または8 MB のいずれか低い方に制限されます。

Snowparkの制限事項

  • SnowflakeノートブックはSnowparkセッションを作成するので、Snowparkセッションクラスで利用可能なメソッドのほとんどを使用することができます。ただし、ノートブックはローカルの開発環境ではなくSnowflakeの内部で実行されるため、以下の方法は使用できません:

    • session.add_import

    • session.add_packages

    • session.add_requirements

  • Snowpark Pythonのいくつかの操作は、SPROCsで機能しません。操作の包括的なリストについては、 Python ストアドプロシージャの制限 をご参照ください。

Tip

Snowparkを使用したノートブックの例をもっと表示する:

注釈

これらのクイックスタートはあくまで例として示したものです。例に従い、Snowflakeが所有または提供していない第三者のデータ、製品、またはサービスに対する追加の権利が必要となる場合があります。Snowflakeはこの例の正確性を保証するものではありません。

ノートのストリームリット

Streamlit はオープンソースのPythonライブラリで、機械学習やデータサイエンスのためのカスタムウェブアプリを簡単に作成・共有できます。Streamlitを使ったインタラクティブなデータアプリケーションを、ノートブック上で直接構築することができます。ノートブックで直接アプリのテストや開発ができます。Streamlitはノートブックにプリインストールされているので、すぐに使い始めることができます。

使用例

Streamlit には Snowflake Notebooks 環境がプリインストールされています。このセクションの例では、Streamlitを使用してインタラクティブなデータアプリを作成します。

  1. 必要なライブラリをインポートする

    import streamlit as st
    import pandas as pd
    
    Copy
  2. まず、アプリのサンプルデータを作成します。

    species = ["setosa"] * 3 + ["versicolor"] * 3 + ["virginica"] * 3
    measurements = ["sepal_length", "sepal_width", "petal_length"] * 3
    values = [5.1, 3.5, 1.4, 6.2, 2.9, 4.3, 7.3, 3.0, 6.3]
    df = pd.DataFrame({"species": species,"measurement": measurements,"value": values})
    df
    
    Copy
  3. Streamlitライブラリからインタラクティブスライダーを設定してください。

    st.markdown("""# Interactive Filtering with Streamlit! :balloon:
                Values will automatically cascade down the notebook cells""")
    value = st.slider("Move the slider to change the filter value 👇", df.value.min(), df.value.max(), df.value.mean(), step = 0.3 )
    
    Copy
  4. 最後に、スライダーの値に基づいてフィルタリングされた表を表示します。

    df[df["value"]>value].sort_values("value")
    
    Copy

ノートブックからリアルタイムでアプリを操作できます。スライダーで設定した値に基づいて、フィルタリングされた表が変化するのを確認してください。

Tip

包括的な例については、 Snowflake Notebooksによるビジュアルデータストーリー ノートブックのインタラクティブなデータアプリのセクションをご参照ください。

NotebooksでのStreamlitサポート

st.map または st.pydeck_chart Streamlitコマンドを使用する場合、Mapboxはマップコンテンツのレンダリング時にマップタイルを提供します。Mapboxはサードパーティのアプリケーションであり、Snowflakeの 外部製品規約 が適用されます。

以下のStreamlit要素はNotebooksではサポートされていません。

NotebooksのSnowpark ML

Snowpark ML は、 Snowflake ML 用と、Snowflakeでのカスタム機械学習モデル開発用の APIs を提供するPythonライブラリです。Snowpark ML を使用すると、一般的な ML フレームワークに基づいて APIs を使用してカスタムモデルを開発し、自動的に更新されるフィーチャーを定義して学習させ、モデルレジストリに保存して発見と再利用を容易にすることができます。

Container Runtime for ML は、高度なデータサイエンスと機械学習のワークロードをサポートするソフトウェアとハードウェアのオプションを提供します。コンテナーランタイムの詳細については、 Notebooks on Container Runtime for ML をご参照ください。

重要

snowflake-ml-python パッケージとその依存関係は、組織の パッケージポリシー で許可されていなければなりません。

使用例

Snowpark ML を使用するには、ノートブック用の snowflake-ml-python ライブラリをインストールしてください:

  1. ノートブックから、 Packages を選択します。

  2. snowflake-ml-python ライブラリを探し、インストールするライブラリを選択します。

以下は、データの前処理にSnowpark MLライブラリを使用する例です。

import snowflake.ml.modeling.preprocessing as pp

# Initialize a StandardScaler object with input and output column names
scaler = pp.StandardScaler(
    input_cols=feature_names_input,
    output_cols=feature_names_input
)

# Fit the scaler to the dataset
scaler.fit(upsampled_data)

# Transform the dataset using the fitted scaler
scaled_features = scaler.transform(upsampled_data)
scaled_features
Copy

Snowpark MLライブラリをモデル学習と推論に使用する例を示します。

from snowflake.ml.modeling.ensemble import RandomForestClassifier

# Initialize a RandomForestClassifier object with input, label, and output column names
model = RandomForestClassifier(
    input_cols=feature_names_input,
    label_cols=label,
    output_cols=output_label,
)

# Train the RandomForestClassifier model using the training set
model.fit(training)

# Predict the target variable for the testing set using the trained model
results = model.predict(testing)
Copy

Tip

Snowpark ML の使用例については、以下のノートブックをご参照ください。

Snowflake ML Notebooksのレジストリ

Snowflake Model Registry を使用すると、オリジンに関係なく、Snowflakeでモデルとメタデータを安全に管理できます。モデルレジストリは、機械学習モデルをSnowflakeのファーストクラスのスキーマレベルオブジェクトとして格納することにより、組織内の他の人たちが容易に見つけて使用できるようにします。Snowpark MLライブラリのクラスを使用してレジストリを作成し、そこにモデルを格納できます。モデルは複数のバージョンを持つことができ、1つのバージョンをデフォルトとして指定することができます。

使用例

Snowflake ML レジストリを使用するには、ノートブック用の snowflake-ml-python ライブラリをインストールします。

  1. ノートブックから、一番上の Packages を選択します。

  2. snowflake-ml-python パッケージを検索し、ライブラリを選択してインストールします。

以下は、Snowflake MLレジストリを使用してモデルをログに記録する方法の例です。

from snowflake.ml.registry import Registry
# Create a registry and log the model
native_registry = Registry(session=session, database_name=db, schema_name=schema)

# Let's first log the very first model we trained
model_ver = native_registry.log_model(
    model_name=model_name,
    version_name='V0',
    model=regressor,
    sample_input_data=X, # to provide the feature schema
)

# Add evaluation metric
model_ver.set_metric(metric_name="mean_abs_pct_err", value=mape)

# Add a description
model_ver.comment = "This is the first iteration of our Diamonds Price Prediction model. It is used for demo purposes."

# Show Models
native_registry.get_model(model_name).show_versions()
Copy

Tip

この エンドツーエンドの例を表示 Snowflake ML レジストリの使用方法。

ノートブックのpandas on Snowflake

pandas on Snowflake により、Snowflakeのデータ上で直接pandasコードを分散実行することができます。importステートメントと数行のコードを変更するだけで、Snowflakeのスケーラビリティとセキュリティの利点を備えた、使い慣れたpandasネイティブのエクスペリエンスを得ることができます。

pandas on Snowflakeにより、より大規模なデータセットを扱うことができ、pandasパイプラインを他のビッグデータフレームワークに移植したり、より大規模で高価なマシンを使用したりする時間やコストを避けることができます。Snowflakeのワークロードをネイティブに実行し、SQLにトランスパイルすることで、並列化、データガバナンス、セキュリティといったSnowflakeの利点を活用することができます。

pandas on Snowflakeは、Snowpark Pythonライブラリの一部としてSnowpark pandas API を通じて提供され、Snowflakeプラットフォーム内でPythonコードのスケーラブルなデータ処理を可能にします。

使用例

Snowpark pandasはSnowpark Pythonバージョン1.17以降で可用性です。Snowpark Pythonには Snowflake Notebooks 環境がプリインストールされています。

  1. Modinをインストールするには、 Packages から modin を選択し、バージョンが0.28.1以降であることを確認してください。

  2. pandasのバージョンをセットするには、 Packages から pandas を選択し、バージョンが2.2.1であることを確認します。

Pythonのセルに、Snowpark PythonとModinをインポートします。

import modin.pandas as pd
import snowflake.snowpark.modin.plugin
Copy
  1. Snowparkセッションを作成します。

    from snowflake.snowpark.context import get_active_session
    session = get_active_session()
    
    Copy
  2. Snowpark Python APIの使用を開始します。

    # Create a Snowpark Pandas DataFrame with sample data.
    df = pd.DataFrame([[1, 'Big Bear', 8],[2, 'Big Bear', 10],[3, 'Big Bear', None],
                        [1, 'Tahoe', 3],[2, 'Tahoe', None],[3, 'Tahoe', 13],
                        [1, 'Whistler', None],['Friday', 'Whistler', 40],[3, 'Whistler', 25]],
                        columns=["DAY", "LOCATION", "SNOWFALL"])
    # Drop rows with null values.
    df.dropna()
    # Compute the average daily snowfall across locations.
    df.groupby("LOCATION").mean()["SNOWFALL"]
    
    Copy

Tip

Snowflake でのpandas の使用方法の例については、 Getting Started with pandas on Snowflake をご参照ください。

NotebooksのSnowflake Python API

Snowflake Python API は、PythonとSnowflakeワークロードをシームレスに接続する統一ライブラリです。これは、ファーストクラスPython APIを使って、データエンジニアリング、Snowpark、Snowpark ML、およびアプリケーションのワークロード全体で、 Snowflakeリソースと対話するための包括的なAPIsを提供することを目的としています。

Snowflake Python API を使用して、Snowflakeリソースの作成、削除、変更などの管理を行うことができます。Pythonを使用して、 Snowflakeの SQL コマンド で行うようなタスクを実行できます。

Notebooksでは、セッションコンテキスト変数はあらかじめ設定されています。セッションコンテキスト変数を取得するには、 get_active_session メソッドを使用します。

from snowflake.snowpark.context import get_active_session
session = get_active_session()
Copy

Snowflake Python API を使用するための Root オブジェクトを作成します。

from snowflake.core import Root
api_root = Root(session)
Copy

以下は、Python APIを使ってデータベースとスキーマを作成する例です。

# Create a database and schema by running the following cell in the notebook:
database_ref = api_root.databases.create(Database(name="demo_database"), mode="orreplace")
schema_ref = database_ref.schemas.create(Schema(name="demo_schema"), mode="orreplace")
Copy

Tip

SnowflakeのPython API の使い方の詳細な例については、Githubの Creating Snowflake object using Python API notebook example をご参照ください。