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

Wenn Ihre benutzerdefinierte Funktion (UDF) oder gespeicherte Prozedur von Code oder Dateien abhängt, die sich außerhalb der UDF oder Prozedur befinden, können Sie die Abhängigkeit der UDF oder Prozedur von einem Stagingbereich oder von einem Git-Repository-Klon in Snowflake aus einem Remote-Git-Repository, das Snowflake verwendet, zur Verfügung stellen.

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.

  1. Wählen oder erstellen Sie einen Stagingbereich, auf den Ihr Handler zugreifen kann.

  2. Laden Sie die Abhängigkeit in den Stagingbereich hoch.

  3. 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 verfügbar ist, muss sich die Datei in einem Stagingbereich befinden, in dem sie zur Laufzeit erreichbar ist. Der Eigentümer der Funktion oder Prozedur muss die READ-Berechtigung für den Stagingbereich haben.

Weitere Informationen zum Erstellen von Stagingbereichen finden Sie unter CREATE STAGE.

Sie können Snowflake auch so einrichten, dass es ein Remote-Git-Repository verwendet und einen Git-Repository-Klon mit einem vollständigen Klon der Dateien des entfernten Repositorys erstellt.

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 oder erstellen Sie eine der folgenden Optionen für Ihre Abhängigkeit:

  • Ein Git-Repository-Klon in Snowflake mit Dateien aus dem Remote-Repository.

    Weitere Informationen dazu finden Sie unter Verwenden eines Git-Repositorys in Snowflake.

  • 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.

Wenn Sie noch keinen Benutzer-Stagingbereich mit dem Namen interner Stagingbereich oder externer Stagingbereich haben, können Sie einen solchen erstellen, indem Sie CREATE STAGE ausführen. Der folgende Befehl erstellt beispielsweise einen neuen internen Stagingbereich namens mystage:

CREATE STAGE mystage;
Copy

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 Ihr Handler aus einem Git-Repository stammt, das Sie mit Snowflake verwenden, müssen Sie möglicherweise stattdessen die neuesten aus Ihrem Temote-Repository in den Snowflake Git-Repository-Klon holen.

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
  ;
Copy

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';
Copy