Python-UDF-Einschränkungen¶
Unter diesem Thema werden die Einschränkungen beschrieben, die für in Python geschriebene Handler gelten.
Unter diesem Thema:
Allgemeine Einschränkungen¶
Obwohl Ihre Python-Funktion Module und Funktionen in den Standard-Python-Paketen verwenden kann, werden durch die Snowflake-Sicherheitseinschränkungen einige Features deaktiviert, wie z. B. das Schreiben in Dateien. Weitere Informationen dazu finden Sie im Abschnitt Einsetzen von bewährten Sicherheitsmethoden.
Alle UDFs und Module, die über Stagingbereich eingebracht werden, müssen plattformunabhängig sein und dürfen keine nativen Erweiterungen enthalten.
Vermeiden Sie Code, der eine bestimmte CPU-Architektur voraussetzt (z. B. x86).
Vermeiden Sie Code, der ein bestimmtes Betriebssystem voraussetzt.
Python-UDFs können nicht freigegeben werden. Datenbankobjekte, die Python-UDFs verwenden, können ebenfalls nicht freigegeben werden. So ist Folgendes zum Beispiel nicht möglich:
Direktes Freigeben einer Python-UDF.
Freigeben einer Ansicht, die eine Python-UDF aufruft.
Freigeben einer Funktion, die eine Python-UDF aufruft.
Freigeben einer Tabelle mit einer Maskierungs- oder Zeilenzugriffsrichtlinie, die eine Python-UDF aufruft.
Durch Erteilen der USAGE-Berechtigung für eine Python-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 Python-UDF erteilen und diese Rolle eine Anweisung ausführt, die diese Python-UDF aufruft, könnte jede Python-UDF in derselben Anweisung den Inhalt aller Dateien lesen, die von der Python-UDF importiert wurden, für die Sie eine USAGE-Berechtigung erteilt haben.
Die Datenbankreplikation für Inline-Python-UDFs wird unterstützt. Die Replikation wird jedoch blockiert, wenn eine Python-UDF eine Abhängigkeit zu einer Datei in einem Stagingbereich aufweist (d. h. zu einer Funktion, die mit der IMPORTS-Klausel erstellt wurde). Diese Einschränkung entfällt möglicherweise in zukünftigen Versionen.
Snowflake verwendet das Python-Modul
zipimport
, um Python-Code aus Stagingbereichen zu importieren. Infolgedessen werden allezipimport
-Einschränkungen auch für UDFs gelten. Weitere Informationen zuzipimport
-Modul finden Sie in der zipimport-Referenz.
Einschränkungen beim Klonen¶
Eine Python-UDF kann geklont werden, wenn die Datenbank oder das Schema, das die Python-UDF enthält, geklont wird. Um geklont zu werden, muss eine Python-UDF die folgenden Bedingungen erfüllen:
Wenn die Python-UDF auf einen Stagingbereich verweist, muss sich dieser Stagingbereich außerhalb des Schemas (oder der Datenbank) befinden, das (die) geklont wird.
Sie können eine Python-UDF und deren referenzierte Stagingbereiche in getrennten Schemas (und/oder getrennten Datenbanken) auf eine der folgenden Arten speichern:
Verwenden Sie überall dort, wo die Python-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 Python-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 Python-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 Python-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 Python-UDFs allerdings ohne Fehler- oder Warnmeldung ausgelassen werden.
Jede geklonte Python-UDF hat die gleiche Definition wie das Original. Diese Definition schließt alle Verweise auf Stagingbereiche ein. Die Stagingbereichsverweise in der Python-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 wirkt sich sowohl auf die Original- als auch auf die geklonte UDF-Datei aus.