Code-Bundles¶
Jeder Teilnehmende kann kundenspezifische Python-Prozeduren, UDFs oder UDTFs mit Vorlagen für die Zusammenarbeit bündeln. Vorlagen wiederum verweisen auf den gebündelten Code, um komplexe Datenaktionen in der Zusammenarbeit auszuführen. Zu den üblichen Verwendungszwecken gehören maschinelles Lernen oder die angepasste Datenmanipulation innerhalb einer Abfrage. Ihr hochgeladener Code kann Pakete aus einem genehmigten Bundle von Python-Paketen und der Snowpark-API importieren und verwenden.
Kundenspezifischer Code kann nur über Vorlagen und nicht direkt aufgerufen werden.
Bemerkung
Python ist die einzige Codierungssprache, die Code-Bundles unterstützt.
Die folgenden Abschnitte zeigen, wie Sie Code-Bundles hochladen und verwenden.
Implementieren von kundenspezifischen Code-Bundles¶
So laden Sie ein Code-Bundle hoch und verwenden es:
Der Codeüberstellende:
Erstellt und registriert den Code durch Aufrufen von:ref:
REGISTER_CODE_SPEC<label-dcr_collab_register_code_spec>.Der Code kann inline in der Spezifikation eingebettet sein oder über einen Stagingbereich verknüpft werden.
Erstellt eine Vorlage mit Verweis auf die Code-Bundle-Spezifikation anhand der ID im
code_specs-Array der Vorlage. Fügen Sie dieses Feld als Peer der Felder „Vorlage“ und „Parameter“ hinzu, wie im folgenden Beispiel gezeigt:Registriert die Vorlage und verknüpft die Vorlage dann mit der Zusammenarbeit.
Der Analyseausführende:
Führt die Vorlage aus, indem er
RUNals Standardmethode aufruft.
Wichtig
Snowflake führt Sicherheitsprüfungen für alle hochgeladenen Bundles durch, bevor sie in einem Clean Room eingesetzt werden. Wenn eine Sicherheitsprüfung fehlschlägt, werden die Vorlage und der gebündelte Code nicht bereitgestellt und stehen nicht zur Verfügung.
Um zu bestätigen, dass eine Vorlage mit einem Code-Bundle bereitgestellt und einsatzbereit ist, führen Sie die folgenden Schritte aus:
Suchen Sie den Namen der Clean Room-Anwendung, in der Sie versuchen, das Code-Bundle bereitzustellen:
Überprüfen Sie den Wert für
upgrade_statein der DESCRIBE APPLICATION-Antwort. Wenn der Upgrade-Status COMPLETE lautet, wurden die Sicherheitsprüfungen bestanden und die neue Vorlage und das Bundle können verwendet werden. Übergeben Sie den Anwendungsnamen, der vom Befehl im vorherigen Schritt zurückgegeben wurde, mit SQL wie im folgenden Beispiel: SQL-Code:
Erstellen und Registrieren der Code-Bundle-Spezifikation¶
Der erste Schritt beim Hochladen von kundenspezifischem Code besteht darin, die Code-Bundle-Spezifikation zu erstellen und zu registrieren.
Benutzerdefinierte Funktionen werden in einer YAML-Code-Bundle-Spezifikation definiert. Jedes Code-Bundle stellt eine oder mehrere Funktionen zur Verfügung, die von einer Vorlage aufgerufen werden können. Die Code-Bundle-Spezifikation kann entweder den Code inline in der Spezifikation enthalten oder mit Code in einem Snowflake-Stagingbereich verknüpft sein.
Ein Teilnehmender registriert eine Spezifikation durch den Aufruf von REGISTRY.REGISTER_CODE_SPEC, wodurch die Bundle-ID zurückgegeben wird.
Nachdem die Vorlage, die auf das Code-Bundle verweist, mit der Zusammenarbeit verknüpft wurde, ist dieses Code-Bundle für jeden in der Zusammenarbeit sichtbar, der auf eine Vorlage zugreifen kann, die das Code-Bundle verknüpft. Rufen Sie VIEW_CODE_SPECS auf, um zugängliche Code-Bundles in einer Zusammenarbeit aufzulisten.
Jede Person, die ein Code-Bundle in einer Zusammenarbeit sehen kann, kann es in ihren eigenen Vorlagen in dieser Zusammenarbeit sehen und verwenden. Jeder Inline-Code kann von jedem Mitglied der Zusammenarbeit angezeigt werden, aber Stagingbereich-Artefaktcode kann nicht von Teilnehmenden angezeigt werden. Teilnehmende müssen sicherstellen, dass der content_hash der referenzierten Artefakte mit der Überprüfung der Codeintegrität übereinstimmt.
Die folgende Code-Bundle-Spezifikation stellt eine einzelne Python-UDF namens normalize_value zur Verfügung, wodurch die normalize-Funktion aufgerufen wird, die in dieser Spezifikation definiert ist:
Erstellen und Registrieren der aufrufenden Vorlage¶
Nachdem die Codespezifikation registriert wurde, registriert der Teilnehmende dann eine Vorlage, die dieses Code-Bundle verwendet. Um ein Code-Bundle zu verwenden, fügen Sie die ID der Bundle-Spezifikation in das Feld code_specs der Vorlage ein. Wenn Sie diese Vorlage zur Zusammenarbeit hinzufügen, wird auch der Code gebündelt, um in der Zusammenarbeit verfügbar zu sein.
Eine Vorlage ruft eine benutzerdefinierte Funktion mit der Syntax cleanroom.spec_name$function_name auf. Beachten Sie die Literale . und``$`` zur Namensbereichskennzeichnung.
Bemerkung
Verwenden Sie den Namen der Spezifikation, nicht die Spezifikations-ID, um auf eine Funktion in Ihrer Vorlage zu verweisen. So können Sie die Version Ihres Code-Bundles schnell aktualisieren, ohne alle Verweise darauf in Ihrer Vorlage ändern zu müssen.
Im folgenden Beispiel verwendet eine Vorlage die Funktion normalize_value aus dem Code-Bundle custom_udf:
Hinzufügen einer Vorlage zu einer Zusammenarbeit¶
Fügen Sie die Vorlage, die Ihre Funktion aufruft, auf die standardmäßige Weise zur Zusammenarbeit hinzu. Weitere Informationen dazu finden Sie unter Vorlagen.
Snowflake validiert und lädt die Daten in die Zusammenarbeit hoch, wenn die aufrufende Vorlage zu einer Zusammenarbeit hinzugefügt wird. Das folgende Beispiel zeigt eine Anforderung zum Hinzufügen einer Vorlage zu einer bestehenden Zusammenarbeit:
Bemerkung
Die Installation einer Vorlage mit einem Code-Bundle löst eine Snowflake-Sicherheitsüberprüfung aus und gibt einen neuen Patch des zugrunde liegenden Clean Rooms aus. Die Vorlage wird erst verfügbar oder verwendbar, wenn der Prozess abgeschlossen ist und der Patch installiert wurde.
So überprüfen Sie den Fortschritt der Patchinstallation:
Suchen Sie den Namen der Clean Room-Anwendung. In der Regel ist dies
SFDCR_<clean room name>, aber Sie können suchen, um sicher zu sein:Überprüfen Sie den Status der Patchinstallation. Warten Sie, bis
upgrade_statein der folgenden Abfrage den Status COMPLETE aufweist:
Versionierung Ihres Codes¶
Jede registrierte Codespezifikation muss einen eindeutigen Namen + Version für alle Registrys in Ihrem Konto haben. Eine Vorlage lädt einen bestimmten Namen und eine Version einer Codespezifikation. Wenn Sie eine neue Version Ihres Codes erstellen oder verwenden möchten, müssen Sie eine neue Version der Vorlage übermitteln, die im Feld „code_specs“ auf die neue Codeversion verweist. Sie müssen den Textteil der Vorlage nicht ändern. Beispiel:
Schritt 1: Verwenden Sie Version 1 des Code-Bundles:
Schritt 2: Aktualisieren und registrieren Sie die neue Version Ihres Code-Bundles und aktualisieren Sie dann Ihre Vorlage, um die neue Version zu verwenden:
Beachten Sie, dass Funktionsnamen nicht die Version enthalten, sodass Sie den aufrufenden Code im Vorlagentext nicht ändern müssen, wenn Sie eine neue Version einer Funktion hochladen.
Beispielspezifikationen¶
Inline-UDF mit Codetext¶
Eine einfache UDF mit Inline-Python-Code:
UDTF (Benutzerdefinierte Tabellenfunktionen)¶
Dieses Beispiel-YAML definiert eine UDTF, die mehrere Zeilen zurückgibt:
Staging-Artefakt mit Wheel-Paket¶
Lesen Sie unbedingt die Anforderungen an die Dokumentation von stage_path zur Verknüpfung mit Stagingcode in Ihrer Codespezifikation.
Dieses Beispiel-YAML verwendet ein Staging-Python-Wheel-Paket:
Gespeicherte Prozeduren¶
Dieses Beispiel-YAML definiert eine gespeicherte Prozedur für die Datenverarbeitung:
Mehrere Python-Dateien als Staging-Artefakte¶
Lesen Sie unbedingt die Anforderungen an die Dokumentation von stage_path zur Verknüpfung mit Stagingcode in Ihrer Codespezifikation.
Dieses Beispiel-YAML verwendet mehrere Python-Quelldateien in einem Stagingbereich: