Snowparkプロジェクト定義を作成する

snowflake.yml ファイルには、Snowparkプロジェクトの関数とプロシージャの宣言が含まれています。

注釈

現在、Snowparkプロジェクト定義ファイルの名前は snowflake.yml である必要があります。

次のスニペットは、2つの関数と2つのプロシージャを含むサンプルのSnowparkプロジェクト定義ファイルを示しています。 hello_function 関数は、Snowparkの外部機能を使用します。

definition_version: '2'

mixins:
  snowpark_shared:
    artifacts:
      - dest: my_snowpark_project
        src: app/
    stage: dev_deployment

entities:

  hello_function:
    type: function
    identifier:
      name: hello_function
    handler: functions.hello_function
    signature:
      - name: name
        type: string
    returns: string
    external_access_integrations:
      - my_external_access
    secrets:
        cred: my_cred_name
    meta:
      use_mixins:
        - snowpark_shared

  hello_procedure:
    type: procedure
    identifier:
      name: hello_procedure
    handler: procedures.hello_procedure
    signature:
      - name: name
        type: string
    returns: string
    meta:
      use_mixins:
        - snowpark_shared

  test_procedure:
    type: procedure
    identifier:
      name: test_procedure
    handler: procedures.test_procedure
    signature: ''
    returns: string
    meta:
      use_mixins:
        - snowpark_shared
Copy

注意

プロジェクトディレクトリ内のファイルは Snowflake CLI によって処理され、他の snow snowpark コマンドを実行するときにSnowflakeにアップロードされる可能性があります。プロジェクトディレクトリのファイル内に機密情報を保存する場合は、注意が必要です。

関数およびプロシージャオブジェクトのプロパティ

次の表では、関数とプロシージャで使用されるプロパティについて説明しています。

関数およびプロシージャオブジェクトのプロパティ

プロパティ

定義

識別子

optional, string

エンティティの任意のSnowflake識別子。この値には次のような形式があります。

  • 文字列識別子テキスト

    identifier: my-snowpark-id
    
    Copy

    引用符で囲まれていない識別子と引用符で囲まれた識別子の両方がサポートされています。引用符で囲まれた識別子を使用するには、 YAML の値に引用符を含めます(例: ’”My Snowpark Function”’)。

  • オブジェクト

    identifier:
      name: my-snowpark-id
      schema: my-schema # optional
      database: my-db # optional
    
    Copy

    注釈

    schemadatabase を指定し、 name プロパティで完全修飾名(mydb.schema1.my-app など)を使用すると、エラーが発生します。

タイプ

optional, string

function または procedure のいずれかである必要があります。

artifact_repository

optional, string

アーティファクトリポジトリの名前。Snowflakeには snowflake.snowpark.pypi_shared_repository というデフォルトのアーティファクトリポジトリがあり、Snowpark UDFs 内の PyPI パッケージの接続やインストール、プロシージャに使用します。詳細については、 アーティファクトリポジトリ概要 をご参照ください。

artifact_repository_packages

optional, string

アーティファクトリポジトリにあるパッケージの名前。 requirements.txt ファイルにあるパッケージは、このパラメーターにリストされていても、処理されダウンロードされることに注意してください。詳細については、 アーティファクトリポジトリ概要 をご参照ください。

artifact_repositoryartifact_repository_packages パラメーターでは、以下のようにanaconda以外のパッケージを使用できます。

  • プロジェクトの app.py ファイルで、以下のような関数を定義できます。

    from sklearn.datasets import load_iris
    from sklearn.model_selection import train_test_split
    from sklearn.ensemble import RandomForestClassifier
    
    def udf():
      X, y = load_iris(return_X_y=True)
      X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)
    
      model = RandomForestClassifier()
      model.fit(X_train, y_train)
      return model.score(X_test, y_test)
    
    Copy
  • snowflake.yml ファイルで、次のように定義します。

    test_function:
      type: "function"
      handler: "app.udf"
      identifier:
        name: "udf"
      stage: "dev_deployment"
      signature: ""
      returns: float
      artifact_repository: snowflake.snowpark.pypi_shared_repository
      artifact_repository_packages:
        - 'scikit-learn'
      artifacts:
        - "app.py"
    
    Copy

