Snowpark-Projektdefinition erstellen

Die Datei snowflake.yml enthält die Deklarationen der Funktionen und Prozeduren für ein Snowpark-Projekt.

Bemerkung

Derzeit muss die Snowpark-Projektdefinitionsdatei den Namen snowflake.yml tragen.

Der folgende Codeausschnitt zeigt ein Beispiel für eine Snowpark-Projektdefinitionsdatei: mit zwei Funktionen und zwei Prozeduren. Die Funktion hello_function nutzt externe Funktionen von 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

Vorsicht

Dateien in einem Projektverzeichnis werden von Snowflake CLI verarbeitet und können beim Ausführen anderer snow snowpark-Befehle in Snowflake hochgeladen werden. Seien Sie vorsichtig, wenn Sie sensible Informationen in Dateien in einem Projektverzeichnis ablegen.

Eigenschaften von Funktions- und Prozedurobjekten

Die folgende Tabelle beschreibt die von Funktionen und Prozeduren verwendeten Eigenschaften.

Eigenschaften von Funktions- und Prozedurobjekten

Eigenschaft

Definition

Bezeichner

optional, string

Optionaler Snowflake-Bezeichner für die Entität. Der Wert kann die folgenden Formen annehmen:

  • Zeichenfolge Bezeichnertext

    identifier: my-snowpark-id
    
    Copy

    Es werden sowohl Bezeichner ohne Anführungszeichen als auch Bezeichner mit Anführungszeichen unterstützt. Um Bezeichner in Anführungszeichen zu verwenden, schließen Sie die umgebenden Anführungszeichen in den Wert YAML ein (z. B. '"My Snowpark Function"').

  • Objekt

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

    Bemerkung

    Es tritt ein Fehler auf, wenn Sie ein schema oder eine database angeben und einen vollqualifizierten Namen in der name-Eigenschaft verwenden (z.B. mydb.schema1.my-app).

type

optional, string

Muss eine der folgenden Funktionen sein: function oder procedure.

artifact_repository

optional, string

Name des Artifact Repositorys. Snowflake verfügt über ein standardmäßiges Artifact Repository namens snowflake.snowpark.pypi_shared_repository, mit dem Sie PyPI-Pakete innerhalb von Snowpark-UDFs und Prozeduren verbinden und installieren können. Weitere Informationen dazu finden Sie unter Übersicht Artifact Repository.

artifact_repository_packages

optional, string

Namen der Pakete, die aus dem Artifact Repository stammen sollen. Beachten Sie, dass die Pakete in der Datei requirements.txt trotzdem verarbeitet und heruntergeladen werden, auch wenn sie in diesem Parameter aufgeführt sind. Weitere Informationen dazu finden Sie unter Übersicht Artifact Repository.

Mit den Parametern artifact_repository und artifact_repository_packages können Sie Pakete verwenden, die nicht von Anaconda stammen, ähnlich wie die folgenden:

  • In der Datei app.py des Projekts können Sie eine Funktion wie die folgende definieren:

    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
  • In der Datei snowflake.yml würden Sie diese dann wie folgt definieren:

    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

Für Pakete, die von bestimmten Architekturen abhängen, können Sie diese in dem Parameter resource_constraint wie folgt definieren:

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

Weitere Informationen dazu finden Sie unter Pakete, die nur für x86 erstellt wurden.

Artefakte

erforderlich, string sequence

Liste der Quelle/Ziel-Dateipaare, die dem Bereitstellungsstamm hinzugefügt werden sollen. Sie können die folgenden Eigenschaften des Artefakts verwenden:

  • src: Pfad zur Code-Quelldatei oder zu den Dateien

  • dest: Pfad zum Verzeichnis, in dem die Artefakte bereitgestellt werden.

    Zielpfade, die auf Verzeichnisse verweisen, müssen mit einem / enden. Das Ziel eines Glob-Musters, das nicht mit einem / endet, führt zu einem Fehler. Wird nichts angegeben, weist dest standardmäßig dieselbe Zeichenfolge wie src auf.

    Bemerkung

    Die Verwendung von Glob-Mustern in Snowpark snowflake.yml-Dateien erfordert die Aktivierung des Feature-Flags ENABLE_SNOWPARK_GLOB_SUPPORT.

    Sie können auch eine Zeichenfolge für jedes Element anstelle von dict übergeben. In diesem Fall wird der Wert sowohl als src als auch als dest behandelt.

Wenn src nur auf eine Datei verweist (nicht auf einen Glob), kann dest auf einen Zielpfad <> oder einen Pfad/Namen <> verweisen.

Sie können anstelle von dict auch eine Zeichenfolge für jedes Element übergeben. In diesem Fall wird der Wert sowohl als src als auch als dest behandelt.

handler

erforderlich, string

Die Implementierung der Funktion oder Prozedur des Objekts innerhalb des in snowpark.src definierten Moduls. So verweist functions.hello_function beispielsweise auf die Funktion hello_function aus der Datei <src>/functions.py.

returns

erforderlich, string

SQL Typ des Ergebnisses. Sehen Sie sich die Liste der verfügbaren Typen an.

signature

erforderlich, sequence

Der Parameter signature beschreibt aufeinanderfolgende Argumente, die an das Objekt übergeben werden. Sie sollten jeweils den Namen und den Typ angeben, zum Beispiel:

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

Wenn eine Funktion oder Prozedur keine Argumente benötigt, setzen Sie diesen Wert auf eine leere Zeichenfolge (signature: "").

Überprüfen Sie die Spalte SQL Typ von verfügbaren Typen. Weitere Informationen zur Syntax von benannten und optionalen Argumenten finden Sie unter Aufrufen einer UDF mit optionalen Argumenten.

runtime

optional, string

Python-Version, die beim Ausführen der Prozedur oder Funktion verwendet werden soll. Standard: „3.9“.

external_access_integrations

optional, string sequence

Die Namen der Integrationen für den externen Zugriff, die benötigt werden, damit der Handler-Code dieser Prozedur auf externe Netzwerke zugreifen kann. Weitere Einzelheiten finden Sie unter dem Parameter EXTERNAL_ACCESS_INTEGRATIONS in CREATE PROCEDURE.

secrets

optional, dictionary

Weist die Namen von Geheimnissen Variablen zu, sodass Sie die Variablen verwenden können, um auf die Geheimnisse zu verweisen, wenn Sie Informationen aus Geheimnissen im Handler-Code abrufen. Weitere Einzelheiten finden Sie unter dem Parameter SECRETS in CREATE PROCEDURE <label-create_procedure_python_secrets>.

imports

optional, string sequence

Stagingbereich und Pfad zu den zuvor hochgeladenen Dateien, die Sie importieren möchten. Weitere Einzelheiten finden Sie unter dem Parameter IMPORT in CREATE PROCEDURE <label-create_procedure_python_imports>.

execute_as_caller

optional, bool

Nur für Prozeduren verfügbar. Bestimmen Sie, ob die Prozedur mit den Berechtigungen des Eigentümers (Sie) oder mit den Berechtigungen des Aufrufers ausgeführt wird. Standard: „false“ (Berechtigungen des Eigentümers).