Schreiben des Python-Handlers für eine gespeicherte Prozedur

Sie können Python-Code als Handler schreiben, der ausgeführt wird, wenn eine gespeicherte Prozedur aufgerufen wird. In diesem Abschnitt wird das Design eines Handlers beschrieben.

Zum Erstellen einer gespeicherten Prozedur aus dem Handler-Code gibt es verschiedenen Möglichkeiten:

Planen des Schreibens Ihrer gespeicherten Prozedur

Gespeicherte Prozeduren werden innerhalb von Snowflake ausgeführt. Daher müssen Sie den Code, den Sie schreiben, unter Berücksichtigung dieser Tatsache planen.

  • Begrenzen Sie den Verbrauch von Arbeitsspeicher. Snowflake belegt Methoden mit einer Begrenzung hinsichtlich der benötigten Menge an Arbeitsspeicher. Weitere Hinweise dazu finden Sie unter Entwerfen von Handlern unter Berücksichtigung der Snowflake-bedingten Einschränkungen.

  • Stellen Sie sicher, dass Ihre Handler-Methode oder Funktion threadsicher ist.

  • Befolgen Sie die Regeln und Sicherheitsbeschränkungen. Weitere Informationen dazu finden Sie unter Sicherheitsverfahren für UDFs und Prozeduren.

  • Entscheiden Sie, ob Sie die gespeicherte Prozedur mit Aufruferrechten oder mit Eigentümerrechten ausführen möchten.

  • Berücksichtigen Sie die „snowflake-snowpark-python“-Version, die zum Ausführen gespeicherter Prozeduren verwendet wird. Aufgrund von Beschränkungen im Freigabeprozess von gespeicherten Prozeduren liegt die Version der „snowflake-snowpark-python“-Bibliothek, die in der Umgebung für die gespeicherte Python-Prozedur verfügbar ist, normalerweise eine Version hinter der öffentlich freigegebenen Version zurück. Verwenden Sie folgende SQL, um die neueste verfügbare Version zu ermitteln:

    SELECT * FROM information_schema.packages WHERE package_name = 'snowflake-snowpark-python' ORDER BY version DESC;
    
    Copy

Schreiben der Methode oder Funktion

Beachten Sie beim Schreiben der Methode oder Funktion für die gespeicherte Prozedur Folgendes:

  • Geben Sie das Snowpark-Session-Objekt als erstes Argument Ihrer Methode oder Funktion an. Wenn Sie Ihre gespeicherte Prozedur aufrufen, erstellt Snowflake automatisch ein Session-Objekt und übergibt dieses an Ihre gespeicherte Prozedur. (Sie können das Session-Objekt nicht selbst erstellen.)

  • Für die restlichen Argumente und für den Rückgabewert werden die Python-Typen verwendet, die den Snowflake-Datentypen entsprechen. Snowflake unterstützt die Python-Datentypen, die unter SQL-Python-Zuordnung von Datentypen für Parameter und Rückgabetypen aufgelistet sind.

  • Wenn Sie einen asynchronen untergeordneten Job aus dem Handler einer Prozedur heraus ausführen – wie z. B. mit DataFrame. collect_nowait – wird „Fire-and-Forget“ nicht unterstützt.

    Mit anderen Worten: Wenn der Handler eine untergeordnete Abfrage ausgibt, die noch ausgeführt wird, wenn der Job der übergeordneten Prozedur abgeschlossen ist, wird der untergeordnete Job automatisch abgebrochen.

Fehlerbehandlung

Sie können die üblichen Python-Techniken zur Ausnahmebehandlung verwenden, um Fehler innerhalb der Prozedur abzufangen.

Wenn innerhalb der Methode eine Ausnahme auftritt, die nicht von der Methode abgefangen wird, gibt Snowflake einen Fehler aus, der den Stacktrace für die Ausnahme enthält. Wenn die Protokollierung von unbehandelten Ausnahmen aktiviert ist, protokolliert Snowflake Daten zu unbehandelten Ausnahmen in einer Ereignistabelle.

Abhängigkeiten für Code zur Verfügung stellen

Wenn Ihr Handler-Code von Code abhängt, der außerhalb des Handlers selbst definiert ist (z. B. in einem Modul definierter Code) oder von Ressourcendateien, können Sie diese Abhängigkeiten für Ihren Code zur Verfügung stellen, indem Sie ihn in einen Stagingbereich hochladen. Weitere Informationen dazu finden Sie unter Abhängigkeiten für Code zur Verfügung stellen und für Python-Arbeitsblätter unter Python-Datei aus einem Stagingbereich zu einem Arbeitsblatt hinzufügen.

Wenn Sie Ihre gespeicherte Prozedur mit SQL erstellen, verwenden Sie beim Schreiben der CREATE PROCEDURE-Anweisung die IMPORTS-Klausel, um auf die Abhängigkeitsdateien zu verweisen.