Verwenden von Snowflake Collaboration Data Clean Rooms¶
Dieses Thema bietet eine allgemeine Anleitung zur Verwendung von Collaboration Data Clean Rooms. Außerdem finden Sie Einzelheiten zu allen wichtigen Schritten, die erforderlich sind, um eine Zusammenarbeit zu erstellen oder an dieser zu teilnehmen.
Anforderungen¶
Snowflake Data Clean Rooms muss auf die neueste Version aktualisiert sein.
Eigentümer und Datenanbieter müssen die Snowflake Enterprise Edition verwenden. Analysenausführende können die Standard Edition verwenden.
Sie benötigen Zugriff auf die Data Clean Rooms Collaboration- API, um Zusammenarbeiten sehen oder verwalten zu können. Weitere Informationen dazu finden Sie unter Verwalten des Zugriffs auf die DCR Collaboration-API.
Sie sollten Sekundärrollen in Ihrer Umgebung deaktivieren, wenn Sie die Collaboration-API verwenden:
USE SECONDARY ROLES NONE;
Grundlegender Workflow für die Zusammenarbeit im Clean Room¶
Hier ist ein einfaches Szenario für die Zusammenarbeit im Clean Room:
Der Eigentümer der Zusammenarbeit kann optional alle Vorlagen oder Datenangebote registrieren, die in der anfänglichen Konfiguration der Zusammenarbeit vorhanden sein sollen.
Der Eigentümer bittet optional alle vorgesehenen Teilnehmenden, Vorlagen oder Datenangebote zu registrieren, die in der Erstkonfiguration der Zusammenarbeit angezeigt werden sollen. Die Mitarbeiter geben dann die Ressourcen-IDs von allen Elementen an, die sie registriert haben.
Der Eigentümer erstellt dann eine Zusammenarbeit. Die Zusammenarbeit wird durch eine Zusammenarbeits-YAML-Spezifikation definiert, die die Teilnehmenden, deren Rollen und alle Ressourcen auflistet, die in der ersten Version der Zusammenarbeit vorhanden sein sollen.
Wenn eine Zusammenarbeit erstellt wird, ist die Menge der Teilnehmenden und ihrer Rollen festgelegt: Nur Teilnehmende mit einer Rolle in der Definition der Zusammenarbeit werden zum Beitritt eingeladen. Ebenso ist der Satz der Analyseausführenden festgelegt. Jeder Teilnehmende kann jedoch auch ein Datenanbieter werden, indem er neue Daten mit der Zusammenarbeit verknüpft.
Wenn Ihre Zusammenarbeit Benutzende in anderen Cloudhosting-Regionen umfasst, müssen diese die Cloud-übergreifende automatische Ausführung für ihr Konto aktivieren, bevor sie die Zusammenarbeit überprüfen und ihr beitreten können.
Der Eigentümer tritt der von ihm erstellten Zusammenarbeit bei, wodurch die Zusammenarbeit aktiv wird. Die Zusammenarbeit ist jetzt für jeden Teilnehmenden in der Spezifikation sichtbar und zum Beitreten verfügbar.
Teilnehmende überprüfen die Zusammenarbeit und treten ihr bei.
Teilnehmende können dann optional Ressourcen zur Zusammenarbeit hinzufügen, wie z. B. Vorlagen, und, auch wenn es sich um einen Datenanbieter handelt, Datenangebote.
Analyseausführende können dann alle Vorlagen ausführen, die ihnen in der Zusammenarbeit zugewiesen sind, wobei sie alle Daten verwenden können, die ihnen in der Zusammenarbeit zur Verfügung stehen (sowie optional nicht freigegebene lokale Daten). Der Analyseausführende trägt die Kosten der Analyse. Vorlagen können die Abfrageergebnisse entweder in der Antwort zurückgeben oder Ergebnisse für den Aufrufenden oder einen anderen Teilnehmenden aktivieren.
In den folgenden Abschnitten werden die Details zu jedem dieser Schritte beschrieben.
Erstellen einer Zusammenarbeit¶
Um eine Zusammenarbeit zu erstellen, entwerfen Sie eine Zusammenarbeitsspezifikation, die alle Teilnehmenden und deren Rollen definiert. Optional registriert der Eigentümer der Zusammenarbeit sie und verknüpft alle anderen Ressourcen, die im Rahmen der anfänglichen Zusammenarbeit zur Verfügung gestellt werden sollen, und er schließt die Ressourcen in die Zusammenarbeitsspezifikation ein. Wenn der Eigentümer erwartet, dass Ressourcen von Teilnehmenden verwendet werden, kann der Eigentümer diese Benutzenden auch auffordern, ihre Ressourcen zu registrieren und dem Eigentümer die Ressourcen-IDs zu nennen, die in die Zusammenarbeitsspezifikation aufgenommen werden sollen.
Der Eigentümer ruft dann INITIALIZE auf, um mit der Erstellung der Zusammenarbeit zu beginnen. Standardmäßig verbindet INITIALIZE auch automatisch den Eigentümer mit der Zusammenarbeit. Dies ist ein asynchroner Prozess, daher muss GET_STATUS so lange aufgerufen werden, bis der Status JOINED lautet. Wenn der Status der Zusammenarbeit JOINED lautet, ist die Zusammenarbeit aktiv, und alle Teilnehmenden können die Zusammenarbeit sehen und ihr beitreten.
CALL SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.COLLABORATION.INITIALIZE(
$$
api_version: 2.0.0
spec_type: collaboration
name: my_first_collaboration
owner: alice
collaborator_identifier_aliases:
alice: example_com.acct_abc
bob: another_example.acct_xyz
analysis_runners:
bob:
data_providers:
alice:
data_offerings: []
bob:
data_offerings: []
alice:
data_providers:
alice:
data_offerings: []
bob:
data_offerings: []
templates: []
$$,
'APP_WH'
);
SET collaboration_name = '<collaboration_name>';
-- INITIALIZE automatically joins the owner. Check status until JOINED.
CALL SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.COLLABORATION.GET_STATUS($collaboration_name);
-- Collaboration is visible here when it's joined.
CALL SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.COLLABORATION.VIEW_COLLABORATIONS();
Ressourcen zu einer Zusammenarbeit hinzufügen¶
Jeder Teilnehmende kann Ressourcen zu einer Zusammenarbeit hinzufügen oder Ressourcen entfernen, die er der Zusammenarbeit hinzugefügt hat. Es gibt zwei Schritte, um eine Ressource zu einer Zusammenarbeit hinzuzufügen:
Der Ressourceneigentümer erstellt eine Ressourcendefinitionsspezifikation für die Ressource und verwendet sie, um die Ressource in seinem Konto zu registrieren. Sie können die Ressource in der Standard-Registry Ihres Kontos registrieren, oder Sie können eine benutzerdefinierte Registry verwenden.
Ein Teilnehmender verknüpft die Ressource mit einer Zusammenarbeit. Nachdem die Ressource mit verknüpft wurde, kann sie von den angegebenen Teilnehmenden verwendet werden. Einige Ressourcentypen, wie z. B. Vorlagen, können von jedem Teilnehmenden eingebunden werden. Andere Ressourcen, wie z. B. Datenangebote, können nur von Benutzenden mit einer Datenanbieterrolle verknüpft werden. Ressourcen stehen in der Regel nur bestimmten Teilnehmenden zur Verfügung, die in der Zusammenarbeitsspezifikation und der Ressourcenfreigabe definiert sind.
Ressourcen können einer Zusammenarbeit entweder vor oder nach dem Erstellen einer Zusammenarbeit hinzugefügt werden.
Ressourcen unterstützen die Versionierung. Das Erstellen einer neuen Ressource mit einer neuen Version entfernt jedoch nicht die vorherige Version aus der Zusammenarbeit.
Ressourcen werden eindeutig benannt, indem der vom Benutzenden angegebene Name und die Version (und Alias bei Datenangeboten) kombiniert werden.
Sie können die folgenden Ressourcen zu einer Zusammenarbeit hinzufügen:
Vorlagen¶
Vorlagen sind JinjaSQL-Clean Room-Vorlagen, die von festgelegten Teilnehmenden ausgeführt werden können. Jeder Teilnehmende kann eine Vorlage registrieren und zu einer Zusammenarbeit hinzufügen, solange alle betroffenen Teilnehmenden die Anfrage genehmigen, wie in den folgenden Schritten beschrieben. Sie können nur Vorlagen hinzufügen oder entfernen, die in Ihrem Konto registriert sind.
So fügen Sie eine Vorlage zu einer Zusammenarbeit hinzu:
Entwerfen Sie eine Vorlage für die Zusammenarbeit, und betten Sie sie in eine Vorlagenspezifikation ein.
Registrieren Sie die Vorlage, indem Sie
REGISTRY.REGISTER_TEMPLATEaufrufen. Dadurch wird eine Vorlagen-ID zurückgegeben.Verknüpfen Sie die Vorlage. Der Prozess hängt davon ab, ob die Zusammenarbeit bereits vorhanden ist:
Um eine Vorlage vor dem Erstellen der Zusammenarbeit hinzuzufügen, geben Sie die Vorlagen-ID an den Eigentümer der Zusammenarbeit weiter, der sie zur Zusammenarbeitsspezifikation hinzufügt und definiert, wer sie ausführen kann.
alice: data_providers: bob: data_offerings: [] templates: - id: bob_template_v1 # Alice can run this template, seemingly registered by bob.
Um eine Vorlage zu einer vorhandenen Zusammenarbeit hinzuzufügen, müssen Sie bei allen von der Vorlage betroffenen Teilnehmenden die Berechtigung anfragen. Führen Sie die folgenden Schritte aus, um eine Vorlage zu einer vorhandenen Zusammenarbeit hinzuzufügen:
Rufen Sie
REGISTER_TEMPLATEauf, um die Vorlage in Ihrem Konto zu registrieren, damit sie zu Zusammenarbeiten hinzugefügt werden kann.Rufen Sie
ADD_TEMPLATE_REQUESTmit der Vorlagen-ID auf, um den Genehmigungsablauf zu starten und die Vorlage zu einer bestimmten Zusammenarbeit für bestimmte Benutzende hinzuzufügen.Alle von der Ressource betroffenen Teilnehmenden sehen die Anfrage, wenn sie
VIEW_UPDATE_REQUESTSaufrufen.Teilnehmende, denen die Anfrage mit dem Status PENDING angezeigt wird, sollten
APPROVE_UPDATE_REQUESToderREJECT_UPDATE_REQUESTaufrufen.Wenn ein Teilnehmender die Anfrage ablehnt, wird die Aktualisierungsanfrage abgelehnt.
Mitarbeitende können später eine Genehmigung nicht in eine Ablehnung oder eine Ablehnung in eine Genehmigung ändern.
Wenn der Status der Anfrage APPROVED ist, steht die Vorlage den in der Anfrage zum Hinzufügen einer Vorlage angegebenen Benutzenden zur Verfügung. Wenn die Anforderung REJECTED ist, ist jeder von der ablehnenden Seite angegebene Grund im Anfragebericht sichtbar. Nachdem eine Vorlage von allen Benutzenden genehmigt wurde, kann es eine kurze Verzögerung geben, bevor die Vorlage verfügbar ist. Rufen Sie
view_templatesauf, wenn Sie sicherstellen möchten, dass die Vorlage für die Verwendung verfügbar ist.
Tipp
Um zu sehen, welche Vorlagen Sie registriert haben, rufen Sie REGISTRY.VIEW_REGISTERED_TEMPLATES auf.
Vorlagenentwurf für eine Zusammenarbeit¶
Zusammenarbeitsvorlagen gleichen Clean Room-Vorlagen, wobei es einige Besonderheiten zu beachten gibt:
Freigegebene Tabellen, die in der Zusammenarbeit aufgeführt sind, werden verwendet, um die
source_table-Variable der Vorlage auszufüllen.my_tablewird nur verwendet, wenn ein Analyseausführender lokale, nicht freigegebene Daten verwenden möchte. Wenn Sie diemy_table-Variable in einer Vorlage verwenden, müssen Sie beachten, dass Tabellen, die dieser Variablen zugewiesen sind, nicht für die Zusammenarbeit freigegeben werden.Spalten aus den Datenquellen haben möglicherweise neue Namen, wenn sie für die Vorlage oder den Benutzenden zugänglich sind. Unter Umbenennen der Quellspalte erfahren Sie mehr darüber, wie und wann Quellspalten umbenannt werden. Vorlagen und vom Benutzenden bereitgestellte Argumente (z. B. der Name einer Verknüpfungsspalte) sollten den endgültigen Namen und nicht den ursprünglichen Namen verwenden, wenn die Spalte umbenannt wird.
Aktivierungsvorlagen in einer Zusammenarbeit müssen nicht
activation_template_namebenannt werden. Alle anderen Anforderungen an die Aktivierungsvorlage gelten weiterhin.
Informationen zur Syntax benutzerdefinierter Vorlagen in Snowflake Data Clean Rooms finden Sie unter Referenz für benutzerdefinierte Clean Room-Vorlagen.
Datenangebote¶
Ein Datenangebot ist ein Satz von einer oder mehreren Datenansichten, die für in einer Zusammenarbeit für bestimmte Analyseausführende freigegeben werden. Datenangebote können von allen in einer Zusammenarbeit aufgeführten Datenanbietern hinzugefügt werden. Datenangebote werden in einem Bereichsformat als data offering ID.alias angezeigt, wobei der Alias eine bestimmte Ansicht im Datenangebot ist. Sie können Datenangebote nur dann für bestimmte Teilnehmende freigeben, wenn Sie in als Datenanbieter für diesen Analyseausführenden in den Zusammenarbeitsspezifikationen aufgeführt sind.
Ein Datenangebot ist eine Live-Ansicht der Daten und kein Snapshot der Daten zum Zeitpunkt der Erstellung oder Registrierung des Datenangebots. Alle Snowflake-Richtlinien, die auf die Quelldaten angewendet werden, sind in der Zusammenarbeit aktiv.
Wenn Sie ein Datenangebot registrieren, erstellt Snowflake eine Ansicht für jede in der Spezifikation des Datenangebots aufgeführte Datenquelle. Die Ansicht enthält nur die Spalten, die in der Spezifikation des Datenangebots aufgeführt sind. Wenn Sie ein Datenangebot mit einer Zusammenarbeit verknüpfen, erstellt Snowflake eine Kopie dieser Ansicht, die mit geschütztem Zugriff für alle Analyseausführenden versehen ist, die auf dieses Datenangebot zugreifen können, gemäß der Zusammenarbeitsspezifikation. Wenn Sie die zugrunde liegenden Tabellen verschieben, umbenennen oder die Zugriffsberechtigungen für die Tabellen ändern, wird das Datenangebot über alle zuvor registrierten Links nicht mehr verwendbar.
Wenn Sie die Snowflake Standard Edition verwenden, können Sie keine Datenangebote gemeinsam mit anderen Teilnehmenden verwenden. Aber Sie können Ihre eigenen Daten in einer Abfrage verwenden.
Anforderungen:
Sie müssen OWNERSHIP für alle Daten haben, die Sie freigeben möchten. Wenn Sie dies nicht tun, erhalten Sie beim Versuch, der Zusammenarbeit beizutreten, die Fehlermeldung, dass eine Referenznutzungsberechtigung fehlt. Erfahren Sie, wie Sie mit diesem Problem umgehen können.
Sie müssen die Datenanbieterrolle für eine Zusammenarbeit haben.
Datenangebote werden mit den folgenden Schritten zu einer Zusammenarbeit hinzugefügt:
Erstellen Sie eine Datenangebotsspezifikation für Ihre Daten.
Registriert das Datenangebot, indem
REGISTRY.REGISTER_DATA_OFFERINGaufgerufen wird, wodurch eine Datenangebots-ID zurückgegeben wird.Durch diesen Schritt wird das Datenangebot verfügbar, um mit jeder Zusammenarbeit verknüpft zu werden, auf die Sie zugreifen können. Sie können dieselbe Datenangebots-ID zur Freigabe eines Datenangebots für mehrere Kooperationen verwenden.
Der nächste Schritt hängt davon ab, ob die Zusammenarbeit erstellt wurde oder nicht:
Wenn die Zusammenarbeit noch nicht erstellt wurde, gibt der Datenanbieter die Datenangebots-ID an den Ersteller der Zusammenarbeit, damit sie zur Zusammenarbeitsdefinition hinzugefügt wird. Wenn ein Datenangebot zur Definition der Zusammenarbeit hinzugefügt wird, ist das Datenangebot für jeden in der Zusammenarbeit sichtbar, nachdem der Datenanbieter der Zusammenarbeit beigetreten ist.
Wenn die Zusammenarbeit bereits erstellt wurde, tritt der Datenanbieter der Zusammenarbeit bei und ruft
COLLABORATION.LINK_DATA_OFFERINGmit der Datenangebots-ID, dem Namen der Zusammenarbeit und den Personen, für die die Daten freigegeben werden können, auf. Nachdem ein Datenangebot von allen Benutzenden genehmigt wurde, kann es eine kurze Verzögerung geben, bevor das Datenangebot zur Nutzung zur Verfügung steht. Rufen Sieview_data_offeringsauf, wenn Sie sicherstellen möchten, dass die Daten für die Nutzung verfügbar sind.
Sie können Datenressourcen aus einer Zusammenarbeit entfernen, indem Sie
unlink_data_offeringaufrufen.
Jedes Datenangebot besteht aus einer oder mehreren Tabellen oder Ansichten. Der Zugriff auf einzelne Tabellen erfolgt mit der Syntax collaborator alias.data offering ID.dataset alias, wo die Datenangebots-ID eine Kombination aus dem vom Benutzenden bereitgestellten Namen und den Versionswerten ist. Der Alias ist eine einzelne Tabelle im Angebot. Betrachten Sie den Namen, die Version und den Alias als Bereichssystem, wenn Sie Ihre Datenangebote registrieren.
Sie könnten zum Beispiel das folgende Datenangebot mit Verkaufsdaten registrieren, wobei jede Tabelle spezifisch für einen US-Bundesstaat ist:
api_version: 2.0.0
spec_type: data_offering
version: v0
name: examplecorp_sales_by_state
datasets:
- alias: AL
data_object_fqn: mydb.mysch.al_data
- alias: NY
data_object_fqn: mydb.mysch.ny_data
- alias: CA
data_object_fqn: mydb.mysch.ca_data
Der Analyseausführende würde diese Tabellen dann als data offering id.AL, data offering id.NY`oder :samp:`data offering id.CA referenzieren.
Datenangebote sind in einer Zusammenarbeit erst sichtbar, wenn der Benutzende, der das Datenangebot registriert hat, der Zusammenarbeit beitritt.
Tipp
Wenn Sie nicht die OWNERSHIP für Daten haben, die Sie freigeben, erhalten Sie eine Fehlermeldung, wenn Sie versuchen, der Zusammenarbeit beizutreten oder Ihr Datenangebot zu verknüpfen. Die Fehlermeldung enthält Informationen zu einem SQL-Befehl, der von einem ACCOUNTADMIN ausgeführt werden muss, um den Datenzugriff auf die Zusammenarbeit zu gewähren. Nachdem der ACCOUNTADMIN den Befehl ausgeführt hat, können Sie der Zusammenarbeit beitreten. Weitere Informationen dazu finden Sie unter.
Wenn Sie eine Abfrage ausführen, übergeben die Analyseausführenden die Datenangebote nach ID an den source_tables-Parameter von COLLABORATION.RUN.
Um Ihre registrierten Datenangebote anzuzeigen, rufen Sie VIEW_REGISTERED_DATA_OFFERINGS auf.
Anwenden von Nutzungsrichtlinien auf Ihre Daten¶
Es gibt zwei Möglichkeiten, eine Snowflake-Spaltenrichtlinie, z. B. eine Verknüpfungs- oder Aggregationsrichtlinie, auf Ihre freigegebenen Daten anzuwenden:
Wenden Sie die Richtlinie auf die Quelldaten an. Alle Richtlinien, die auf die Quelldaten angewendet werden, werden in den Datasets durchgesetzt, die im Rahmen einer Zusammenarbeit offengelegt wurden. Stellen Sie sicher, dass Sie dem Benutzenden Ihre Richtlinie mitteilen.
Wenden Sie die Richtlinie auf das Datenangebot an, wenn Sie es in Freiform-Abfragen verwenden. Wenn Sie Freiform-Abfragen für Ihre Datenangebote zulassen, können Sie Spaltenrichtlinien angeben, um Freiform-Abfragen für Ihre Daten durchzusetzen. Geben Sie Spaltenrichtlinien für Freiform-Abfragen in der Spezifikation des Datenangebots an. Diese Richtlinien werden zusätzlich zu allen vorhandenen Snowflake-Richtlinien für Ihre Quelltabellen angewendet.
Anwenden der Richtlinie auf Ihre Quelldaten¶
Alle Snowflake-Richtlinien, die auf die Quelldaten angewendet werden, gelten auch für die Datenangebotsansicht in der Zusammenarbeit.
Wenn Sie Snowflake-Richtlinien auf Ihre Quelldaten anwenden, müssen Sie Ihre Teilnehmenden über diese Richtlinien informieren, damit sie nicht unwissentlich versuchen, eine Abfrage auszuführen, die für eine nicht verknüpfbare Spalte eine Verknüpfung vornimmt oder die Gruppierung nicht dort vornimmt, wo dies geschehen sollte. Sie können alle Snowflake-Richtlinien im description-Feld Ihres Datenangebots angeben.
Anwenden der Richtlinie auf das Datenangebot an (nur Nutzung von Freiform-Abfragen)¶
Sie können Snowflake-Richtlinien auf Freiformabfragen in Ihren freigegebenen Daten anwenden, ohne sie auf die Quelldaten anzuwenden. Diese Richtlinien werden auf Ihre Daten angewendet, wenn Sie zusätzlich zu den Snowflake-Richtlinien, die direkt auf die Quelltabelle angewendet werden, auf Ihre Daten zugreifen.
So fügen Sie Ihren Daten Freiform-SQL-Richtlinien zu:
Erstellen Sie einen Richtlinientyp, der von Collaboration Data Clean Rooms unterstützt wird.
Fügen Sie die folgenden Informationen zu Ihrer Datenangebotsdefinition hinzu:
Setzen Sie
allowed_analyses: template_and_freeform_sql.Fügen Sie den Abschnitt
freeform_sql_policieszur Definition des Datasets hinzu.Fügen Sie unter
freeform_sql_policiesdie entsprechenden Abschnitte für Richtlinientypen hinzu, wobei Sie die von Ihnen erstellten Snowflake-Richtlinien auflisten und angeben, auf welche Zusammenarbeitsspalten diese Richtlinien angewendet werden sollen.
Teilnehmende sehen die auf die Daten angewendeten Richtlinientypen, wenn sie COLLABORATION.VIEW_DATA_OFFERINGS aufrufen.
Sie können eine Richtlinie für mehrere Spalten in mehreren Tabellen wiederverwenden.
Beispiel:
CREATE OR REPLACE AGGREGATION POLICY my_db.public.my_agg_policy AS ()
RETURNS AGGREGATION_CONSTRAINT ->
AGGREGATION_CONSTRAINT(MIN_GROUP_SIZE => 5);
# Tell data clean rooms to set your aggregation policy on the hashed_email column of
# the data offering
api_version: 2.0.0
version: 1
name: my_favorite_dataset
datasets:
- alias: test_freeform_restricted_agg
data_object_fqn: samooha_provider_sample_database.audience_overlap.customers
allowed_analyses: template_and_freeform_sql
object_class: custom
freeform_sql_policies:
aggregation_policy:
name: my_db.public.my_agg_policy
entity_keys:
- hashed_email
...
Umbenennen der Quellspalte¶
Die Spaltennamen, die der Vorlage oder dem Freiform-SQL-Aufrufenden angezeigt werden, werden durch die Werte category und column_type festgelegt, die die Spalte in der Datenangebotsdefinition beschreiben. Das Umbenennen von Spalten erfolgt entsprechend dieser Rubrik:
Wenn
categoryfür die Spaltejoin_customoderpassthroughlautet, wird der ursprüngliche Spaltenname angezeigt.Wenn
categoryden Wertjoin_standardhat, wird die Spalte alscolumn_type-Wert umbenannt.Wenn
categoryden Werttimestamphat, wird die Spalte im Datenangebot intimestampumbenannt.
Beispiel: Wenn die Spalte in der Quelltabelle den Namen user_email_address hat, hängt die Offenlegung der Spalte in der Vorlage oder in Freiform-SQL davon ab, wie sie in der Definition des Datenangebots definiert ist:
Wenn die Spaltenkategorie
join_standardlautet undcolumn_typevorhanden ist:... Snippet from data offering yaml ... schema_and_template_policies: user_email_address: category: join_standard column_type: hashed_email_sha256
Dann wird der Wert
column_typein Abfragen und Vorlagen verwendet:SELECT HASHED_EMAIL_SHA256 FROM source_table[0];
Wenn die Spaltenkategorie
join_customlautet:... Snippet from data offering yaml ... schema_and_template_policies: user_email_address: category: join_custom column_type: hashed_email_sha256
Dann wird der ursprüngliche Quellspaltenname in Abfragen und Vorlagen verwendet:
-- column_type is ignored for join_custom columns. SELECT user_email_address FROM source_table[0];
Einer Zusammenarbeit beitreten¶
Sie müssen einer Zusammenarbeit beitreten, damit alle Ressourcen, die Sie zu einer Zusammenarbeit beigesteuert haben, in der Zusammenarbeit verfügbar sind, oder um eine Analyse in der Zusammenarbeit ausführen zu können.
Der Ersteller wird beim Aufrufen von INITIALIZE automatisch verknüpft (es sei denn,``auto_join_warehouse`` wird bereitgestellt). Wenn die automatische Verknüpfung deaktiviert ist, ruft der Ersteller JOIN separat auf.
Nicht Erstellende rufen REVIEW und dann JOIN auf.
Wichtig
Wenn sich Ihr Konto in einer anderen Cloud-Hosting-Region befindet als die des Eigentümers der Zusammenarbeit:
Die
REVIEW-Anforderung schlägt fehl, wenn die Cloud-übergreifende automatische Ausführung für Ihr Konto nicht aktiviert ist.REVIEWlöst zusätzliche asynchrone Einrichtungsschritte aus. Rufen SieREVIEWwiederholt auf, bis eine Erfolgreich-Antwort zurückgegeben wird, die anzeigt, dass das Setup abgeschlossen ist.
Das Verknüpfen ist ein asynchroner Prozess. Rufen Sie GET_STATUS auf, um zu sehen, wann der Status als JOINED aufgeführt ist.
Analyse ausführen¶
Sie können Analysen entweder durchführen, indem Sie eine Vorlage in der Abfrage ausführen oder indem Sie eine Freiform-SQL-Abfrage für die Zusammenarbeitsdaten ausführen. Sie müssen ein benannter Analyseausführender in einer Zusammenarbeit sein, um eine Analyse durchführen zu können. Die Zusammenarbeitsspezifikation bestimmt, ob Sie eine Vorlage ausführen, Ergebnisse aktivieren oder Freiform-SQL-Abfragen ausführen können. Ihre Möglichkeiten sowie die Daten und Vorlagen, die Sie verwenden können, sind in der Spezifikation für die Zusammenarbeit beschrieben.
Der Analyseausführende trägt die Kosten für die Durchführung einer Analyse.
Ausführen einer Analyse aus einer Vorlage¶
Um eine Analyse aus einer Vorlage auszuführen, zeigen Sie die Liste der Vorlagen am, die Sie ausführen können, zeigen Sie die Liste der Datenangebote an, die Sie verwenden können, und rufen Sie dann COLLABORATION.RUN mit Ihren Werten auf, entweder als einzelne Parameter oder als Analysespezifikation im YAML-Format:
-- See which data offerings are available.
CALL SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.COLLABORATION.VIEW_DATA_OFFERINGS($collaboration_name);
-- See which templates you can run.
CALL SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.COLLABORATION.VIEW_TEMPLATES($collaboration_name);
-- Pass in the arguments in analysis YAML format.
CALL SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.COLLABORATION.RUN(
$collaboration_name,
$$
api_version: 2.0.0
spec_type: analysis
name: My_analysis
description: Sales results Q2 2025
template: sales_join_template
template_configuration:
view_mappings:
source_tables:
- user1_alias.data_offering_v1.table1
- user2_alias.another_data_offering_v1.table_2
arguments:
conv_purchase_id: PURCHASE_ID
conv_purchase_amount: PURCHASE_AMOUNT
publisher_impression_id: IMPRESSION_ID
publisher_campaign_name: CAMPAIGN_NAME
publisher_device_type: DEVICE_TYPE
$$ );
Aktivieren und Ausführen von Freiform-SQL-Abfragen für Ihre Daten¶
Ein Datenanbieter kann ermöglichen, dass Analyseausführende SQL-Abfragen für die Datenangebote der Zusammenarbeit ausführen können. Sie müssen Mitglied einer Zusammenarbeit sein und über die Rolle des Analyseausführenden mit SQL-Freiformberechtigung für ein Datenangebot verfügen, um SQL-Freiformabfragen für diese Daten durchzuführen.
Datenanbieterschritte¶
Damit Teilnehmende ein Dataset von der Befehlszeile aus abfragen können, legen Sie allowed_analyses: template_and_freeform_sql in Ihrer Dataset-Beschreibung fest. Benutzende, die der Zusammenarbeit beitreten, können Freiform-SQL-Abfragen für die Datasets ausführen, auf die sie zugreifen können.
Die folgenden YAML definiert ein Dataset, das Freiformabfragen erlaubt:
api_version: 2.0.0
version: 1
name: my_favorite_dataset
datasets:
- alias: test_freeform_restricted_agg
data_object_fqn: samooha_provider_sample_database.audience_overlap.customers
object_class: custom
allowed_analyses: template_and_freeform_sql
...
Schritte des Analyseausführenden¶
Um zu sehen, welche Datasets Freiformabfragen unterstützen, führt der Analyseausführende nach dem Beitritt zu einer Zusammenarbeit
COLLABORATION.VIEW_DATA_OFFERINGSaus. Die Spalte FREEFORM_SQL_VIEW_NAME in den Ergebnissen zeigt an, auf welche Tabellen mit Freiform-SQL zugegriffen werden kann, und welcher Tabellenname in der SQL-Abfrage verwendet wird.CALL SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.COLLABORATION.VIEW_DATA_OFFERINGS($collaboration_name);
+-------------------------------+------------------------+------------------------------+------------------------------+---------------------------------------+ | template_view_name | template_join_columns | analysis_allowed_columns | activation_allowed_columns | freeform_sql_view_name | +-------------------------------+------------------------+------------------------------+------------------------------+---------------------------------------+ | useralias.data_offering_alias | ip_address | email, name, age | SSN | alias_name.test_data_offering_v0.customers| +-------------------------------+------------------------+------------------------------+------------------------------+---------------------------------------+
Der Teilnehmende kann dann die in der Spalte FREEFORM_SQL_VIEW_NAME aufgeführte Tabelle mit Freiform-SQL-Abfragen abfragen:
SELECT * FROM alias_name.test_data_offering_v0.customers;
Alle auf die Tabelle angewendeten Richtlinien werden durchgesetzt.
Ausführen einer Analyse mit Ihren eigenen Daten, wenn Sie die Standard Edition verwenden¶
Wenn Sie die Standard Edition verwenden, können Sie eine Analyse mit der Standardmethode ausführen. Sie können Ihre Daten jedoch nicht zur Beschreibung der Zusammenarbeit hinzufügen und sie für andere Benutzende freigeben.
So verwenden Sie als Benutzender der Standard Edition Ihre eigenen Daten in einer Zusammenarbeit:
Um Ihr Datenangebot zu registrieren, rufen Sie
REGISTRY.REGISTER_DATA_OFFERINGauf. Sie müssen Spaltennamen angeben.Rufen Sie
COLLABORATION.LINK_LOCAL_DATA_OFFERINGauf.Nur Sie können Ihr Angebot sehen, wenn Sie
COLLABORATION.VIEW_DATA_OFFERINGSaufrufen. Für andere Teilnehmende wird Ihre Datenquelle nicht aufgelistet.Verwenden Sie die ID des Datenangebots, wenn Sie
COLLABORATION.RUNaufrufen, entweder im Parameterlocal_template_view_namesoder im Feldlocal_view_mappings.my_tables, wenn Sie eine Analyse-YAML übergeben.local_template_view_namesundlocal_view_mappings.my_tablesfüllen den Parametermy_tablein der Vorlage aus.
Das folgende Beispiel zeigt, wie Sie eine Vorlage unter Verwendung der Ausführungsprozedurversion mit dem YAML-Format ausführen. Dieses Beispiel schließt das Feld my_tables ein, das durch Aufrufen von LINK_LOCAL_DATA_OFFERING ausgefüllt wird.
-- See what data offerings are available. Your own local data will be listed here as well.
CALL SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.COLLABORATION.VIEW_DATA_OFFERINGS($collaboration_name);
-- Pass in the arguments in analysis YAML format.
CALL SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.COLLABORATION.RUN(
$collaboration_name,
$$
api_version: 2.0.0
spec_type: analysis
name: my_analysis
description: Cross-purchase results for Q4 2025
template: mytemplate_v1
template_configuration:
view_mappings:
source_tables:
- ADVERTISER1.ADVERTISER_DATA_V1.CUSTOMERS
- PUBLISHER.ADVERTISER_DATA_V1.CUSTOMERS
local_view_mappings:
my_tables:
- PARTNER.MY_DATA_V1.MY_CUSTOMERS # Populate my_table array with my own table.
arguments: # Template arguments, as name: value pairs
conv_purchase_id: PURCHASE_ID
conv_purchase_amount: PURCHASE_AMOUNT
publisher_impression_id: IMPRESSION_ID
publisher_campaign_name: CAMPAIGN_NAME
publisher_device_type: DEVICE_TYPE
$$ );
Abfrageergebnisse aktivieren¶
Bemerkung
Wenn Sie die Rolle SAMOOHA_APP_ROLE nicht verwenden, d. h. Sie verwenden eine Rolle, die von Zugriffsverwaltungsverfahren verwaltet wird, müssen Sie über die Berechtigung REGISTER DATA OFFERING verfügen, um einer Zusammenarbeit beizutreten, bei der Sie Analyseausführender sind, und bei der die Zusammenarbeitsspezifikation das Feld activation_destinations beinhaltet.
So aktivieren Sie die Ergebnisse einer Abfrage:
Stellen Sie sicher, dass für alle Aktivierungsspalten die folgenden Eigenschaften in der entsprechenden Spezifikation festgelegt sind:
Die Datenangebotsspezifikation für die Tabelle mit der aktivierten Spalte muss
activation_allowed: TRUEfür diese Spalte festlegen:api_version: 2.0.0 spec_type: data_offering name: 2025_orders version: 2025_01_01_v1 description: Activating Cleveland sales results for 2025 datasets: - alias: customers data_object_fqn: db1.schema1.orders allowed_analyses: template_only object_class: custom schema_and_template_policies: email: category: join_standard column_type: hashed_email_sha256 activation_allowed: TRUE purchase_amount: category: passthrough activation_allowed: TRUE
Die Zusammenarbeitsspezifikation muss
activation_destinations-Werte für den Analyseausführenden bereitstellen. Die Datenangebotsspezifikation beschränkt die Aktivierung auf bestimmte Analyseausführende und Vorlagen.api_version: 2.0.0 spec_type: collaboration name: simple_activation_collaboration description: Demonstrates a basic activation collaborator_identifier_aliases: advertiser_1: some_complex_identifier publisher_1: another_complex_identifier owner: publisher_1 analysis_runners: advertiser_1: data_providers: advertiser_1: data_offerings: - id: customer_list publisher_1: data_offerings: - id: user1.2025_orders.sales templates: - id: activation_template_v0 activation_destinations: snowflake_collaborators: - publisher_1 ....
Die Analysespezifikation muss einen
activation-Abschnitt mit den Wertensnowflake_collaboratorundsegment_nameeinschließen und eine Aktivierungsvorlage aufrufen, die die Zusammenarbeitsrichtlinien für kundenspezifische Vorlagen befolgt. Sie können die Ergebnisse nicht aktivieren, indem Sie eine Standardanalysevorlage ausführen.api_version: 2.0.0 spec_type: analysis name: my_analysis description: Description of the analysis template: my_activation_template template_configuration: view_mappings: source_tables: - alias1.schema1.table1 - alias2.schema2.table2 arguments: join_column: ip_address advertiser_activation_column: purchase_amount publisher_activation_column: device_type activation: snowflake_collaborator: publisher_1 segment_name: q1_2025
Bemerkung
Für jede Spalte, die in der Vorlage mit angewendetem
activation_policy-Filter verwendet wird, muss deractivation_allowed-Wert in der Datenangebotsspezifikation auf TRUE festgelegt sein. Das folgende Beispiel zeigt eine Vorlage, bei der die Aktivierungsrichtlinie auf zwei Spalten angewendet wird, die vom Analyseausführenden bereitgestellt werden:BEGIN CREATE OR REPLACE TABLE cleanroom.activation_data_analysis_results AS SELECT count(*) AS ITEM_COUNT, c.status, c.age_band FROM IDENTIFIER({{ my_table[0] }}) AS c JOIN IDENTIFIER({{ source_table[0] }}) AS p ON {{ c_join_col | sqlsafe | activation_policy }} = {{ p_join_col | sqlsafe | activation_policy }} GROUP BY c.status, c.age_band ORDER BY c.age_band; RETURN 'analysis_results'; END;
Der Analyseausführende ruft
RUNauf, um die Analyse auszuführen.Wenn Sie die Aktivierung für sich selbst vornehmen, sind die Ergebnisse sofort im Konto des Aufrufenden in der Tabelle
consumers_database.ACTIVATION_RESULTS.CONSUMER_DIRECT_ACTIVATION_SUMMARYverfügbar. Wie Sie die Abfrageergebnisse anzeigen können, erfahren Sie im letzten Schritt.Bei Aktivierung für einen anderen Teilnehmenden:
Der Teilnehmende ruft
VIEW_ACTIVATIONSauf, bis der Status SHARED zurückgegeben wird. Die Aktivierung für ein anderes Konto kann bei großen Resultsets einige Zeit in Anspruch nehmen, da die Daten an das Konto des Teilnehmenden übertragen und entschlüsselt werden müssen.Wenn der Status der Aktivierung SHARED lautet, ruft der Teilnehmende
PROCESS_ACTIVATIONauf, um die Ergebnisse an sein Konto zu senden. Die Antwort aufPROCESS_ACTIVATIONschließt die Tabellen- und Segmentnamen mit ein. Hierdurch wird der Aktivierungsstatus auf PROCESSED festgelegt.
Um Abfrageergebnisse abzurufen, führen Sie den folgenden SQL-Befehl aus, und geben Sie den Namen Ihrer Ergebnistabelle und optional einen Segmentnamen zum Filtern der Ergebnisse an:
SELECT * FROM <results_table_name> [WHERE segment = <segment_name>];
Zusammenarbeit verlassen oder löschen¶
Nicht-Eigentümer verlassen eine Zusammenarbeit, indem sie
COLLABORATION.LEAVEaufrufen. Alle von ihnen bereitgestellten Datenangebote werden aus der Zusammenarbeit entfernt. Sie können einer Zusammenarbeit nicht wieder beitreten, nachdem Sie sie verlassen haben.Zusammenarbeitseigentümer können eine Zusammenarbeit nicht verlassen. Die Eigentümerschaft kann nicht übertragen werden. Ein Eigentümer einer Zusammenarbeit kann eine Zusammenarbeit für alle Teilnehmenden löschen, indem er
COLLABORATION.TEARDOWNaufruft.
Beide Prozesse sind asynchron. Sie müssen GET_STATUS aufrufen, um den Status zu überwachen, und LEAVE oder TEARDOWN erneut aufrufen, wenn GET_STATUS den Status als LOCAL_DROP_PENDING anzeigt.
Cloud-übergreifende automatische Ausführung aktivieren¶
Wenn Sie sich nicht in der gleichen Cloud-Host-Region befinden wie der Eigentümer der Zusammenarbeit, muss die Cloud-übergreifende automatische Ausführung (LAF) für Ihr Konto aktiviert sein, damit Sie der Zusammenarbeit beitreten können. Wenn Sie versuchen, eine Zusammenarbeit in einer anderen Cloud-Region zu überprüfen und LAF nicht für Ihr Konto aktiviert ist oder Sie nicht über die richtigen Berechtigungen verfügen, erhalten Sie beim Aufruf von REVIEW für die Zusammenarbeit eine Fehlermeldung.
Bemerkung
Wenn die Cloud-übergreifende automatische Ausführung in einer Zusammenarbeit verwendet wird:
Die Daten werden im Konto jedes Teilnehmenden repliziert, der auf diese Daten zugreifen kann.
Die Daten werden auch in die Region des Eigentümers repliziert, unabhängig davon, ob dieser auf das Datenangebot zugreifen kann oder nicht. Dessen Möglichkeit, auf die Daten zuzugreifen, wird jedoch durch die Freigaberegeln des Datenangebots bestimmt.
Sie können Ihre Cloud-Hosting-Region ermitteln, indem Sie SELECT CURRENT_REGION(); ausführen.
So aktivieren Sie die Cloud-übergreifende automatische Ausführung für Ihr Konto:
Ein Organisationsadministrator muss LAF für Ihr Konto aktivieren, indem er SYSTEM$ENABLE_GLOBAL_DATA_SHARING_FOR_ACCOUNT aufruft. Weitere Informationen dazu finden Sie unter Berechtigungen für automatische Ausführung verwalten.
Damit Sie die richtigen Berechtigungen zum Ansehen einer LAF-Zusammenarbeit haben oder um ihr beitreten zu können, verwenden Sie die SAMOOHA_APP_ROLE oder eine Rolle, die über die Berechtigung MANAGE LISTING AUTO FULFILLMENT auf Kontoebene verfügt.
Teilnehmende, die sich in einer anderen Cloud-Hosting-Region befinden, erfahren zusätzliche Datenverzögerung aufgrund der Replikationshäufigkeit. Die Replikationshäufigkeit ist in einem Collaboration Data Clean Room noch nicht konfigurierbar.
Beispiel: Zusammenarbeit zwischen zwei Parteien¶
Das folgende Beispiel zeigt eine Zusammenarbeit mit zwei Parteien, wobei eine Partei (namens „alice“) die Erstellende der Zusammenarbeit, ein Datenanbieter für sich selbst und „bob“ sowie eine Analyseausführende ist. Die andere Partei (mit dem Namen „bob“) ist ein Datenanbieter für sich selbst und „alice“ sowie ein Analyseausführender.
Das Beispiel veranschaulicht die folgenden Aktionen:
Erstellen einer Zusammenarbeit
Registrieren von Vorlagen und Datenangeboten
Hinzufügen einer Vorlage und eines Datenangebots zum Zeitpunkt der Erstellung der Zusammenarbeit
Beitreten zu einer Zusammenarbeit
Hinzufügen von Vorlagen und Ressourcen zu einer vorhandenen Zusammenarbeit
Ausführen einer Analyse
Um dieses Beispiel auszuführen, müssen Sie über zwei separate Konten mit installierten Snowflake Data Clean Rooms verfügen.
Sie können die Dateien entweder herunterladen und in Ihr Snowflake-Konto hochladen oder den Beispielcode kopieren und in die Arbeitsblätter von zwei separaten Konten einfügen, indem Sie die Snowsight verwenden.
Laden Sie die SQL-Quelldateien herunter, und laden Sie diese dann in zwei separate Konten hoch, für die Snowflake Data Clean Rooms installiert sind:
-- Basic Snowflake Collaboration Data Clean Rooms example.
-- This file represents user "alice" in a two-collaborator clean room example.
-- Run this worksheet in a Snowflake account with access to the latest version of
-- Snowflake Data Clean Rooms.
-- This file demonstrates the following actions:
-- * How to register a template and a dataset
-- * How to create a collaboration with pre-registered resources.
-- * How to add a template to a collaboration that has already been created, and the
-- template approval flow.
-- * How to run an analysis.
-- This scenario involves two collaborators: bob and alice
-- bob and alice each submits one data source
-- bob and alice are data providers for themselves and each other
-- bob submits one template that only alice can use
-- alice submits one template that they can both use, and one template that only alice can use
-- For more information, read docs.snowflake.com/user-guide/cleanrooms/v2/using
USE WAREHOUSE APP_WH;
USE ROLE SAMOOHA_APP_ROLE;
-- Secondary roles must be disabled to call link_data_offerings.
USE SECONDARY ROLES NONE;
CREATE DATABASE IF NOT EXISTS ALICE_DB;
CREATE SCHEMA IF NOT EXISTS ALICE_DB.ALICE_SCH;
CREATE OR REPLACE TABLE ALICE_DB.ALICE_SCH.ALICE_DATA AS SELECT * FROM samooha_sample_database.demo.customers LIMIT 100;
-- Register a data offering to use in the initial collaboration definition.
CALL samooha_by_snowflake_local_db.registry.register_data_offering(
$$
api_version: 2.0.0
spec_type: data_offering
version: v1
name: <alice data offering name>
datasets:
- alias: customer_list
data_object_fqn: ALICE_DB.ALICE_SCH.ALICE_DATA
object_class: custom
allowed_analyses: template_only
schema_and_template_policies:
hashed_email:
category: join_standard
column_type: hashed_email_b64_encoded
status:
category: passthrough
$$
);
-- Save the ID of the registered data offering.
SET alice_data_offering_id = '<data_offering_id>';
CALL samooha_by_snowflake_local_db.registry.view_registered_data_offerings();
-- Register a template to use in the initial collaboration definition.
CALL samooha_by_snowflake_local_db.registry.register_template(
$$
api_version: 2.0.0
spec_type: template
name: alice_only_template
version: <version_number>
type: sql_analysis
description: A test template
template:
SELECT t1.status, COUNT(*)
FROM IDENTIFIER( {{ source_table[0] }} ) AS t1
JOIN IDENTIFIER( {{ source_table[1] }} ) AS t2
ON t1.hashed_email_b64_encoded = t2.hashed_email_b64_encoded
GROUP BY t1.status;
$$);
-- Save the ID of the registered template.
SET my_template_id = '<alice_only_template_id>';
CALL samooha_by_snowflake_local_db.registry.view_registered_templates();
-- Create a collaboration with the previously registered template and data offering.
-- The collaboration supports two collaborators, with aliases alice (this account) and bob.
-- Owner: alice
-- Analysis runners:
-- * alice, using her own data, and the template you created and registered earlier.
-- * bob, with no listed templates or data.
-- Data providers:
-- * alice and bob, for alice
-- * alice and bob, for bob
-- Resources added: The template and data offering alice registered earlier.
-- You will add more templates and data offerings to these users later. Only these
-- users are invited to the collaboration, and no additional users can be added later.
-- Replace the <...> placeholders with the appropriate values.
-- Account data sharing IDs are -- SELECT CURRENT_ORGANIZATION_NAME() || '.' || CURRENT_ACCOUNT_NAME();
CALL samooha_by_snowflake_local_db.collaboration.initialize(
$$
api_version: 2.0.0
spec_type: collaboration
name: my_first_collaboration_1_0
owner: alice
collaborator_identifier_aliases:
alice: <my account data sharing ID>
bob: <bob account data sharing ID>
analysis_runners:
bob:
data_providers:
alice:
data_offerings:
- id: <alice data offering ID>
bob:
data_offerings: []
alice:
data_providers:
alice:
data_offerings:
- id: <alice data offering ID>
bob:
data_offerings: []
templates:
- id: <alice only template ID>
$$,
'APP_WH'
);
SET collaboration_name = '<collaboration_name>';
-- INITIALIZE automatically joins the owner. Check status until JOINED.
CALL samooha_by_snowflake_local_db.collaboration.get_status($collaboration_name);
-- Collaboration is visible here when the owner has joined.
CALL samooha_by_snowflake_local_db.collaboration.view_collaborations();
-- Auto-approve any template requests from other collaborators that affect you.
CALL samooha_by_snowflake_local_db.collaboration.enable_template_auto_approval(
$collaboration_name
);
-- SWITCH TO collaborator to join the collaboration and add a template
-- The template will be auto-approved.
-- Create a new template.
CALL samooha_by_snowflake_local_db.registry.register_template(
$$
api_version: 2.0.0
spec_type: template
name: both_use_template
version: 2026_01_12_V1
type: sql_analysis
description: test_description
template:
select * from identifier({{ source_table[0] }}) limit 5;
$$
);
SET both_use_template = '<template ID>';
-- Ask to add the template to the collaboration. You must ask bob, because you're
-- including bob in the sharing list. When you share a template with yourself,
-- you auto-approve it.
CALL samooha_by_snowflake_local_db.collaboration.add_template_request(
$collaboration_name,
$both_use_template,
['alice', 'bob'] -- List of collaborators who can use this template.
);
-- SWITCH TO bob to approve the request. Request wasn't approved automatically
-- because bob didn't enable auto-approve.
-- See if bob approved the request.
CALL samooha_by_snowflake_local_db.collaboration.view_update_requests($collaboration_name);
-- See what the collaboration spec looks like now, after all the resource updates.
-- Collaboration updates are asynchronous, so if all changes that you made aren't present,
-- wait a minute or two, and then try again.
CALL samooha_by_snowflake_local_db.collaboration.view_collaborations() ->>
SELECT "COLLABORATION_SPEC" FROM $1 WHERE "SOURCE_NAME" = $collaboration_name;
-- SWITCH TO bob to add a data offering.
-- Run an analysis.
-- Tables are scoped as <data_offering_id>.<alias>.
CALL samooha_by_snowflake_local_db.collaboration.view_data_offerings(
$collaboration_name
);
SET $bob_data_offering = '<bob data offering ID>';
CALL samooha_by_snowflake_local_db.collaboration.view_templates(
$collaboration_name
);
-- Run bob's template.
-- Replace the placeholders with your variables.
CALL samooha_by_snowflake_local_db.collaboration.run(
$collaboration_name,
$$
api_version: 2.0.0
spec_type: analysis
description: <optional description of the analysis>
template: '<alice_only_template>'
template_configuration:
view_mappings:
source_tables:
- '<alice_data_offering_view_name>'
- '<bob_data_offering_view_name>'
$$
);
-- Multi-step cleanup process to delete the collaborations.
-- Doesn't delete registered resources.
CALL samooha_by_snowflake_local_db.collaboration.teardown($collaboration_name);
CALL samooha_by_snowflake_local_db.collaboration.get_status($collaboration_name);
-- When get_status reports LOCAL_DROP_PENDING, call teardown again.
CALL samooha_by_snowflake_local_db.collaboration.teardown($collaboration_name);
DROP DATABASE ALICE_DB;
-- Basic Snowflake Collaboration Data Clean Rooms example.
-- This file represents user "bob" in a two-collaborator clean room example.
-- Run this worksheet in a Snowflake account with access to the latest version of
-- Snowflake Data Clean Rooms.
-- This file demonstrates the following actions:
-- * Joining a collaboration
-- * Registering and adding a template and a data offering to an existing collaboration.
-- * Running an analysis.
-- For more information, read docs.snowflake.com/user-guide/cleanrooms/v2/using
USE WAREHOUSE APP_WH;
USE ROLE SAMOOHA_APP_ROLE;
-- Secondary roles can't be active when calling join or link_data_offering.
USE SECONDARY ROLES NONE;
-- Create sample data.
CREATE DATABASE IF NOT EXISTS BOB_DB;
CREATE SCHEMA IF NOT EXISTS BOB_DB.BOB_SCH;
CREATE OR REPLACE TABLE BOB_DB.BOB_SCH.BOB_DATA AS SELECT * FROM samooha_sample_database.demo.customers_2 LIMIT 100;
-- See which collaborations you are invited to, or have joined.
CALL samooha_by_snowflake_local_db.collaboration.view_collaborations();
-- Use SOURCE_NAME column value from the response to view_collaborations().
SET collaboration_name = '<collaboration name>';
-- Use OWNER_ACCOUNT column value from the response to view_collaborations().
SET collaborator_data_sharing_id = '<collaborator_id>';
-- Review and join the collaboration.
-- Joining is asynchronous, so you must call get_status until the status is JOINED before
-- you can perform actions on the collaboration.
CALL samooha_by_snowflake_local_db.collaboration.review($collaboration_name, $collaborator_data_sharing_id);
CALL samooha_by_snowflake_local_db.collaboration.join($collaboration_name);
CALL samooha_by_snowflake_local_db.collaboration.get_status($collaboration_name);
-- Demonstrate the auto-approve flow.
-- Alice enabled auto-approve on her account, so this request will
-- be auto-approved, and the template will be added immediately.
-- Create a template.
CALL samooha_by_snowflake_local_db.registry.register_template(
$$
api_version: 2.0.0
spec_type: template
name: auto_approve_template
version: V1
type: sql_analysis
description: test_description
template:
SELECT * FROM IDENTIFIER({{ SOURCE_TABLE[0] }}) LIMIT 10;
$$
);
SET auto_approve_template = '<template_id>';
CALL samooha_by_snowflake_local_db.collaboration.add_template_request($collaboration_name, $auto_approve_template, ['alice', 'bob']);
CALL samooha_by_snowflake_local_db.collaboration.view_update_requests($collaboration_name);
-- SWITCH TO other account and request adding a template, and then come back to approve the request.
-- You haven't enabled template auto-approve, so you must approve the request before the template is added.
CALL samooha_by_snowflake_local_db.collaboration.view_update_requests($collaboration_name);
CALL samooha_by_snowflake_local_db.collaboration.approve_update_request(
$collaboration_name,
'<request_ID>'
);
-- SWITCH TO bob to see the request status.
-- Register your own data offering.
CALL samooha_by_snowflake_local_db.registry.register_data_offering(
$$
api_version: 2.0.0
spec_type: data_offering
version: v3
name: bob_data
datasets:
- alias: my_customer_list
data_object_fqn: BOB_DB.BOB_SCH.BOB_DATA
object_class: custom
allowed_analyses: template_only
schema_and_template_policies:
hashed_email:
category: join_standard
column_type: hashed_email_b64_encoded
status:
category: passthrough
$$
);
SET my_data_id = '<data offering id>';
-- Share the data offering with yourself and alice.
CALL samooha_by_snowflake_local_db.collaboration.link_data_offering(
$collaboration_name,
$my_data_id,
['alice', 'bob']
);
CALL samooha_by_snowflake_local_db.collaboration.view_data_offerings(
$collaboration_name
);
-- View templates that you can use in this collaboration. You can run only templates that list you in the
-- SHARED_WITH column.
CALL samooha_by_snowflake_local_db.collaboration.view_templates($collaboration_name);
-- Run an analysis with your template.
CALL samooha_by_snowflake_local_db.collaboration.run(
$collaboration_name,
$$
api_version: 2.0.0
spec_type: analysis
description: <optional description of the analysis>
template: '<both_use_template>'
template_configuration:
view_mappings:
source_tables:
- '<my_data_offering_view_name>'
- '<bob_data_offering_view_name>'
$$
);
-- SWITCH TO other account to run an analysis.
-- Try running an analysis using alice-only template.
-- This will fail, because you aren't listed as an analysis
-- runner for this template.
CALL samooha_by_snowflake_local_db.collaboration.run(
$collaboration_name,
$$
api_version: 2.0.0
spec_type: analysis
description: <optional description of the analysis>
template: '<alice_only_template>'
template_configuration:
view_mappings:
source_tables:
- '<my_data_offering_view_name>'
- '<bob_data_offering_view_name>'
$$
);
-- Clean up resources.
DROP DATABASE BOB_DB;