特定のアーキテクチャに依存するパッケージについては、 resource_constraint パラメーターで以下のように定義できます。

test_function:
  type: "function"
  handler: "app.udf"
  identifier:
    name: "udf"
  stage: "dev_deployment"
  signature: ""
  returns: float
  artifact_repository: snowflake.snowpark.pypi_shared_repository
  artifact_repository_packages:
    - 'scikit-learn'
  artifacts:
    - "app.py"
  resource_constraint:
    architecture: 'x86'
Copy

詳細については、 x86用にのみビルドされたパッケージ をご参照ください。

アーティファクト

必須文字列シーケンス

デプロイルートに追加するファイルソースと宛先のペアのリスト。次のアーティファクトプロパティを使用できます。

  • src: コードソースファイルまたはファイルへのパス

  • dest: アーティファクトをデプロイするディレクトリへのパス。

    ディレクトリを参照する宛先パスは、 / で終わる必要があります。globパターンの宛先が / で終わらない場合はエラーになります。省略された場合、 dest のデフォルトは src と同じ文字列になります。

    注釈

    Snowpark snowflake.yml ファイルでglobパターンを使用するには、 ENABLE_SNOWPARK_GLOB_SUPPORT 機能フラグを有効にする必要があります。

    各項目に対して、 dict の代わりに文字列を渡すこともできます。この場合、値は srcdest の両方として扱われます。

src が(globではなく)1つのファイルだけを参照している場合、 dest はターゲット <パス> または <パス/名前> を参照できます。

各項目に対して、 dict の代わりに文字列を渡すこともできます。この場合、値は srcdest の両方として扱われます。

handler

required, string

snowpark.src で定義されたモジュール内のオブジェクトの関数またはプロシージャの実装。たとえば、 functions.hello_function は、ファイル <src>/functions.py の関数 hello_function を参照しています。

returns

required, string

結果の SQL タイプ。 利用可能なタイプ のリストを確認してください。

signature

required, sequence

signature パラメーターには、オブジェクトに渡される連続した引数を記述します。それぞれの名前とタイプを指定する必要があります。例:

signature:
  - name: "first_argument"
    type: int
  - name: "second_argument"
    default: "default value"
    type: string
Copy

関数またはプロシージャが引数を取らない場合、この値には空の文字列(signature: "")を設定します。

利用可能なタイプSQL タイプ 列をチェックします。名前付き引数とオプション引数の構文の詳細については、 オプションの引数を持つ UDF の呼び出し をご参照ください。

runtime

optional, string

プロシージャまたは関数を実行するときに使用するPythonバージョン。デフォルト: 「3.9」。

external_access_integrations

optional, string sequence

このプロシージャのハンドラーコードが外部ネットワークにアクセスするために必要な 外部アクセス統合 の名前。詳しくは CREATE PROCEDURE の EXTERNAL_ACCESS_INTEGRATIONS パラメーター をご覧ください。

secrets

optional, dictionary

シークレットの名前を変数に代入し、ハンドラーコードでシークレットから情報を取得する際に、変数を使用してシークレットを参照できるようにします。詳しくは CREATE PROCEDURE SECRETS パラメーター <label-create_procedure_python_secrets> をご覧ください。

imports

optional, string sequence

インポートする以前にアップロードしたファイルのステージとパス。詳しくは CREATE PROCEDURE IMPORT パラメーター <label-create_procedure_python_imports> をご覧ください。

execute_as_caller

optional, bool

プロシージャにのみ利用できます。プロシージャが所有者(あなた)の権限で実行されるか、呼び出し元の権限で実行されるかを決定します。デフォルト: False(所有者の権限)。