Snowpark API

Snowparkライブラリは、Snowflakeで大規模にデータをクエリおよび処理するための直感的なライブラリを提供します。3つの言語のいずれかのライブラリを使用して、アプリケーションコードが実行されるシステムにデータを移動することなくSnowflakeでデータを処理し、柔軟性があるサーバーレスのSnowflakeエンジンの一部として大規模に処理するアプリケーションをビルドできます。

Snowflakeは現在、Java、Python、およびScalaの3つの言語のSnowparkライブラリを提供しています。

開発者ガイド

次のテーブルにリストされている言語のSnowparkライブラリを使用できます。

言語

開発者ガイド

API 参照情報

Java

Java用Snowpark開発者ガイド

Java API 用Snowparkライブラリリファレンス

Python

Python用Snowpark開発者ガイド

Python API 用Snowparkライブラリリファレンス

Scala

Scala用Snowpark開発者ガイド

Scala API 用Snowparkライブラリリファレンス

ダウンロード

サポートされている3つの言語から任意のSnowparkライブラリをダウンロードできます。ダウンロードについては、 Snowparkクライアントのダウンロード (Snowflakeデベロッパーセンター)をご参照ください。

主要な機能

Snowparkには、次のセクションで説明するとおり、他のクライアントライブラリとの差別化をもたらすいくつかの機能があります。

Sparkコネクタと比較した場合のメリット

Spark用Snowflakeコネクター を使用する場合と比較して、Snowparkでの開発には次のメリットがあります。

  • パフォーマンスや機能を犠牲にすることなく、さまざまな言語用に構築されたライブラリとパターンを使用して、Snowflake内のデータを操作するためのサポート。

  • Jupyter、 VS コード、または IntelliJ などのローカルツールを使用したSnowparkコードの作成のサポート。

  • Snowflake UDFs を含むすべての操作のプッシュダウンをサポートしています。これは、Snowparkがすべてのデータ変換と手間のかかる作業をSnowflakeデータクラウドにプッシュすることを意味し、あらゆるサイズのデータを効率的に操作できるようにします。

  • コンピューティングのためにSnowflakeの外部に別のクラスターを用意する必要はありません。すべての計算はSnowflake内で行われます。スケールとコンピューティングの管理は、Snowflakeによって処理されます。

ネイティブコンストラクトを使用して SQL ステートメントをビルドする機能

Snowpark API は、 SQL ステートメントを構築するためのプログラミング言語構造を提供します。たとえば、 API は、 'select column_name' を文字列として記述するのではなく、返す列名を指定するために使用できる select メソッドを提供します。

文字列を使用して実行する SQL ステートメントを指定することもできますが、Snowparkが提供するネイティブ言語構造を使用すると、 インテリジェントコード補完 や型チェックなどの機能を利用できます。

次の例のPythonコードは、列 idname、および serial_number を指定して、 sample_product_data テーブルで選択操作を実行します。

>>> # 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操作はサーバー上で遅延して実行されます。つまり、ライブラリを使用して、パイプラインのできるだけ後半まで実行中のデータ変換を遅らせながら、多くの操作を1つの操作にまとめることができます。これにより、クライアントと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でラムダを使用することにより)。これらの関数を使用して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