Snowpark API

Snowpark API 提供了一个直观的库,用于在 Snowflake 中大规模查询和处理数据。使用三种语言中的任何一种的库,可以构建在 Snowflake 中处理数据的应用程序,而无需将数据移动到运行应用程序代码的系统,并作为弹性和无服务器 Snowflake 引擎的一部分进行大规模处理。

Snowflake 目前提供三种语言的 Snowpark 库:Java、Python 和 Scala。

Quickstarts

可以使用以下 Quickstarts 来亲自体验 Snowpark。

  • ` 使用 Snowpark Python 进行机器学习 <https://quickstarts.snowflake.com/guide/getting_started_snowpark_machine_learning/index.html (https://quickstarts.snowflake.com/guide/getting_started_snowpark_machine_learning/index.html)>`_

  • ` 使用 Snowpark Python 的数据工程管道 <https://quickstarts.snowflake.com/guide/data_engineering_pipelines_with_snowpark_python/index.html (https://quickstarts.snowflake.com/guide/data_engineering_pipelines_with_snowpark_python/index.html)>`_

  • ` Snowpark for Python 和 Streamlit 入门 <https://quickstarts.snowflake.com/guide/getting_started_with_snowpark_for_python_streamlit/index.html (https://quickstarts.snowflake.com/guide/getting_started_with_snowpark_for_python_streamlit/index.html)>`_

  • ` Snowflake 中使用 Snowpark Python、PyTorch、Streamlit 和 OpenAI 的镜像识别应用程序 <https://quickstarts.snowflake.com/guide/image_recognition_snowpark_pytorch_streamlit_openai/index.html (https://quickstarts.snowflake.com/guide/image_recognition_snowpark_pytorch_streamlit_openai/index.html)>`_

  • ` Snowpark Scala 入门 <https://quickstarts.snowflake.com/guide/getting_started_with_snowpark_scala/index.html (https://quickstarts.snowflake.com/guide/getting_started_with_snowpark_scala/index.html)>`_

开发者指南

可以将 Snowpark 库用于下表中列出的语言:

下载

可以下载三种受支持语言中任何一种的 Snowpark 库。有关下载,请参阅 ` Snowpark 客户端下载 `_ (Snowflake Developer Center)。

主要功能

Snowpark 具有将其与其他客户端库区分开来的多个功能,如以下各部分所述。

与 Spark Connector 相比的优势

与使用 Snowflake Connector for Spark 相比,使用 Snowpark 进行开发具有以下优势:

  • 支持使用专为不同语言构建的库和模式与 Snowflake 中的数据进行交互,而不会影响性能或功能。

  • 支持使用 Jupyter、VS Code 或 IntelliJ 等本地工具创作 Snowpark 代码。

  • 支持所有操作的下推,包括 Snowflake UDFs。这意味着 Snowpark 将所有数据转换和繁重的工作推送到 Snowflake Data Cloud,使您能够高效地处理任何规模的数据。

  • 不需要在 Snowflake 之外使用单独的集群进行计算。所有计算都在 Snowflake 中完成。扩展和计算管理由 Snowflake 处理。

能够使用本机结构构建 SQL 语句

Snowpark API 提供用于构建 SQL 语句的编程语言结构。例如, API 提供了一个 select 方法,可以使用该方法指定要返回的列名称,而不是将 'select column_name' 写为字符串。

尽管仍然可以使用字符串来指定要执行的 SQL 语句,但是当使用 Snowpark 提供的本机语言结构时,将从 智能代码完成 (link removed) 和类型检查等功能中受益。

示例

以下示例中的 Python 代码对 sample_product_data 表执行 select 操作,指定列 idnameserial_number

>>> # Import the col function from the functions module.
>>> from snowflake.snowpark.functions import col

>>> # Create a DataFrame that contains the id, name, and serial_number
>>> # columns in the "sample_product_data" table.
>>> df = session.table("sample_product_data").select(col("id"), col("name"), col("serial_number"))
>>> df.show()

减少数据传输

Snowpark 操作在服务器上延迟执行,这意味着可以使用该库将运行的数据转换延迟到管道中尽可能晚,同时将许多操作批处理为单个操作。这将减少客户端和 Snowflake 数据库之间传输的数据量。还可以提高性能。

Snowpark 的核心抽象是 DataFrame,它代表一组数据,并提供对数据进行操作的方法。在您的客户端代码中,您构建了一个 DataFrame 对象并对其进行设置,以检索要使用的数据(例如,包含数据的列、要应用于行的筛选器等)。

构造 DataFrame 对象时不会检索数据。相反,当您准备好检索数据时,可以执行一项操作来评估 DataFrame 对象,并将相应的 SQL 语句发送到 Snowflake 数据库以供执行。

示例

以下示例中的 Python 代码设置了针对表的查询。该示例调用 collect 方法来执行查询并检索结果。

>>> # Create a DataFrame with the "id" and "name" columns from the "sample_product_data" table.
>>> # This does not execute the query.
>>> df = session.table("sample_product_data").select(col("id"), col("name"))

>>> # Send the query to the server for execution and
>>> # return a list of Rows containing the results.
>>> results = df.collect()

能够创建 UDFs 内联

可以在 Snowpark 应用程序中以内联方式创建用户定义函数 (UDFs)。Snowpark 可以将代码推送到服务器,在那里代码可以大规模地对数据进行操作。这对于循环或批处理功能非常有用,其中创建为 UDF 将允许 Snowflake 在 Snowflake 中大规模并行化和应用代码逻辑。

可以使用用于编写客户端代码的相同语言编写函数(例如,通过在 Scala 中使用匿名函数或在 Python 中使用 Lambda 函数)。要使用这些函数处理 Snowflake 数据库中的数据,您需要在自定义代码中定义并调用用户定义的函数 (UDFs)。

Snowpark 会自动将 UDFs 的自定义代码推送到 Snowflake 引擎。当您在客户端代码中调用 UDF 时,您的自定义代码将在服务器(数据所在位置)上执行。您无需将数据传输到客户端即可对数据执行函数。

示例

以下示例中的 Python 代码创建一个称为 my_udf 的 UDF,并将其分配给 add_one 变量。

>>> from snowflake.snowpark.types import IntegerType
>>> add_one = udf(lambda x: x+1, return_type=IntegerType(), input_types=[IntegerType()], name="my_udf", replace=True)