Erstellen einer gespeicherten Prozedur¶
Sie können eine gespeicherte Prozedur mit einer der verschiedenen in Snowflake verfügbaren Methoden erstellen. Diese Methoden werden unter diesem Thema beschrieben.
Eine Prozedur erstellen¶
Schreiben Sie Prozedurlogik als Handler in einer der verschiedenen unterstützten Sprachen, darunter Python, Java und Scala.
Wählen Sie ein Tool oder eine API aus, um die Prozedur mit dem von Ihnen geschriebenen Handler zu erstellen.
Weitere Informationen dazu finden Sie unter Tools zur Erstellung von Prozeduren.
SQL
Verwenden Sie SQL und schreiben Sie Logik in einer von mehreren Sprachen.
Snowpark
Verwenden Sie die Snowpark-API für Java, Python oder Scala.
Befehlszeile
Führen Sie die Snowflake CLI-Befehle aus, um die Prozedur zu erstellen.
Python API
Führen Sie clientseitige Python-Befehle aus, um die Prozedur zu erstellen.
REST
Stellen Sie Anfragen an RESTful-API, um die Prozedur zu erstellen.
Führen Sie die Prozedur mit einem von mehreren Tools aus, je nach Bedarf.
Tools zur Erstellung von Prozeduren¶
Sie können eine Prozedur mit einer von mehreren in Snowflake verfügbaren Methoden erstellen, je nachdem, welche Sprache und welche Fähigkeiten Sie haben. Wählen Sie aus der folgenden Tabelle das für Ihre Bedürfnisse geeignete Tool aus.
Sprache |
Ansatz |
---|---|
SQL Führen Sie einen SQL-Befehl aus, z. B. über die Snowsight. |
Führen Sie den Befehl SQL CREATE PROCEDURE aus, um eine Prozedur mit Handler-Code zu erstellen, der in einer der folgenden Sprachen geschrieben ist: |
Java, Python oder Scala Schreiben Sie Code in einer der unterstützten Sprachen und führen Sie den Code dann lokal aus, um Operationen in Snowflake durchzuführen. |
Führen Sie Client-Code aus, der Snowpark-APIs in einer der folgenden Sprachen verwendet. |
Befehlszeile Erstellen und verwalten Sie Snowflake-Entitäten, indem Sie Befehle über die Befehlszeile ausführen. |
Führen Sie die Befehle der Snowflake CLI aus. |
Python Schreiben Sie auf dem Client Code, der Verwaltungsoperationen auf Snowflake ausführt. |
Führen Sie Code aus, der die Snowflake Python-API verwendet. |
RESTful APIs (sprachunabhängig) Stellen Sie Anfragen an RESTful-Endpunkte, um Snowflake Entitäten zu erstellen und zu verwalten. |
Stellen Sie eine Anfrage zur Erstellung einer Prozedur mithilfe der Snowflake REST API. |
Wichtige Eigenschaften¶
Im Folgenden werden einige der Eigenschaften beschrieben, die beim Erstellen einer Prozedur erforderlich sind oder üblicherweise verwendet werden.
- Prozedurname:
Der Name der Prozedur muss nicht mit dem Namen des Handlers übereinstimmen. Für weitere Informationen zu Einschränkungen und Konventionen bei der Namensvergabe finden Sie unter Benennen und Überladen von Prozeduren und UDFs.
- Argumente:
Weitere Informationen zu den Anforderungen finden Sie unter Definieren von Argumenten für UDFs und gespeicherte Prozeduren.
- Rückgabetyp:
Weitere Informationen zum Zuordnen von SQL-Datentypen zu Handler-Datentypen in Snowflake finden Sie unter Zuordnung von Datentypen zwischen SQL und Handler-Sprachen.
- Handler-Name:
Falls erforderlich, ist dies der Name der Klasse oder Methode, die den Code enthält, der bei Aufruf der Prozedur ausgeführt wird. Die Angabe eines Handler-Namens ist nur für Handler erforderlich, die in Java, Python oder Scala geschrieben wurden. Bei JavaScript- und Snowflake Scripting-Handlern wird der gesamte Inline-Code als Handler ausgeführt.
- Abhängigkeiten:
Bei einem in Java, Python oder Scala geschriebenen Handler müssen Sie möglicherweise auch die Snowpark-Bibliothek angeben, z. B. bei der Erstellung der Prozedur.
Weitere Informationen zur Bereitstellung der Abhängigkeiten für den Handler finden Sie unter Abhängigkeiten für Code zur Verfügung stellen.
- Laufzeit der Handler-Sprache:
Wenn die Handler-Sprache Java, Python oder Scala ist, geben Sie die Laufzeitversion an, um anzugeben, welche unterstützte Laufzeitversion verwendet werden soll. Denken Sie daran, dass sich die Standardversion im Laufe der Zeit ändern wird, wenn Sie sie verwenden.
Anforderungen an die Zugriffssteuerung¶
Eine Rolle, die zur Ausführung dieser Operation verwendet wird, muss mindestens die folgenden Berechtigungen haben:
Berechtigung |
Objekt |
Anmerkungen |
---|---|---|
CREATE PROCEDURE |
Schema |
|
USAGE |
Prozedur |
Wenn Sie einer Rolle die Berechtigung USAGE für die neu erstellte Prozedur erteilen, können Benutzer mit dieser Rolle die Prozedur an anderer Stelle in Snowflake aufrufen. |
USAGE |
Integration für externen Zugriff |
Erforderlich bei Integrationen, die bei der Erstellung der Prozedur angegeben wurden, falls vorhanden. Weitere Informationen dazu finden Sie unter CREATE EXTERNAL ACCESS INTEGRATION. |
READ |
Geheimnis |
Erforderlich für Geheimnisse, die bei der Erstellung der Prozedur angegeben wurden, falls vorhanden. Weitere Informationen dazu finden Sie unter Erstellen eines Geheimnisses zur Darstellung von Anmeldeinformationen und Verwendung der Integration für den externen Zugriff in einer Funktion oder Prozedur. |
USAGE |
Schema |
Erforderlich bei Schemas, die Geheimnisse enthalten, die bei der Erstellung der Prozedur angegeben wurden, falls vorhanden. Weitere Informationen dazu finden Sie unter Erstellen eines Geheimnisses zur Darstellung von Anmeldeinformationen und Verwendung der Integration für den externen Zugriff in einer Funktion oder Prozedur. |
USAGE-Berechtigung für die übergeordnete Datenbank und das Schema ist erforderlich, um Operationen an einem beliebigen Objekt in einem Schema durchzuführen.
Eine Anleitung zum Erstellen einer kundenspezifischen Rolle mit einer bestimmten Gruppe von Berechtigungen finden Sie unter Erstellen von kundenspezifischen Rollen.
Allgemeine Informationen zu Rollen und Berechtigungen zur Durchführung von SQL-Aktionen auf sicherungsfähigen Objekten finden Sie unter Übersicht zur Zugriffssteuerung.
Nutzungshinweise¶
Alle Handler-Sprachen¶
Gespeicherte Prozeduren unterstützen das Überladen. Zwei Prozeduren können denselben Namen haben, wenn sie eine unterschiedliche Anzahl von Parametern oder unterschiedliche Datentypen für ihre Parameter aufweisen.
Gespeicherte Prozeduren sind nicht atomar. Wenn eine Anweisung in einer gespeicherten Prozedur fehlschlägt, werden die anderen Anweisungen in der gespeicherten Prozedur nicht unbedingt zurückgesetzt. Weitere Informationen zu gespeicherten Prozeduren und Transaktionen finden Sie unter Transaktionsmanagement.
Metadaten:
Achtung
Kunden müssen sicherstellen, dass bei der Nutzung des Snowflake-Dienstes keine personenbezogenen Daten (außer für ein Objekt „Benutzer“), sensible Daten, exportkontrollierte Daten oder andere regulierte Daten als Metadaten eingegeben werden. Weitere Informationen dazu finden Sie unter Metadatenfelder in Snowflake.
Tipp
Wenn Ihr Unternehmen eine Mischung aus gespeicherten Prozeduren mit Aufruferrechten und mit Eigentümerrechten verwendet, möchten Sie vielleicht eine Namenskonvention für Ihre gespeicherten Prozeduren verwenden, um anzugeben, ob eine einzelne gespeicherte Prozedur eine gespeicherte Prozedur mit Aufruferrechten oder eine gespeicherte Prozedur mit Eigentümerrechten ist.
Java¶
Siehe die bekannten Einschränkungen.
Javascript¶
Eine gespeicherte JavaScript-Prozedur kann nur einen einzigen Wert zurückgeben, z. B. eine Zeichenfolge (beispielsweise ein Erfolgs-/Fehler-Indikator) oder eine Zahl (z. B. ein Fehlercode). Wenn Sie umfangreichere Daten zurückgeben müssen, können Sie einen VARCHAR-Wert verwenden, der durch ein Trennzeichen (z. B. ein Komma) getrennte Werte enthält, oder Sie verwenden einen Datentyp für semistrukturierte Daten (wie VARIANT).
Python¶
Siehe die bekannten Einschränkungen.
Scala¶
Siehe die bekannten Einschränkungen.
Eine gespeicherte Prozedur mit SQL erstellen¶
Sie können eine gespeicherte Prozedur mit SQL erstellen, indem Sie die folgenden Schritte ausführen.
Bemerkung
Sie können auch eine Prozedur erstellen und aufrufen, die nicht zur späteren Verwendung gespeichert wird. Viele Eigenschaften für diese Art von Prozedur sind dieselben wie für eine gespeicherte Prozedur. Weitere Informationen dazu finden Sie unter CALL (mit anonymer Prozedur).
Schreiben Sie den Handler-Code, der bei Aufruf der Prozedur ausgeführt werden soll.
Sie können eine der unterstützten Handler-Sprachen verwenden. Weitere Informationen dazu finden Sie unter Unterstützte Sprachen und Tools.
Legen Sie fest, ob Sie den Handler-Code inline in der SQL-Anweisung CREATE PROCEDURE verwenden möchten oder auf den Handler-Code in einem Stagingbereich verweisen möchten.
Beide Methoden haben Vor- und Nachteile. Weitere Informationen dazu finden Sie unter Speichern von Handler-Code inline oder in einem Stagingbereich.
Führen Sie eine CREATE PROCEDURE-Anweisung in SQL aus, und geben Sie dabei die Eigenschaften der Prozedur an.
Der Code im folgenden Beispiel erstellt eine Prozedur namens
myProc
mit dem Inline-HandlerMyClass.myMethod
. Die Handler-Sprache ist Java, die (wie in Scala und Python geschriebene Prozedur-Handler) ein Session-Objekt aus der Snowpark-Bibliothek benötigt. Hier bezieht sich die PACKAGES-Klausel auf die Snowpark-Bibliothek, die in Snowflake enthalten ist.CREATE OR REPLACE PROCEDURE myProc(fromTable STRING, toTable STRING, count INT) RETURNS STRING LANGUAGE JAVA RUNTIME_VERSION = '11' PACKAGES = ('com.snowflake:snowpark:latest') HANDLER = 'MyClass.myMethod' AS $$ import com.snowflake.snowpark_java.*; public class MyClass { public String myMethod(Session session, String fromTable, String toTable, int count) { session.table(fromTable).limit(count).write().saveAsTable(toTable); return "Success"; } } $$;