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.

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