既存のPythonパッケージのアップロード

Snowflake CLI では、 snow snowpark package コマンドを使用して、既存のPythonパッケージをSnowparkインポートに追加できます。PyPi などのすでに実装されているパッケージを関数やプロシージャで使用できます。

SnowparkインポートにPythonパッケージを追加するには、次を実行します。

  1. パッケージがすでに利用可能かどうかを確認する

  2. パッケージをダウンロードしてSnowflakeアーティファクトを作成する

  3. パッケージをSnowflakeステージにアップロードする

  4. Snowparkのプロシージャと関数でパッケージを使用する

パッケージがすでに利用可能かどうかを確認する

パッケージがまだ利用可能でないかどうかを確認するには、snow snowpark package lookup コマンドを使用します。

次の例は、Snowflake Anacondaチャネルで既に利用可能なパッケージを検索する方法を示しています。

snow snowpark package lookup numpy
Copy
Package `numpy` is available in Anaconda. Latest available version: 1.26.4.

Snowflake Anacondaチャネルでパッケージが利用できない場合は、次のようなメッセージが表示されます。

snow snowpark package lookup july
Copy
Package `july` is not available in Anaconda. To prepare Snowpark compatible package run:

  snow snowpark package create july

詳細については、 snowpark package lookup コマンドをご参照ください。

パッケージをダウンロードしてSnowflakeアーティファクトを作成する

パッケージをダウンロードしてアップロードするSnowflakeアーティファクトを作成するには、snow snowpark package create コマンドを使用します。

snow snowpark package create <name>
Copy

条件:

  • <name> には、パッケージ名、パッケージの URL、ローカルファイルパスなど、pip でサポートされている任意の要件指定子を指定できます。

追加オプション:

  • --allow-shared-libraries: インストールされたパッケージを:codenowrap:pip を通して使用する場合、共有(.so / .dll)ライブラリを許可します。

  • --ignore-anaconda: Snowflake Anacondaチャンネルのパッケージを検索しません。

  • --index-url: パッケージ検索に使うPythonパッケージインデックスのベース URL を指定します。この URL は、 PEP 503に準拠したリポジトリ(シンプルリポジトリ API)か、同じ形式でレイアウトされたローカルディレクトリを指す必要があります。

  • --skip-version-check: 要件とAnaconda間の依存関係のバージョン比較をスキップします。

次の例は、Snowflakeアーティファクトを作成するためのさまざまな状況を示しています。

例: Anaconda依存関係を持つパッケージの作成

この例では、ステージにアップロードして後でSnowpark Pythonアプリでインポートできるzipファイルとして、Pythonパッケージを作成します。「july」パッケージの依存関係がAnacondaチャネルで見つかったため、 .zip ファイルから除外されました。このコマンドは、Snowparkプロジェクトの requirements.txt に含める必要があるパッケージを表示します。

snow snowpark package create july==0.1
Copy
Package july.zip created. You can now upload it to a stage using
snow snowpark package upload -f july.zip -s <stage-name>`
and reference it in your procedure or function.
Remember to add it to imports in the procedure or function definition.

The package july==0.1 is successfully created, but depends on the following
Anaconda libraries. They need to be included in project requirements,
as their are not included in .zip.
matplotlib
numpy

例: --ignore-anaconda オプションを使用したパッケージの作成

この例では、 requirements.txt ファイルに依存関係を追加することなく、Snowparkプロジェクトで使用できる july.zip パッケージを作成します。エラーメッセージは、一部のパッケージに共有ライブラリが含まれており、Windowsを使用してパッケージを作成する場合などに機能しない可能性があることを示しています。

snow snowpark package create july==0.1 --ignore-anaconda --allow-shared-libraries
Copy
2024-05-09 15:34:02 ERROR Following dependencies utilise shared libraries, not supported by Conda:
2024-05-09 15:34:02 ERROR contourpy
numpy
pillow
kiwisolver
matplotlib
fonttools
2024-05-09 15:34:02 ERROR You may still try to create your package with --allow-shared-libraries, but the might not work.
2024-05-09 15:34:02 ERROR You may also request adding the package to Snowflake Conda channel
2024-05-09 15:34:02 ERROR at https://support.anaconda.com/

Package july.zip created. You can now upload it to a stage using
snow snowpark package upload -f july.zip -s <stage-name>`
and reference it in your procedure or function.
Remember to add it to imports in the procedure or function definition.

例: Snowflake Anacondaチャネルで既に利用可能なパッケージの作成

この例では、パッケージがすでに存在しているため、作成に失敗しています。 --ignore-anaconda オプションを使用して、強制的にパッケージを作成することもできます。

snow snowpark package create matplotlib
Copy
Package matplotlib is already available in Snowflake Anaconda Channel.

パッケージの作成の詳細については、 snowpark package create コマンドをご参照ください。

パッケージをSnowflakeステージにアップロードする

パッケージをアップロードするには、 snow snowpark package upload コマンドを使用します。

このコマンドはPythonパッケージのzipファイルをSnowflakeステージにアップロードし、プロシージャまたは関数のインポートで参照できるようにします。

snow snowpark package upload --file="july.zip" --stage="packages"
Copy
Package july.zip UPLOADED to Snowflake @packages/july.zip.

Snowparkのプロシージャと関数でパッケージを使用する

プロシージャまたは関数でパッケージを使用するには、 snowflake.ymlSnowpark定義 セクションの imports パラメーターに追加します。

get_custom_package_version:
  handler: "functions.get_custom_package_version"
  signature: ""
  returns: string
  type: function
  imports:
    - "@packages/july.zip"
  meta:
    use_mixins:
      - snowpark_shared
Copy

次に、関数ハンドラーにパッケージをインポートします。

# functions.py
import july

def get_custom_package_version():
  return july.__VERSION__
Copy