Scala-UDF-Einschränkungen

Unter diesem Thema werden die Einschränkungen beschrieben, die für in Scala geschriebene Handler gelten.

Allgemeine Einschränkungen

  • Obwohl Ihre Scala-Methode Klassen und Methoden aus Standard-Scala-Bibliotheken verwenden kann, deaktivieren die Sicherheitseinschränkungen von Snowflake einige Funktionen, wie z. B. das Schreiben in Dateien. Weitere Informationen dazu finden Sie im Abschnitt Sicherheitsverfahren für UDFs und Prozeduren.

  • Scala-UDFs können nicht freigegeben werden. Datenbankobjekte, die Scala-UDFs verwenden, können ebenfalls nicht freigegeben werden. So ist Folgendes zum Beispiel nicht möglich:

    • Direktes Freigeben einer Scala-UDF.

    • Freigeben einer Ansicht, die eine Scala-UDF aufruft.

    • Freigeben einer Funktion, die eine Scala-UDF aufruft.

    • Freigeben einer Tabelle mit einer Maskierungs- oder Zeilenzugriffsrichtlinie, die eine Scala-UDF aufruft.

  • Durch Erteilen der USAGE-Berechtigung für eine Scala-UDF kann der Empfänger den Inhalt von Dateien anzeigen, die von dieser UDF importiert wurden. Wenn Sie einer Rolle die USAGE-Berechtigung für eine Scala-UDF erteilen und diese Rolle eine Anweisung ausführt, die diese Scala-UDF aufruft, könnte jede Scala-UDF in derselben Anweisung den Inhalt aller Dateien lesen, die von der Scala-UDF importiert wurden, für die Sie eine USAGE-Berechtigung erteilt haben.

  • Bei der Datenbankreplikation werden externen oder internen Stagingbereiche noch nicht berücksichtigt. Wenn Sie eine Sekundärdatenbank zur Primärdatenbank hochstufen, müssen Sie die Stagingobjekte neu erstellen und alle Dateien, die in den internen Stagingbereichen fehlen, erneut importieren. Die Dateien müssen denselben Pfad und dieselben Dateinamen wie in der ursprünglichen Primärdatenbank haben.

  • Die maximale Größe für eine Scala-UDF-Ausgabezeile ist 16 MB.

  • Parallelität wird nicht unterstützt. So können Sie beispielsweise über Ihren Code keine Abfragen von mehreren Threads übermitteln. Code, der mehrere Abfragen gleichzeitig ausführt, führt zu einem Fehler.

  • Wenn eine Abfrage eine UDF aufruft, um auf Stagingdateien zuzugreifen, und die SQL-Anweisung außerdem eine Ansicht abfragt, die eine beliebige UDF aufruft, unabhängig davon, ob die Funktion in der Ansicht auf Stagingdateien zugreift oder nicht, dann schlägt die Operation mit einem Benutzerfehler fehl.

  • UDFs verarbeiten Dateien derzeit seriell. Als Problemumgehung gruppieren Sie Zeilen in einer Unterabfrage mit der GROUP BY-Klausel.

  • Wenn die Stagingdateien, auf die in einer Abfrage verwiesen wird, geändert oder gelöscht werden, während die Abfrage ausgeführt wird, führt der Funktionsaufruf zu einem Fehler.

Einschränkungen beim Klonen

Eine Scala-UDF kann geklont werden, wenn die Datenbank oder das Schema, das die Scala-UDF enthält, geklont wird. Um geklont zu werden, muss eine Scala-UDF die folgenden Bedingungen erfüllen:

  • Wenn die Scala-UDF auf einen Stagingbereich verweist (z. B. den Stagingbereich, der die UDF-JAR-Datei enthält), muss sich dieser Stagingbereich außerhalb des Schemas (oder der Datenbank) befinden, das (die) geklont wird.

    Sie können eine Scala-UDF und deren referenzierte Stagingbereiche in getrennten Schemas (und/oder getrennten Datenbanken) auf eine der folgenden Arten speichern:

    • Verwenden Sie überall dort, wo die Scala-UDF auf einen Stagingbereich verweist, einen qualifizierten Stagingbereichsnamen (z. B. my_db.my_schema.my_stage), der sich von dem Schema oder der Datenbank der Scala-UDF unterscheidet. Wenn die Klonoperation eine Datenbank klont, muss der Stagingbereichsverweis die Datenbank und das Schema enthalten. Wenn die Klonoperation ein Schema klont, muss der Stagingbereichsverweis das Schema (und optional die Datenbank) enthalten.

    • Erstellen Sie den referenzierten Stagingbereich unter Verwendung eines nicht qualifizierten Stagingbereichsnamens (der implizit die aktive Datenbank und das aktive Schema der aktuellen Sitzung verwendet), und erstellen Sie die Scala-UDF unter Verwendung eines qualifizierten Namens, der nicht mit der aktuellen Datenbank und dem aktuellen Schema der Sitzung übereinstimmt.

    • Verwenden Sie den Stagingbereich des Benutzers als referenzierten Stagingbereich (der Stagingbereich des Benutzers ist von allen anderen Stagingbereichen der Datenbank oder des Schemas getrennt).

Wenn eine oder mehrere Scala-UDFs im Schema oder in der Datenbank die erforderlichen Bedingungen nicht erfüllen, kann das Schema oder die Datenbank trotzdem geklont werden, wobei die nicht konformen Scala-UDFs allerdings ohne Fehler- oder Warnmeldung ausgelassen werden.

Jede geklonte Scala-UDF hat die gleiche Definition wie das Original. Diese Definition schließt alle Verweise auf Stagingbereiche ein. Die Stagingbereichsverweise in der Scala-UDF müssen vollqualifiziert sein und sind daher absolut und nicht relativ zu dem Schema oder der Datenbank, die geklont wird. Da sowohl Original als auch Klon auf dieselben Stagingbereiche und Dateien verweisen, gilt Folgendes:

  • Wenn Sie den Stagingbereich löschen oder erforderliche Dateien aus dem Stagingbereich entfernen, werden sowohl die Original- als auch die geklonte-UDF deaktiviert.

  • Das Ändern des Stagingbereichs oder der Dateien im Stagingbereich (z. B. das Ersetzen der JAR-Datei durch eine neuere JAR-Datei) wirkt sich sowohl auf die Original- als auch auf die geklonte UDF-Datei aus.