体验带有笔记本的 Snowflake

Snowflake Notebooks 是一个开发环境,您可以将其与其他 Snowflake 功能一起使用。本主题介绍如何在笔记本中利用其他 Snowflake 功能。

笔记本中的 Snowpark Python

Snowpark 库 提供直观 API,用于查询和处理数据管道中的数据。使用 Snowpark 库,您可以构建用于在 Snowflake 中处理数据的应用程序,而无需将数据移至您的应用程序代码运行所在的系统。您还可以通过在 Snowflake 中编写存储过程并将这些过程安排为任务来自动进行数据转换和处理。

您可以在笔记本的 Python 单元中编写 Snowpark 代码,从而使用 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 环境之外,必须调用 df.show() 才能打印出 DataFrame。在 Snowflake Notebooks 中,当输出 df 时,会急切地评估 DataFrames。系统将以交互式 Streamlit DataFrame 显示 (st.dataframe) 的形式打印出 DataFrame。DataFrames 输出限制为 10,000 行或 8 MB,以较低者为准。

Snowpark 限制

  • Snowflake 笔记本会创建一个 Snowpark 会话,因此您可以使用 Snowpark 会话类中的大部分方法。但是,由于笔记本是在 Snowflake 内部运行,而不是在本地开发环境中运行,因此不能使用以下方法:

    • session.add_import

    • session.add_packages

    • session.add_requirements

  • 某些 Snowpark Python 操作不会使用 SPROCs。有关操作的完整列表,请参阅 Python 存储过程的限制

小技巧

