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 库用于下表中列出的语言:

语言

开发者指南

API 参考

Java

Snowpark Java 开发者指南

Snowpark Library for Java API 参考

Python

Snowpark Python 开发者指南

Snowpark Library for Python API 参考

Scala

Snowpark Scala 开发者指南

Snowpark Library for Scala API 参考

下载

可以下载三种受支持语言中任何一种的 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()
Copy

减少数据传输

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()
Copy

能够创建 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)
Copy
语言: 中文