Clean Rooms mit Snowpark verwenden¶
Einführung¶
Snowflake Data Clean Rooms kann mit Snowpark zusammenarbeiten, um Ihre Clean Rooms mit mehr Rechenleistung auszustatten, wenn Sie große Datenmengen abfragen oder verarbeiten müssen.
Clean Rooms können Snowpark auf zwei Arten nutzen:
Snowpark-UDFs: Verwenden Sie die Snowpark-API in Ihrem Clean Room-Code, um Snowpark-UDFs zu erstellen, die die Skalierungs- und Verarbeitungsleistung von Snowpark nutzen.
Snowpark Container Services: Wenn Sie eine bessere Kontrolle über die Snowpark-Umgebung wünschen oder Bibliotheken verwenden möchten, die nicht in der Snowpark-API verfügbar sind, können Sie einen Container in einem Clean Room konfigurieren und hosten. So können Sie die Umgebung für Ihre speziellen Rechen- und Speicheranforderungen konfigurieren und die für Ihre Umgebung verfügbaren Bibliotheken anpassen.
Wenn Sie Daten laden müssen, die zu groß sind, um in den Speicher zu passen, verwenden Sie to_pandas_batches()
und iterieren Sie darüber. Beispiel:
df_iter = session.table(intermediary_table_name).to_pandas_batches() for df in df_iter: ...
Allgemeine Gestaltung komplexer Nutzungsabläufe¶
Obwohl Sie Ihre Daten generieren und anzeigen könnten, indem Sie eine einzige Vorlage aufrufen, ist es in vielen Fällen besser, die Schritte der Datengenerierung und der Ergebnisanzeige zu trennen. Auf diese Weise kann ein Verbraucher die Ergebnisse mehrfach ansehen, ohne jedes Mal eine Neuberechnung auszulösen, oder Daten von verschiedenen Punkten im Prozess ansehen. Um Ihren Ablauf in mehrere für Benutzer zugängliche Stagingbereiche aufzuteilen, erstellen Sie separate Vorlagen zum Triggern der Datengenerierung oder -verarbeitung und zum Anzeigen gespeicherter Ergebnisse. Weitere Informationen über die Gestaltung komplexer Nutzungsabläufe.
Snowpark-UDFs in einem Clean Room verwenden¶
Sie können die Snowpark-API in Ihrem hochgeladenen Python-Code verwenden, um die Verarbeitung von großen Datenmengen zu beschleunigen. Clean Rooms unterstützen nur die Snowpark Python-API. Sowohl Anbieter als auch Verbraucher können die Snowpark Python-API in ihrem hochgeladenen Python-Code verwenden.
Voraussetzungen¶
Clean Rooms, die Snowpark-UDFs ausführen, müssen in der Clean Room API ausgeführt werden; sie können nicht in der Clean Room UI ausgeführt werden.
Sie sollten die folgenden Themen verstehen:
Lesen Sie Gestaltung von Abläufen mit mehreren Schritten, um mehr über interne Tabellen zu erfahren.
Snowpark-API in einem Clean Room verwenden¶
Die Verwendung der Snowpark-API in Ihrem Clean Room-Python-Code ist dasselbe wie das Hochladen und Ausführen jeder anderen Python-Code-UDF, mit der Ausnahme, dass Sie die snowflake-snowpark-python
-Bibliothek verknüpfen müssen.
Erstellen Sie UDFs, UDTFs und Prozeduren, indem Sie SQL mit session.sql
im Schema cleanroom
ausführen, anstatt die Snowpark-Decorator-Elemente zu verwenden. Beispiel:
session.sql("CREATE OR REPLACE FUNCTION cleanroom.udf(...")
Grundlegende Schritte¶
Hier sind die grundlegenden Schritte, um die Snowpark-API über ein UDF oder UDTF in Ihrem Clean Room zu verwenden:
Anbieter
Erstellen Sie den Clean Room, legen Sie die Standard-Release-Richtlinie fest und verknüpfen Sie Ihre Daten auf die übliche Weise.
Da Sie wahrscheinlich einen sehr spezifischen Anwendungsfall für Ihren Code haben, müssen Sie wahrscheinlich keine Verknüpfungs- oder Spaltenrichtlinien in den Clean Room einfügen, obwohl Sie dies tun können.
Laden Sie Ihren eigenen Snowpark-Handler-Code in den Clean Room, indem Sie
provider.load_python_into_cleanroom
aufrufen. Der Code sollte mindestens das Paketsnowflake-snowpark-python
laden, sowie alle anderen Pakete, die Sie benötigen. UDFs können Daten zeilenweise verarbeiten und zurückgeben, aber Snowpark-Anwendungsfälle erzeugen normalerweise eine Ausgabetabelle, die durch den Aufruf einer separaten Ergebnisvorlage gelesen wird.Aktualisieren Sie die Standard-Release-Richtlinie (da Code-Ergänzungen eine neue Patch-Version erzeugen).
Erstellen Sie eine benutzerdefinierte Vorlage und laden Sie sie hoch, um Ihren Snowpark-Code auszuführen. Die einzige Möglichkeit, eine UDF auszuführen, besteht darin, sie von einer Vorlage aus auszulösen, die die UDF aufruft. Einige Details über die UDF-Aufrufvorlage:
Sie sollte die Funktion mit dem Alias und den Parametern aufrufen, die Sie in
provider.load_python_into_cleanroom
angegeben haben. Die Vorlage muss dencleanroom
-Namespace verwenden, um den Alias Ihrer Funktion aufzurufen.Wenn die UDF die Ergebnisse in eine Tabelle im Clean Room schreibt und der Name der Tabelle bei jeder Ausführung anders ist, sollte Ihre Ergebnisvorlage den Namen der Ergebnistabelle zurückgeben, und Ihre Ergebnisvorlage sollte den Tabellennamen als Argument vom Benutzer verwenden.
Laden Sie eine benutzerdefinierte SQL-Vorlage hoch, um auf die von Ihrer Snowpark-UDF generierte Ergebnistabelle zuzugreifen, wenn Sie eine Zwischenergebnistabelle erstellt haben. Verwenden Sie entweder den fest codierten Namen der Ergebnistabelle oder lassen Sie den Benutzer den Tabellennamen eingeben, der von Ihrem Code generiert und von der Ergebnisvorlage zurückgegeben wird.
Fügen Sie Teilnehmer hinzu und veröffentlichen Sie den Clean Room auf die übliche Weise.
Verbraucher
Der Verbraucher installiert den Clean Room und führt die Analyse auf die übliche Weise durch. Wenn die Datengenerierung und das Lesen der Ergebnisse in separate Vorlagen aufgeteilt sind, muss der Verbraucher jede Vorlage nacheinander aufrufen.
Beispielcode¶
Der folgende Beispielcode veranschaulicht, wie Sie eine lineare Regression der „Reichweite auf der Anzahl der Impressions“ hochladen und ausführen, um den Anstieg zu schätzen.
Der Verbraucher führt zunächst die Vorlage
prod_calculate_regression
aus, die eine Anbieter-UDF ausführt, um Ergebnisse zu generieren. Die Anbieter-UDF führt die folgenden Aktionen durch:Impressionsdaten vorverarbeiten. Es wird ein dynamischer SQL-Code erstellt, der die Impressionsdaten des Anbieters mit den Daten des Verbrauchers verknüpft, die Anzahl der Impressions und die Reichweite nach Datum berechnet und die Ergebnisse in einer Zwischentabelle im Clean Room speichert. Wenn der Verbraucher keine Tabelle angibt, wird der Code auf der gesamten Impressionstabelle des Anbieters ausgeführt.
Zwischentabelle laden. Die Zwischentabelle wird als Pandas-DataFrame in die Snowpark-Prozedur geladen.
Regression durchführen. Die Regression wird mit der Bibliothek
statsmodels
berechnet und gibt die Ergebnisse als Pandas-DataFrame zurück.Ergebnisse in eine interne Clean Room-Tabelle schreiben. Die Ergebnisse werden in eine Ergebnistabelle innerhalb des Clean Room geschrieben, und das Suffix ID des Tabellennamens wird an den Verbraucher zurückgegeben. Da die Snowpark-Prozedur innerhalb des Clean Room abläuft, ist sie nur begrenzt in der Lage, die Daten auf dem Konto des Verbrauchers zu aktivieren. Um die Ergebnisse sicherer zu machen, werden sie stattdessen in eine Tabelle innerhalb des Clean Room geschrieben, und der Verbraucher führt eine weitere Vorlage aus, um die Ergebnisdaten zu lesen.
Zwischentabellen löschen. Während der Berechnung im Clean Room erstellte Zwischentabellen, die nicht mehr benötigt werden, werden gelöscht, bevor die Snowpark-Prozedur beendet wird.
Namen der Ergebnistabelle zurückgeben. Der Name, der an den Verbraucher zurückgegeben wird, muss angegeben werden, wenn die Vorlage ausgeführt wird, um die Ergebnisse zu erhalten, da die Ergebnisse aus allen früheren Ausführungen beibehalten werden.
Der Verbraucher führt dann die Vorlage
get_results
aus und gibt das Suffix der Ergebnistabelle ein, das von der ersten Vorlage zurückgegeben wurde, um die Ergebnisse zu sehen.
Um die folgenden Beispiele auszuführen, benötigen Sie zwei Konten in derselben Webhosting-Region (es sei denn, Sie haben die Cloud-übergreifende automatische Ausführung implementiert): ein Konto für den Anbieter und ein weiteres Konto für den Verbraucher.
Der Beispielcode sollte in einem Snowflake-Arbeitsblatt ohne zusätzliche Snowpark-Konfiguration ausgeführt werden. Wenn Sie in einer anderen Umgebung arbeiten, müssen Sie möglicherweise die Snowpark Python-API installieren und konfigurieren.
Weitere Informationen¶
Snowpark Container Services in einem Clean Room verwenden¶
Wenn Sie mehr Kontrolle über die Umgebung haben möchten, in der Ihr Python-Code ausgeführt wird, können Sie einen Snowpark Container Service innerhalb des Clean Room ausführen. Dies gibt Ihnen eine detaillierte Kontrolle über die Ausführungsumgebung für Ihren Code und ist ideal für Anwendungsfälle, die spezielle Compute-, Speicher- oder andere Ressourcen erfordern, um die Leistung zu maximieren und die Kosten zu minimieren, oder um benutzerdefinierte Pakete oder andere Umgebungsfeatures einzubinden.
Wenn Sie einen Containerdienst in Ihrem Clean Room hosten, können Ihre Vorlage und jeder benutzerdefinierte Python-Code Funktionen aufrufen, die von Ihrem Dienst bereitgestellt werden. Die Verwendung von Snowpark Container Services ähnelt der Verwendung von UDFs in Snowpark, mit dem Unterschied, dass Ihre UDFs als HTTP-Endpunkte für den Aufruf der Vorlage zur Verfügung gestellt werden. Sie definieren den Dienst und die Endpunkte und laden alles in den Clean Room hoch.
Intern gehostete Endpunkte sind nur über Vorlagen innerhalb des Clean Room zugänglich und können von den Teilnehmern im Clean Room nicht direkt aufgerufen werden.
Voraussetzungen¶
Um die Snowpark Container Services in einem Clean Room nutzen zu können, müssen Sie die folgenden Themen verstehen:
Die Snowpark Python API, wenn Sie diese API verwenden.
Lesen Sie über die Gestaltung komplexer Nutzungsabläufe, um zu verstehen, wie Sie die Verarbeitung von Daten und die Darstellung von Ergebnissen in einzelne Schritte aufteilen können.
Grundlegende Schritte¶
Anbieter
Erstellen Sie die Dienstspezifikation, den Code und die Endpunkte, die für die Bearbeitung von Anfragen zuständig sind.
Erstellen Sie ein Image-Repository und gewähren Sie SAMOOHA_APP_ROLE Zugriff auf dieses Repository.
Erfassen Sie die Repository-URL für den nächsten Schritt.
Erstellen Sie das Image und laden Sie es in die Repository-URL hoch.
Erstellen Sie den Clean Room, verknüpfen Sie Daten, fügen Sie Verknüpfungsrichtlinien hinzu und fügen Sie Verbraucher auf die übliche Weise hinzu.
Definieren Sie die Vorlagen, die die Dienstpunkte aufrufen, und laden Sie sie in Ihren Clean Room hoch. Dienstfunktionen werden im Namespace
service_functions
erstellt und aufgerufen (im Gegensatz zu UDFs, die im Namespacecleanroom
erstellt und aufgerufen werden).-- Template to call an SPCS function named train. SELECT service_functions.train( {{ source_table[0] }}, {{ provider_join_col }}, {{ my_table[0] }}, {{ consumer_join_col }}, {{ dimensions | sqlsafe }},
- Laden Sie Ihre Dienstdetails in den Clean Room hoch, indem Sie
provider.load_service_into_cleanroom
aufrufen. Dies definiert die Image-URL, Endpunkte ) AS train_result;
- Laden Sie Ihre Dienstdetails in den Clean Room hoch, indem Sie
Laden Sie Ihre Dienstdetails in den Clean Room hoch, indem Sie
provider.load_service_into_cleanroom
aufrufen. Hier werden die Image-URL, die Endpunkte und andere Dienstoptionen definiert. Die hier definierten Namen der Endpunkte müssen mit Ihrer Dienstspezifikation übereinstimmen und sind die Namen, die Ihre Vorlage zum Aufrufen der Funktionen verwendet.CALL samooha_by_snowflake_local_db.provider.load_service_into_cleanroom( $cleanroom_name, $$ spec: containers: - name: lal image: /dcr_spcs/repos/lal_example/lal_service_image:latest env: SERVER_PORT: 8000 endpoints: - name: lalendpoint port: 8000 public: false $$, $$ functions: - name: train args: PROVIDER_TABLE VARCHAR, PROVIDER_JOIN_COL VARCHAR, CONSUMER_TABLE VARCHAR, CONSUMER_JOIN_COL VARCHAR, DIMENSIONS ARRAY, FILTER VARCHAR returns: VARCHAR endpoint: lalendpoint path: /train $$);
Legen Sie die Standard-Release-Richtlinie für Ihren Clean Room fest. Jedes Mal, wenn Sie Ihren Dienst hochladen oder ändern, wird eine neue Patch-Version erstellt.
Veröffentlichen Sie Ihren Clean Room.
Wenn Sie Änderungen am Image, an den Funktionen oder am Code vornehmen, müssen Sie und der Verbraucher Ihre Instanzen aktualisieren.
Verbraucher¶
Installieren Sie den Clean Room und verknüpfen Sie alle benötigten Daten auf die übliche Weise.
Erstellen Sie einen Computepool und gewähren Sie Zugriff auf den Clean Room.
Wenn Sie Abfragen durchführen werden (und das werden Sie mit ziemlicher Sicherheit), müssen Sie auch USAGE-Berechtigungen für den Clean Room auf dem verwendeten Warehouse erteilen.
Starten Sie den Dienst, indem Sie
samooha_by_snowflake_local_db.consumer.start_or_update_service
aufrufen und den Namen des Clean Room, den Namen des Computepools und den Namen des Warehouse (falls ein Warehouse verwendet wird) angeben.Untersuchen Sie die verfügbaren Endpunkte des Dienstes, indem Sie
SHOW ENDPOINTS IN SERVICE SAMOOHA_CLEANROOM_APP_clean_room_name.services.service;
ausführen.Wenn der Dienst eingerichtet ist und läuft, können Sie damit beginnen, alle Clean Room-Vorlagen auszuführen, die auf Dienstendpunkte zugreifen, indem Sie
consumer.run_analysis
auf die übliche Weise aufrufen.
Erstellen des Computepools¶
Je nachdem, wer den Pool besitzen und konfigurieren soll, kann der Anbieter den Computepool innerhalb des Clean Room oder der Verbraucher den Computepool außerhalb des Clean Room erstellen.
Wenn der Computepool außerhalb des Clean Room erstellt wird, müssen Sie dem Clean Room die entsprechenden Berechtigungen erteilen, um auf den Pool zuzugreifen und den Dienst zu erstellen, wie hier gezeigt:
-- Grant access to a warehouse to run queries. Needed only if the service queries Snowflake accounts.
USE ROLE ACCOUNTADMIN;
GRANT USAGE ON WAREHOUSE APP_WH TO APPLICATION SAMOOHA_CLEANROOM_APP_<CLEANROOM_NAME>;
-- Grant SAMOOHA_APP_ROLE privileges to create compute pools and create services
GRANT CREATE COMPUTE POOL ON ACCOUNT TO ROLE SAMOOHA_APP_ROLE WITH GRANT OPTION;
GRANT BIND SERVICE ENDPOINT ON ACCOUNT TO ROLE SAMOOHA_APP_ROLE WITH GRANT OPTION;
USE ROLE SAMOOHA_APP_ROLE;
-- Create the compute pool
CREATE COMPUTE POOL DCR_LAL_POOL
FOR APPLICATION SAMOOHA_CLEANROOM_APP_<CLEANROOM_NAME>
min_nodes = 1 max_nodes = 1
instance_family = highmem_x64_l
auto_resume = true;
-- Grant the clean room the privileges to access a pool running outside the clean room.
-- Grant the clean room access to the compute pool
GRANT USAGE ON COMPUTE POOL DCR_LAL_POOL TO APPLICATION SAMOOHA_CLEANROOM_<CLEANROOM_NAME>;
-- Allow the clean room to create the service
GRANT BIND SERVICE ENDPOINT ON ACCOUNT TO APPLICATION SAMOOHA_CLEANROOM_APP_<CLEANROOM_NAME>;
Dienstcode oder Konfiguration aktualisieren¶
Wenn der Anbieter das Image, die Dienstspezifikation oder die Namen der Endpunkte oder den Quellcode aktualisiert, müssen sowohl der Anbieter als auch der Verbraucher die folgenden Schritte unternehmen.
1. Anbieter:
Aktualisieren Sie das Image oder den Quellcode nach Bedarf.
Rufen Sie
provider.load_service_into_cleanroom
auf, was eine neue Patch-Nummer zurückgibt.Rufen Sie
provider.set_default_release_directive
auf und geben Sie die neue Patch-Nummer an.
2. Verbraucher:
Rufen Sie
consumer.start_or_update_service
auf.
Überwachung Ihres Dienstes¶
Standardmäßig können Verbraucher ihren Dienst überwachen. Diese Verhaltensweise kann mit dem Wert allow_monitoring
im Argument service_config
von provider.load_service_into_cleanroom
geändert werden.
Wenn die Verbraucherüberwachung aktiviert ist, kann der Verbraucher auf die Überwachungsprotokolle für einen bestimmten Clean Room-Dienst (im Format SAMOOHA_CLEANROOM_APP_SPCS_cleanroom_name.services.service
), die Dienst-ID und den Container zugreifen, wie hier gezeigt:
SELECT VALUE AS log_line
FROM TABLE(
SPLIT_TO_TABLE(SYSTEM$GET_SERVICE_LOGS(
'SAMOOHA_CLEANROOM_APP_SPCS_Lookalike_Demo.services.service', 0, 'lal'), '\n')
);
Der Verbraucher kann auch den Status seines Dienstes einsehen, indem er den Befehl DESCRIBE SERVICE verwendet, wie hier gezeigt:
-- See the state of the service.
DESCRIBE SERVICE SAMOOHA_CLEANROOM_APP_SPCS_Lookalike_Demo.services.service;
Sie können die Dienstendpunkte sehen, indem Sie SHOW ENDPOINTS IN SERVICE SAMOOHA_CLEANROOM_APP_clean_room_name.services.service;
ausführen. Beispiel:
SHOW ENDPOINTS IN SERVICE SAMOOHA_CLEANROOM_APP_SPCS_Lookalike_Demo.services.service;
Beispielcode¶
Die folgenden Notebooks und die Zip-Datei zeigen Ihnen, wie Sie Snowflake Container Services in einem Clean Room verwenden können. Sie benötigen zwei Konten mit installierten Clean Rooms: eines für den Anbieter und eines für den Verbraucher. Sie sollten sich in derselben Cloud-Hosting-Region befinden. Verwenden Sie die gepackten Konfigurationsdateien, um den Dienst zu definieren.