查看更多使用 Snowpark 的笔记本示例:

  • ` 使用 Snowpark Python 的数据工程管道 <https://github.com/Snowflake-Labs/snowflake-demo-notebooks/blob/main/Data%20Engineering%20Pipelines%20with%20Snowpark%20Python/Data%20Engineering%20Pipelines%20with%20Snowpark%20Python.ipynb (https://github.com/Snowflake-Labs/snowflake-demo-notebooks/blob/main/Data%20Engineering%20Pipelines%20with%20Snowpark%20Python/Data%20Engineering%20Pipelines%20with%20Snowpark%20Python.ipynb)>`_

  • 添加 CSV 文件笔记本 (https://github.com/Snowflake-Labs/snowflake-demo-notebooks/blob/main/Load%20CSV%20from%20S3/Load%20CSV%20from%20S3.ipynb)

备注

这些快速入门仅作为示例显示。按照示例操作可能需要对非 Snowflake 拥有或提供的第三方数据、产品或服务具有额外权利。Snowflake 不保证这些示例的准确性。

笔记本中的 Streamlit

:doc:` Streamlit </developer-guide/streamlit/about-streamlit>` 是一个开源 Python 库,可以轻松创建和共享用于机器学习和数据科学的自定义 Web 应用程序。您可以直接在笔记本中使用 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

您可以在笔记本上与应用程序进行实时交互。根据您在滑块上设置的值,查看筛选后的表的变化。

小技巧

有关完整示例,请参阅 使用 Snowflake 笔记本直观呈现数据故事 (https://github.com/Snowflake-Labs/snowflake-demo-notebooks/blob/main/Visual%20Data%20Stories%20with%20Snowflake%20Notebooks/Visual%20Data%20Stories%20with%20Snowflake%20Notebooks.ipynb) 笔记本中的交互式数据应用程序部分。

笔记本中的 Streamlit 支持

使用 ` st.map <https://docs.streamlit.io/develop/api-reference/charts/st.map (https://docs.streamlit.io/develop/api-reference/charts/st.map)>`_ 或 st.pydeck_chart (https://docs.streamlit.io/develop/api-reference/charts/st.pydeck_chart) Streamlit 命令时,Mapbox 会在渲染地图内容时提供地图图块。Mapbox 是第三方应用程序,受Snowflake的 外部产品条款 的约束。

笔记本中不支持以下 Streamlit 元素:

  • ` st.file_uploader <https://docs.streamlit.io/library/api-reference/widgets/st.file_uploader (https://docs.streamlit.io/library/api-reference/widgets/st.file_uploader)>`_

  • ` st.camera_input<https://docs.streamlit.io/library/api-reference/widgets/st.camera_input (https://docs.streamlit.io/library/api-reference/widgets/st.camera_input)>`_

  • ` st.bokeh_chart<https://docs.streamlit.io/library/api-reference/charts/st.bokeh_chart (https://docs.streamlit.io/library/api-reference/charts/st.bokeh_chart)>`_

  • ` st.set_page_config <https://docs.streamlit.io/library/api-reference/utilities/st.set_page_config (https://docs.streamlit.io/library/api-reference/utilities/st.set_page_config)>`_

    不支持 st.set_page_config (https://docs.streamlit.io/library/api-reference/utilities/st.set_page_config) 命令的 page_titlepage_iconmenu_items 属性。

  • st.components.v1.iframe (https://docs.streamlit.io/develop/api-reference/custom-components/st.components.v1.iframe)

  • st.components.v1.declare_component (https://docs.streamlit.io/develop/api-reference/custom-components/st.components.v1.declare_component)

  • 以下实验性功能:

    • ` st.experimental_set_query_params <https://docs.streamlit.io/library/api-reference/utilities/st.experimental_set_query_params (https://docs.streamlit.io/library/api-reference/utilities/st.experimental_set_query_params)>`_

    • ` st.experimental_get_query_params<https://docs.streamlit.io/library/api-reference/utilities/st.experimental_get_query_params (https://docs.streamlit.io/library/api-reference/utilities/st.experimental_get_query_params)>`_

  • 锚定链接

笔记本中的 Snowpark ML

Snowpark ML 是一个 Python 库,为 Snowflake ML 以及在 Snowflake 中定制机器学习模型开发提供 APIs。使用 Snowpark ML,您可以基于流行的 ML 框架,使用 APIs 开发自定义模型,定义自动更新的特征来训练它们,并将它们存储在模型注册表中,以便于发现和重用。

ML 容器运行时提供软件和硬件选项,以支持高级数据科学和机器学习工作负载。有关容器运行时的详细信息,请参阅 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

小技巧

有关使用 Snowpark ML 的更多示例,请参阅以下笔记本:
  • 电信流失数据分析与建模 (https://github.com/Snowflake-Labs/snowflake-demo-notebooks/blob/main/Telco%20Churn%20Data%20Analysis/Telco%20Churn%20Data%20Analysis.ipynbb)

  • 利用 Snowpark 进行端到端机器学习 ML (https://github.com/Snowflake-Labs/snowflake-demo-notebooks/blob/main/End-to-End%20Machine%20Learning%20with%20Snowpark%20ML/3_sf_nb_snowpark_ml_model_training_inference.ipynb)

笔记本中的 Snowflake ML 注册表

Snowflake Model Registry 可让您在 Snowflake 中安全地管理模型和元数据,而无论其来源如何。模型注册表将机器学习模型存储为 Snowflake 中的一级架构级对象,以便组织中的其他人可以轻松找到和使用这些模型。您可以使用 Snowpark ML 库中的类创建注册表,并在其中存储模型。模型可以有多个版本,您可以将一个版本指定为默认版本。

示例用法

要使用 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

小技巧

查看此 端到端示例 (link removed),了解如何使用 Snowflake ML 注册表。

笔记本中的 Pandas on Snowflake

Pandas on Snowflake 可让您直接在 Snowflake 中的数据上以分布式方式运行 Pandas 代码。只需更改导入语句和几行代码,您就能获得同样熟悉的 Pandas 原生体验,并享受 Snowflake 的可扩展性和安全性优势。

借助 Pandas on Snowflake,您就可以处理更大的数据集,并避免将 pandas 管道移植到其他大数据框架或配置大型昂贵机器所需的时间和费用。它通过转译到 SQL 在 Snowflake 中本地运行工作负载,使其能够利用并行化优势以及 Snowflake 的数据管理和安全优势。

Pandas on Snowflake 通过 Snowpark Pandas API 交付,是 Snowpark Python 库的一部分,可在 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

小技巧

有关如何使用 Pandas on Snowflake 的更多示例,请参阅 开始使用 Pandas on Snowflake (https://quickstarts.snowflake.com/guide/getting_started_with_pandas_on_snowflake/#0)。

笔记本中的 Snowflake Python API

Snowflake Python API 是一个统一的库,可将 Python 与 Snowflake 工作负载无缝连接。它旨在使用一流的 Python API 为跨数据工程、Snowpark、Snowpark ML 和应用程序工作负载与 Snowflake 资源的交互提供全面的 APIs。

可使用 Snowflake Python API 通过创建、删除或修改等方式来管理 Snowflake 资源。可使用 Python 来执行可能使用 Snowflake SQL 命令 执行的任务。

在笔记本中,会话上下文变量是预先配置好的。您可以使用 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

小技巧

有关如何使用 Snowflake 的 Python API 的更详细示例,请参阅 Github 上的 使用 Python API 创建 Snowflake 对象笔记本示例 (https://github.com/Snowflake-Labs/snowflake-demo-notebooks/blob/main/Creating%20Snowflake%20Object%20using%20Python%20API/Creating%20Snowflake%20Object%20using%20Python%20API.ipynb)。

语言: 中文