Abhängigkeiten für Code zur Verfügung stellen¶
Wenn eine benutzerdefinierte Funktion (UDF) oder eine gespeicherte Prozedur von Code oder Dateien abhängt, der/die sich außerhalb der UDF oder Prozedur befindet, können Sie der UDF oder Prozedur die Abhängigkeit zur Verfügung stellen, indem Sie sie in einen Stagingbereich hochladen und dann auf diesen Speicherort verweisen.
So könnte Ihre UDF oder Prozedur beispielsweise Zugriff auf Folgendes erhalten:
Python-Handler-Code in einem Modul
Java- oder Scala-Handler-Code, kompiliert und gepackt in einer JAR-Datei
In Java, Python oder Scala geschriebener Abhängigkeitscode
Dateien, die von Ihrem Handler-Code gelesen werden sollen und deren Name und Speicherort bei Erstellen der UDF bekannt sind. Dies kann z. B. bei Konfigurationsdateien nützlich sein.
Bemerkung
Sie können auch die PACKAGES-Klausel von CREATE FUNCTION oder CREATE PROCEDURE verwenden, um Bibliotheken zu importieren, die in Snowflake enthalten sind.
Unter diesem Thema:
Allgemeine Schritte¶
Befolgen Sie diese Schritte, um Ihrer Funktion oder Prozedur Abhängigkeiten zur Verfügung zu stellen.
Wählen oder erstellen Sie einen Stagingbereich, auf den Ihr Handler zugreifen kann.
Laden Sie die Abhängigkeit in den Stagingbereich hoch.
Verweisen Sie auf die Abhängigkeit, indem Sie beim Erstellen der Funktion oder Prozedur IMPORTS verwenden.
Auswählen oder Erstellen eines Stagingbereichs für Abhängigkeitsdateien¶
Damit Ihre Abhängigkeitsdatei für eine Funktion oder Prozedur zur Verfügung steht, müssen Sie die Abhängigkeitsdatei in einen Stagingbereich kopieren, auf den zur Laufzeit zugegriffen werden kann. Der Eigentümer der Funktion oder Prozedur muss die READ-Berechtigung für den Stagingbereich haben.
Normalerweise laden Sie die Abhängigkeit mit dem Befehl PUT in einen benannten internen Stagingbereich hoch. Weitere Informationen zum Erstellen von Stagingbereichen finden Sie unter CREATE STAGE.
Bemerkung
Sie können den Befehl PUT
nicht über die Snowflake-GUI ausführen. Sie können aber SnowSQL verwenden, um PUT
auszuführen. Ein Beispiel für die Verwendung des PUT
-Befehls zum Kopieren einer JAR-Datei in einen Stagingbereich finden Sie unter Hochladen der Abhängigkeit in den Stagingbereich (unter diesem Thema).
Wählen Sie eine der folgenden Arten von Stagingbereich für Ihre Abhängigkeit aus, oder erstellen Sie einen Stagingbereich:
Ein Benutzer oder ein benannter interner Stagingbereich.
Wenn Sie die Dateien mit dem Befehl
PUT
hochladen möchten, verwenden Sie einen benannten internen Stagingbereich. Weitere Informationen zur Auswahl des Typs eines internen Stagingbereichs finden Sie unter Auswahl eines internen Stagingbereichs für lokale Dateien.Ein externer Stagingbereich.
Externe Stagingbereiche sind Speicherorte, die mit externen Speicherdiensten verbunden sind, wie unter CREATE STAGE beschrieben. Mit dem
PUT
-Befehl können keine Dateien in externe Stagingbereiche hochgeladen werden.
Sie können einen vorhandenen Stagingbereich verwenden oder einen neuen Stagingbereich erstellen, indem Sie CREATE STAGE ausführen. Der folgende Befehl erstellt beispielsweise einen neuen internen Stagingbereich namens mystage
:
CREATE STAGE mystage;
Bemerkung
Snowflake unterstützt derzeit nicht die Verwendung eines Tabellen-Stagingbereichs zum Speichern von Handler-Code.
Hochladen der Abhängigkeit in den Stagingbereich¶
Laden Sie Ihre gespeicherte Prozedur in einen Stagingbereich hoch.
Wenn Sie einen externen Stagingbereich verwenden, nutzen Sie den dort zur Verfügung gestellten Speicherdienst für das Hochladen von Dateien. Wenn Sie einen internen Stagingbereich verwenden, können Sie die Datei von einem lokalen Laufwerk in den Stagingbereich kopieren, indem Sie den Befehl PUT
verwenden. Weitere Informationen zu diesem Befehl finden Sie unter PUT. Weitere Informationen zum Staging von Dateien mit PUT finden Sie unter Staging von Datendateien aus einem lokalen Dateisystem.
Verwenden Sie den Befehl PUT
, um Dateien in den Stagingbereich hochzuladen.
Mit dem Code im folgenden Beispiel wird myjar.jar
in einen Stagingbereich mit dem Namen mystage
hochgeladen und überschreibt ggf. dabei eine vorhandene Datei mit demselben Namen.
PUT file:///Users/MyUserName/MyCompiledJavaCode.jar
@mystage
AUTO_COMPRESS = FALSE
OVERWRITE = TRUE
;
Bemerkung
Wenn Sie AUTO_COMPRESS = FALSE
weglassen, komprimiert der PUT-Befehl die Datei automatisch. Der Name der komprimierten Datei im Stagingbereich wird myjar.jar.gz
sein. Wenn Sie später einen Befehl wie CREATE PROCEDURE ausführen, müssen Sie den Dateinamen in der IMPORTS-Klausel des Befehls mit dieser .gz
-Erweiterung angeben.
Bemerkung
Mit dem PUT-Befehl können keine Dateien in externe Stagingbereiche hochgeladen werden. Verwenden Sie die vom Clouddienst bereitgestellten Dienstprogramme, um Dateien in externe Stagingbereiche hochzuladen.
Referenzieren der Abhängigkeit¶
Um einer Funktion oder Prozedur, die Sie erstellen, den Speicherort der Abhängigkeit mitzuteilen, geben Sie in der IMPORTS-Klausel der SQL-Anweisung den Speicherort der Abhängigkeit an, die Sie zum Erstellen der Funktion oder Prozedur verwenden.
Wenn Sie mehrere Abhängigkeitsdateien haben, z. B. wenn Sie Bibliotheken von Drittanbietern verwenden, von denen ein Handler abhängt, können Sie den Speicherort sowie den Dateipfad und Dateinamen des Stagingbereichs für alle Abhängigkeitsdateien als Werte in der IMPORTS-Klausel angeben.
Mit dem Code im folgenden Beispiel wird eine Prozedur namens MYPROC
erstellt und angegeben, dass die Datei MyCompiledJavaCode.jar
(im Stagingbereich mystage
) in die Ausführungsumgebung der Prozedur einbezogen werden soll. In diesem Fall enthält MyCompiledJavaCode.jar
den Handler der Prozedur, d. h. den kompilierten Code für MyJavaClass.run
.
CREATE OR REPLACE PROCEDURE MYPROC(value INT, fromTable STRING, toTable STRING, count INT)
RETURNS INT
LANGUAGE JAVA
RUNTIME_VERSION = '11'
PACKAGES = ('com.snowflake:snowpark:latest')
IMPORTS = ('@mystage/MyCompiledJavaCode.jar')
HANDLER = 'MyJavaClass.run';