Cette rubrique présente les étapes à suivre pour créer une collaboration multipartite de base. Elle montre comment enregistrer des modèles et des offres de données, comment ajouter des données à la version initiale d’une collaboration, et comment les collaborateurs peuvent ajouter des ressources après la création de la collaboration. Elle montre également comment exécuter des requêtes en utilisant des modèles et des ressources de données dans la collaboration.
Workflow de collaboration de base dans les salles blanches¶
Voici un scénario de collaboration de salle blanche multipartite de base :
Le propriétaire de la collaboration enregistre éventuellement les modèles ou les offres de données qu’il souhaite voir apparaître dans la configuration initiale de la collaboration.
Le propriétaire demande éventuellement à tous les collaborateurs prévus d’enregistrer les modèles ou les offres de données qu’ils souhaitent voir apparaître dans la configuration initiale de la collaboration. Les collaborateurs donnent alors les IDs de ressource des éléments au propriétaire.
Ensuite, le propriétaire crée une collaboration. La collaboration est définie par une spécification YAML de collaboration qui répertorie les collaborateurs, leurs rôles et toutes les ressources qui doivent être présentes dans la version initiale de la collaboration.
Lorsqu’une collaboration est créée, l’ensemble des collaborateurs et de leurs rôles de collaboration est fixe.
Des ressources supplémentaires peuvent être ajoutées par les collaborateurs après la création de la collaboration, si leur rôle de collaboration le permet.
Si votre collaboration partage des données avec des utilisateurs dans d’autres régions d’hébergement Cloud, la personne à l’origine du partage doit :ref:` activer l’exécution automatique inter-Cloud sur leur compte <label-dcr_collab_enabling_laf>`.
Les collaborateurs peuvent alors éventuellement lier des ressources supplémentaires à la collaboration, comme les modèles et les offres de données, en fonction de leurs rôles de collaboration. Des ressources supplémentaires peuvent être ajoutées à une collaboration à tout moment.
Si vous souhaitez mettre des ressources à disposition dans une collaboration dès sa création, le propriétaire de la collaboration enregistre et relie ces ressources avant de créer la collaboration, et inclut les IDs des ressources dans la spécification de collaboration.
Si le propriétaire prévoit d’utiliser des ressources provenant de collaborateurs, il peut également inviter ces utilisateurs à enregistrer leurs ressources et à donner au propriétaire les IDs de ressources à inclure dans la spécification de collaboration. Le propriétaire indique également dans la spécification de collaboration où aucune ressource n’est liée pour le moment, mais peut être liée à l’avenir.
Le propriétaire appelle alors INITIALIZE pour commencer à créer la collaboration. Par défaut, INITIALIZE joint également automatiquement le propriétaire à la collaboration. Il s’agit d’un processus asynchrone ; le propriétaire doit donc appeler GET_STATUS jusqu’à ce que le statut soit JOINED.
L’extrait suivant montre la création et la jonction d’une collaboration.
1CALLSAMOOHA_BY_SNOWFLAKE_LOCAL_DB.COLLABORATION.INITIALIZE( 2$$ 3api_version:2.0.0 4spec_type:collaboration 5name:my_first_collaboration 6owner:alice 7collaborator_identifier_aliases: 8alice:example_com.acct_abc 9bob:another_example.acct_xyz10analysis_runners:11bob:12data_providers:13alice:14data_offerings:[]-- alice has not provided data to bob, but can do so in the future.15bob:16data_offerings:[customers_v1]-- bob has registered a data offering and made it available to himself.17templates:[]-- No templates available yet for bob.18alice:19data_providers:20alice:21data_offerings:[]22bob:23data_offerings:[]24templates:[]25 $$,26'APP_WH'-- Use this warehouse for initialization.27);-- XSMALL or SMALL warehouses are recommended for initialization.28SETcollaboration_name='my_first_collaboration';2930-- INITIALIZE automatically joins the owner. Check status until JOINED.31CALLSAMOOHA_BY_SNOWFLAKE_LOCAL_DB.COLLABORATION.GET_STATUS($collaboration_name);3233-- Collaboration is visible here when it's joined.34CALLSAMOOHA_BY_SNOWFLAKE_LOCAL_DB.COLLABORATION.VIEW_COLLABORATIONS();
Notes sur le script :
La collaboration est composée de deux collaborateurs, avec les alias alice et``bob``. Vous pouvez utiliser un ID de partage de données complet partout où vous utilisez un alias, mais cela est beaucoup moins convivial.
alice est le propriétaire.
alice et bob sont des exécutants d’analyses.
alice et bob sont des fournisseurs de données les uns pour les autres.
Si vous êtes un fournisseur de données, vous devez inclure le champ data_offerings. Ce champ peut être rempli ou vide, indiquant qu’il n’existe pas d’offre de données pour le moment, mais qu’elles peuvent être ajoutées ultérieurement.
alice ne fournit pas de données à bob ou lui-même, mais peut le faire plus tard (lignes 14, 22).
bob a déjà enregistré une offre de données et se l’est fournie dans la collaboration initiale (ligne 16).
bob ne fournit pas de données à alice, mais peut le faire plus tard (ligne 24).
Ni alice ni bob ne dispose encore de modèles, mais ils peuvent être attribués ultérieurement (lignes 18, 25). Notez que le champ templates est facultatif pour un exécutant d’analyse. Si vous omettez ce champ lors de l’initialisation, les collaborateurs peuvent toujours affecter ultérieurement des modèles à cet exécutant d’analyse.
Les collaborateurs peuvent lier des ressources dans une collaboration ou supprimer les ressources qu’ils ont liées à la collaboration, en fonction de leur rôle de collaboration. Il y a deux étapes pour lier une ressource à une collaboration :
Le propriétaire de la ressource crée une spécification de définition des ressources pour la ressource et l’utilise pour enregistrer la ressource dans son compte. Vous pouvez enregistrer la ressource dans le registre par défaut de votre compte, ou utiliser un registre personnalisé.
Un collaborateur lie la ressource à une collaboration. Les ressources peuvent être liées à une collaboration lors de la création de la collaboration, via le codage en dur de l’ID de la ressource dans la définition YAML utilisée pour créer la collaboration, ou après la création et la jointure de la collaboration, en appelant la procédure appropriée pour lier la ressource à la collaboration.
Une fois que la ressource est liée, elle peut être utilisée par les collaborateurs désignés. Certains types de ressources, tels que les modèles, peuvent être liés par n’importe quel collaborateur ; d’autres ressources, telles que les offres de données, ne peuvent être liées que par des utilisateurs ayant un rôle de collaboration de fournisseur de données. Toutefois, notez que vous devez adhérer à une collaboration avant que les ressources que vous avez apportées ne deviennent disponibles pour la collaboration.
Les ressources ne sont disponibles que pour les collaborateurs désignés par la spécification de collaboration.
Note
Les mises à jour d’une collaboration existante, telles que la liaison ou la suppression de ressources, sont asynchrones et prennent un certain temps. Appelez VIEW_UPDATE_REQUESTS pour voir l’état d’une mise à jour. L’utilisation d’une ressource avant qu’elle ne soit entièrement disponible peut entraîner un comportement incohérent.
Les ressources prennent en charge la gestion des versions ; cependant, la création d’une nouvelle ressource avec une nouvelle version ne supprime pas la version précédente de la collaboration. Les ressources sont nommées de manière unique en combinant le nom et la version fournis par l’utilisateur (et l’alias, pour les offres de données).
Pour en savoir plus sur l’utilisation des ressources dans votre collaboration, voir Ressources.
Vous devez rejoindre une collaboration pour partager des ressources et exécuter des analyses dans la collaboration.
Le créateur se joint automatiquement lors de l’appel de INITIALIZE si auto_join_warehouse est fourni. Si auto_join_warehouse n’est pas fourni, le créateur appelle JOIN une fois INITIALIZE terminé.
Les non-créateurs appellent REVIEW, puis JOIN.
REVIEW renvoie une vue d’ensemble de la collaboration et de ses ressources. Vous pouvez appeler REVIEW une seule fois.
JOIN installe la salle blanche de collaboration sur votre compte et rejoint la collaboration.
INITIALIZE et JOIN sont des procédures asynchrones qui prennent plusieurs minutes à s’exécuter. Vous devez appeler GET_STATUS pour voir quand chaque étape est terminée.
Important
Si la région d’hébergement Cloud de votre compte est différente de celle du propriétaire de la collaboration, REVIEW déclenche des étapes de configuration asynchrones supplémentaires. Appelez REVIEW à plusieurs reprises jusqu’à ce qu’il renvoie une réponse positive, indiquant que la configuration est terminée.
La jointure est un processus asynchrone ; appelez GET_STATUS pour voir quand votre statut est annoncé comme JOINED.
Si vous disposez du rôle d’exécutant d’analyses dans une collaboration, vous pouvez exécuter des analyses sur des sources de données partagées avec vous dans la collaboration.
Les collaborations prennent en charge deux types de requêtes :
Analyses de modèles. Ces requêtes exécutent un modèle (un modèle d’instruction JinjaSQL) lié à la collaboration. Les modèles peuvent être soit des modèles d’analyse, qui vous renvoient immédiatement les résultats, soit des modèles d’activation, qui enregistrent les résultats sur le compte Snowflake d’un participant désigné.
Requêtes SQL de forme libre. Si un fournisseur de données l’autorise, vous pouvez accéder à des offres de données spécifiées en utilisant SQL lorsque vous êtes connecté avec vos identifiants de connexion de collaborateur. Vous exécutez les requêtes SQL directement, sans appeler une procédure API de collaboration, en accédant au nom de la vue complet exposé par la collaboration.
Le gestionnaire d’analyses prend en charge le coût d’exécution d’une analyse.
La spécification de collaboration détermine si vous pouvez exécuter un modèle, activer des résultats ou exécuter des requêtes SQL de forme libre. Vos capacités, ainsi que les données et modèles à votre disposition, sont décrits dans la spécification de collaboration.
Note
Les colonnes des sources de données peuvent porter de nouveaux noms lorsqu’elles sont exposées au modèle ou à l’utilisateur. Voir Renommage de colonne source pour savoir comment et quand les colonnes sources sont renommées. Les modèles et les arguments fournis par l’utilisateur (tels qu’un nom de colonne de jointure) doivent utiliser le nom final et non le nom d’origine si la colonne est renommée.
Pour en savoir plus sur tous ces types d’analyse, consultez les sections suivantes.
Pour exécuter une analyse à partir d’un modèle, affichez la liste des modèles que vous pouvez exécuter, affichez la liste des offres de données que vous pouvez utiliser, puis appelez RUN avec vos valeurs sous forme de paramètres individuels ou de spécification d’analyse au format YAML.
Les tables que vous transmettez dans le champ source_tables dans la configuration d’exécution renseignent le paramètre source_table dans le modèle. Le paramètre du modèle my_table n’est pas renseigné ou utilisé, sauf si vous utilisez Snowflake Standard Edition avec vos propres données.
Note
L’installation des ressources est asynchrone. Si un modèle vient d’être installé, un court délai peut s’écouler avant qu’il soit disponible pour être exécuté. Si le modèle comprend un bundle de codes, un délai supplémentaire peut être nécessaire avant que le modèle ne soit disponible. Voir comment déterminer quand un bundle de codes est disponible.
L’exemple suivant répertorie les offres de données et les modèles auxquels l’utilisateur peut accéder, puis exécute une analyse à l’aide du modèle sales_join_template (qui est supposé être répertorié par VIEW_TEMPLATES), en transmettant cinq arguments nommés au modèle.
-- See which data offerings are available.CALLSAMOOHA_BY_SNOWFLAKE_LOCAL_DB.COLLABORATION.VIEW_DATA_OFFERINGS($collaboration_name);-- See which templates you can run.CALLSAMOOHA_BY_SNOWFLAKE_LOCAL_DB.COLLABORATION.VIEW_TEMPLATES($collaboration_name);-- Pass in the arguments in analysis YAML format.CALLSAMOOHA_BY_SNOWFLAKE_LOCAL_DB.COLLABORATION.RUN($collaboration_name,$$api_version:2.0.0spec_type:analysisname:My_analysisdescription:Sales results Q2 2025template:sales_join_templatetemplate_configuration:view_mappings:source_tables:-user1_alias.data_offering_v1.table_1-user2_alias.another_data_offering_v1.table_2arguments:-- The template defines conv_purchase_id and the other four arguments.conv_purchase_id:PURCHASE_ID -- You must examine a template to see which arguments it supports.conv_purchase_amount:PURCHASE_AMOUNTpublisher_impression_id:IMPRESSION_IDpublisher_campaign_name:CAMPAIGN_NAMEpublisher_device_type:DEVICE_TYPE $$);
Activer et exécuter des requêtes SQL de forme libre sur vos données¶
Un fournisseur de données peut accorder à la personne exécutant l’analyse l’autorisation d’exécuter des requêtes SQL arbitraires par rapport à leurs offres de données. Cela signifie que la personne qui exécute l’analyse peut exécuter une requête SQL arbitraire directement sur l’offre de données, plutôt que d’appeler un modèle.
Pour en savoir plus sur les requêtes SQL de forme libre, voir Requêtes SQL libres.
Exécuter une analyse avec vos propres données lorsque vous utilisez Standard Edition¶
Si vous utilisez Standard Edition, vous pouvez exécuter une analyse de la manière standard. En revanche, vous ne pouvez pas lier des données dans la collaboration pour les partager avec d’autres utilisateurs. La seule façon de transmettre vos propres ensembles de données dans un modèle est d’utiliser la technique décrite ici.
Pour utiliser vos propres données dans une collaboration sur Snowflake Standard Edition :
Enregistrez votre offre de données en appelant REGISTER_DATA_OFFERING.
Appelez LINK_LOCAL_DATA_OFFERING pour lier vos données dans la collaboration à utiliser. Aucun autre collaborateur ne peut voir ou accéder aux données liées localement.
Utilisez l’ID de l’offre de données lorsque vous appelez RUN.
Si vous utilisez la version paramétrée de RUN, transmettez vos IDs d’offres de données au paramètre local_template_view_names
Si vous utilisez la version YAML deRUN, fournissez vos IDs d’offres de données dans la section de la requête local_view_mappings.my_tables
Si vous utilisez la version paramétrée de RUN, transmettez vos IDs d’offres de données au paramètre local_template_view_names.
Astuce
local_template_view_names et``local_view_mappings.my_tables`` remplissent le paramètre my_table dans le modèle.
L’exemple suivant montre comment exécuter un modèle à l’aide de la version au format YAML de la procédure d’exécution. Cet exemple comprend le champ my_tables, qui est renseigné en appelant LINK_LOCAL_DATA_OFFERING.
-- See what data offerings are available. Your own local data will be listed here as well.CALLSAMOOHA_BY_SNOWFLAKE_LOCAL_DB.COLLABORATION.VIEW_DATA_OFFERINGS($collaboration_name);-- Pass in the arguments in analysis YAML format.CALLSAMOOHA_BY_SNOWFLAKE_LOCAL_DB.COLLABORATION.RUN($collaboration_name,$$api_version:2.0.0spec_type:analysisname:my_analysisdescription:Cross-purchase results for Q4 2025template:mytemplate_v1template_configuration:view_mappings:source_tables:-ADVERTISER1.ADVERTISER_DATA_V1.CUSTOMERS-PUBLISHER.ADVERTISER_DATA_V1.CUSTOMERSlocal_view_mappings:my_tables:-PARTNER.MY_DATA_V1.MY_CUSTOMERS# Populate my_table array with my own table.arguments:# Template arguments, as name: value pairsconv_purchase_id:PURCHASE_IDconv_purchase_amount:PURCHASE_AMOUNTpublisher_impression_id:IMPRESSION_IDpublisher_campaign_name:CAMPAIGN_NAMEpublisher_device_type:DEVICE_TYPE $$);
Si le fournisseur de données et les spécifications de collaboration l’autorisent, vous pouvez enregistrer les résultats de l’analyse sur votre propre compte Snowflake, ou sur le compte Snowflake d’un collaborateur désigné. Un modèle active des résultats ou renvoie des résultats immédiatement, et non les deux.
Les non-propriétaires quittent une collaboration en appelant LEAVE. Toutes les offres de données qu’ils ont fournies seront supprimées de la collaboration. Vous ne pouvez pas rejoindre à nouveau une collaboration après l’avoir quittée.
Les propriétaires de collaboration ne peuvent pas quitter une collaboration car la propriété ne peut pas être transférée. Un propriétaire de collaboration peut supprimer une collaboration pour tous les collaborateurs en appelant TEARDOWN.
Les deux processus sont asynchrones. Vous devez appeler GET_STATUS pour contrôler le statut, et appelez LEAVE ou TEARDOWN à nouveau lorsque GET_STATUS affiche le statut LOCAL_DROP_PENDING.
L’exemple suivant illustre une collaboration entre deux parties, où une partie (nommée « alice ») est le créateur de la collaboration, un fournisseur de données pour elle-même et bob et un exécuteur d’analyses. « Bob » est u fournisseur de données pour lui-même et « alice » et est également un exécuteur d’analyses.
Cet exemple illustre les actions suivantes :
Création d’une collaboration.
Enregistrement des modèles et des offres de données.
Liaison d’un modèle et d’une offre de données au moment de la création de la collaboration.
Rejoindre une collaboration.
Liaison de ressources supplémentaires à une collaboration existante.
Exécuter une analyse.
Pour exécuter cet exemple, vous devez disposer de deux comptes distincts avec Snowflake Data Clean Rooms installé.
Vous pouvez soit télécharger les fichiers et les importer sur votre compte Snowflake, soit copier et coller le code d’exemple dans les feuilles de calcul de deux comptes distincts en utilisant Snowsight.
Téléchargez les fichiers SQL sources, puis importez-les dans deux comptes distincts qui disposent de Snowflake Data Clean Rooms :
-- 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/overviewUSEWAREHOUSEAPP_WH;USEROLESAMOOHA_APP_ROLE;-- Secondary roles must be disabled to call link_data_offerings.USE SECONDARY ROLESNONE;CREATEDATABASEIFNOTEXISTSALICE_DB;CREATESCHEMAIFNOTEXISTSALICE_DB.ALICE_SCH;CREATEORREPLACETABLEALICE_DB.ALICE_SCH.ALICE_DATAASSELECT*FROMsamooha_sample_database.demo.customersLIMIT100;-- Register a data offering to use in the initial collaboration definition.CALLsamooha_by_snowflake_local_db.registry.register_data_offering($$api_version: 2.0.0spec_type: data_offeringversion: v1name:<alicedataofferingname>datasets:-alias: customer_listdata_object_fqn: ALICE_DB.ALICE_SCH.ALICE_DATAobject_class: customallowed_analyses: template_onlyschema_and_template_policies: hashed_email: category: join_standardcolumn_type: hashed_email_b64_encodedstatus: category: passthrough $$);-- Save the ID of the registered data offering. SETalice_data_offering_id='<data_offering_id>';CALLsamooha_by_snowflake_local_db.registry.view_registered_data_offerings();-- Register a template to use in the initial collaboration definition.CALLsamooha_by_snowflake_local_db.registry.register_template($$api_version: 2.0.0spec_type: templatename: alice_only_templateversion:<version_number>type: sql_analysisdescription: Atesttemplatetemplate: SELECTt1.status,COUNT(*)FROMIDENTIFIER({{source_table[0]}})ASt1JOINIDENTIFIER({{source_table[1]}})ASt2ONt1.hashed_email_b64_encoded=t2.hashed_email_b64_encodedGROUPBYt1.status;$$);-- Save the ID of the registered template.SETmy_template_id='<alice_only_template_id>';CALLsamooha_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();CALLsamooha_by_snowflake_local_db.collaboration.initialize($$api_version: 2.0.0spec_type: collaborationname: my_first_collaboration_1_0owner: alicecollaborator_identifier_aliases: alice:<myaccountdatasharingID>bob:<bobaccountdatasharingID>analysis_runners: bob: data_providers: alice: data_offerings:-id:<alicedataofferingID>bob: data_offerings:[]alice: data_providers: alice: data_offerings:-id:<alicedataofferingID>bob: data_offerings:[]templates:-id:<aliceonlytemplateID>$$,'APP_WH');SETcollaboration_name='<collaboration_name>';-- INITIALIZE automatically joins the owner. Check status until JOINED.CALLsamooha_by_snowflake_local_db.collaboration.get_status($collaboration_name);-- Collaboration is visible here when the owner has joined.CALLsamooha_by_snowflake_local_db.collaboration.view_collaborations();-- Auto-approve any template requests from other collaborators that affect you.CALLsamooha_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.CALLsamooha_by_snowflake_local_db.registry.register_template($$api_version: 2.0.0spec_type: templatename: both_use_templateversion: 2026_01_12_V1type: sql_analysisdescription: test_descriptiontemplate: select*fromidentifier({{source_table[0]}})limit5; $$);SETboth_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.CALLsamooha_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.CALLsamooha_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.CALLsamooha_by_snowflake_local_db.collaboration.view_collaborations()->>SELECT"COLLABORATION_SPEC"FROM$1WHERE"SOURCE_NAME"=$collaboration_name;-- SWITCH TO bob to add a data offering.-- Run an analysis.-- Tables are scoped as <data_offering_id>.<alias>.CALLsamooha_by_snowflake_local_db.collaboration.view_data_offerings($collaboration_name);SET$bob_data_offering='<bob data offering ID>';CALLsamooha_by_snowflake_local_db.collaboration.view_templates($collaboration_name);-- Run bob's template.-- Replace the placeholders with your variables.CALLsamooha_by_snowflake_local_db.collaboration.run($collaboration_name,$$api_version: 2.0.0spec_type: analysisdescription:<optionaldescriptionoftheanalysis>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.CALLsamooha_by_snowflake_local_db.collaboration.teardown($collaboration_name);CALLsamooha_by_snowflake_local_db.collaboration.get_status($collaboration_name);-- When get_status reports LOCAL_DROP_PENDING, call teardown again.CALLsamooha_by_snowflake_local_db.collaboration.teardown($collaboration_name);DROPDATABASEALICE_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/overviewUSEWAREHOUSEAPP_WH;USEROLESAMOOHA_APP_ROLE;-- Secondary roles can't be active when calling join or link_data_offering.USE SECONDARY ROLESNONE;-- Create sample data.CREATEDATABASEIFNOTEXISTSBOB_DB;CREATESCHEMAIFNOTEXISTSBOB_DB.BOB_SCH;CREATEORREPLACETABLEBOB_DB.BOB_SCH.BOB_DATAASSELECT*FROMsamooha_sample_database.demo.customers_2LIMIT100;-- See which collaborations you are invited to, or have joined.CALLsamooha_by_snowflake_local_db.collaboration.view_collaborations();-- Use SOURCE_NAME column value from the response to view_collaborations().SETcollaboration_name='<collaboration name>';-- Use OWNER_ACCOUNT column value from the response to view_collaborations().SETcollaborator_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.CALLsamooha_by_snowflake_local_db.collaboration.review($collaboration_name,$collaborator_data_sharing_id);CALLsamooha_by_snowflake_local_db.collaboration.join($collaboration_name);CALLsamooha_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.CALLsamooha_by_snowflake_local_db.registry.register_template($$api_version: 2.0.0spec_type: templatename: auto_approve_templateversion: V1type: sql_analysisdescription: test_descriptiontemplate: SELECT*FROMIDENTIFIER({{SOURCE_TABLE[0]}})LIMIT10; $$);SETauto_approve_template='<template_id>';CALLsamooha_by_snowflake_local_db.collaboration.add_template_request($collaboration_name,$auto_approve_template,['alice','bob']);CALLsamooha_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.CALLsamooha_by_snowflake_local_db.collaboration.view_update_requests($collaboration_name);CALLsamooha_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.CALLsamooha_by_snowflake_local_db.registry.register_data_offering($$api_version: 2.0.0spec_type: data_offeringversion: v3name: bob_datadatasets:-alias: my_customer_listdata_object_fqn: BOB_DB.BOB_SCH.BOB_DATAobject_class: customallowed_analyses: template_onlyschema_and_template_policies: hashed_email: category: join_standardcolumn_type: hashed_email_b64_encodedstatus: category: passthrough $$);SETmy_data_id='<data offering id>';-- Share the data offering with yourself and alice.CALLsamooha_by_snowflake_local_db.collaboration.link_data_offering($collaboration_name,$my_data_id,['alice','bob']);CALLsamooha_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.CALLsamooha_by_snowflake_local_db.collaboration.view_templates($collaboration_name);-- Run an analysis with your template.CALLsamooha_by_snowflake_local_db.collaboration.run($collaboration_name,$$api_version: 2.0.0spec_type: analysisdescription:<optionaldescriptionoftheanalysis>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.CALLsamooha_by_snowflake_local_db.collaboration.run($collaboration_name,$$api_version: 2.0.0spec_type: analysisdescription:<optionaldescriptionoftheanalysis>template:'<alice_only_template>'template_configuration: view_mappings: source_tables:-'<my_data_offering_view_name>'-'<bob_data_offering_view_name>' $$);-- Clean up resources.DROPDATABASEBOB_DB;
Cet exemple montre comment créer et utiliser une collaboration si vous n’avez qu’un seul compte pour les tests.
L’exemple illustre la création d’une collaboration avec une offre de données et un modèle, puis l’ajout d’une autre offre de données et d’un autre modèle après la création de la collaboration et l’exécution d’analyses.
Vous pouvez soit télécharger le fichier et l’importer sur votre compte Snowflake, soit copier et coller le code d’exemple dans une feuille de calcul en utilisant Snowsight.
Téléchargez le fichier SQL source, puis importez-le dans un compte Snowflake avec Snowflake Data Clean Rooms :
-- ============================================================================-- Single-user Collaboration Clean Rooms demo-- ============================================================================-- This example demonstrates a basic Snowflake Data Clean Rooms collaboration-- using a single Snowflake account and a single role: SAMOOHA_APP_ROLE.-- One user acts as the owner, data provider, and analysis runner.---- The user creates two sample datasets, registers two data offerings and two-- templates, then creates a collaboration with one data offering and one template each.-- After the collaboration is created, the user links the remaining data offering and-- template, then runs an analysis with each template. Finally, the code-- cleans up all resources used.---- For more information, see:-- docs.snowflake.com/user-guide/cleanrooms/overview-- docs.snowflake.com/user-guide/cleanrooms/spec-reference-- ============================================================================-- ============================================================================-- SETUP: Create sample databases and data.-- ============================================================================USEROLESAMOOHA_APP_ROLE;USEWAREHOUSEAPP_WH;-- You can't use secondary roles with most collaboration procedures.USE SECONDARY ROLESNONE;CREATEDATABASEIFNOTEXISTSDEMO_DB;CREATESCHEMAIFNOTEXISTSDEMO_DB.DATA_SCH;-- Dataset 1: 300 rows from CUSTOMERS.CREATEORREPLACETABLEDEMO_DB.DATA_SCH.CUSTOMERS_1ASSELECTHASHED_EMAIL,STATUS,AGE_BANDFROMSAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERSLIMIT300;-- Dataset 2: 300 rows from CUSTOMERS_2.CREATEORREPLACETABLEDEMO_DB.DATA_SCH.CUSTOMERS_2ASSELECTHASHED_EMAIL,STATUS,AGE_BANDFROMSAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS_2LIMIT300;-- ============================================================================-- Register data offerings and templates.-- ============================================================================-- Register the first data offering.CALLSAMOOHA_BY_SNOWFLAKE_LOCAL_DB.REGISTRY.REGISTER_DATA_OFFERING($$api_version: 2.0.0spec_type: data_offeringversion: V1name: customers_1datasets:-alias: customers_1data_object_fqn: DEMO_DB.DATA_SCH.CUSTOMERS_1object_class: customallowed_analyses: template_onlyschema_and_template_policies: hashed_email: category: join_standardcolumn_type: hashed_email_b64_encodedstatus: category: passthroughage_band: category: passthrough $$);SETdata_offering_1_id='<data_offering_1_id>';-- Register the second data offering.CALLSAMOOHA_BY_SNOWFLAKE_LOCAL_DB.REGISTRY.REGISTER_DATA_OFFERING($$api_version: 2.0.0spec_type: data_offeringversion: V1name: customers_2datasets:-alias: customers_2data_object_fqn: DEMO_DB.DATA_SCH.CUSTOMERS_2object_class: customallowed_analyses: template_onlyschema_and_template_policies: hashed_email: category: join_standardcolumn_type: hashed_email_b64_encodedstatus: category: passthroughage_band: category: passthrough $$);SETdata_offering_2_id='<data_offering_2_id>';-- Register a template that joins two tables on hashed_email and returns-- a count of rows grouped by age_band.CALLSAMOOHA_BY_SNOWFLAKE_LOCAL_DB.REGISTRY.REGISTER_TEMPLATE($$api_version: 2.0.0spec_type: templatename: age_band_countversion: V1type: sql_analysisdescription: Joinstwotablesonhashed_emailandreturnsage_bandwithrowcounts.template: SELECTt1.age_band,COUNT(t1.age_band)ASage_band_countFROMIDENTIFIER({{source_table[0]}})ASt1JOINIDENTIFIER({{source_table[1]}})ASt2ONt1.hashed_email_b64_encoded=t2.hashed_email_b64_encodedGROUPBYt1.age_band;$$);SETage_band_template_id='<age_band_template_id>';-- Register a template that joins two tables on hashed_email and returns-- a count of rows grouped by status.CALLSAMOOHA_BY_SNOWFLAKE_LOCAL_DB.REGISTRY.REGISTER_TEMPLATE($$api_version: 2.0.0spec_type: templatename: status_countversion: V1type: sql_analysisdescription: Joinstwotablesonhashed_emailandreturnsstatuswithrowcounts.template: SELECTt1.status,COUNT(t1.status)ASstatus_countFROMIDENTIFIER({{source_table[0]}})ASt1JOINIDENTIFIER({{source_table[1]}})ASt2ONt1.hashed_email_b64_encoded=t2.hashed_email_b64_encodedGROUPBYt1.status;$$);SETstatus_template_id='<status_template_id>';-- Confirm that both data offerings and both templates are registered.CALLSAMOOHA_BY_SNOWFLAKE_LOCAL_DB.REGISTRY.VIEW_REGISTERED_DATA_OFFERINGS();CALLSAMOOHA_BY_SNOWFLAKE_LOCAL_DB.REGISTRY.VIEW_REGISTERED_TEMPLATES();-- ============================================================================-- Create the collaboration with one data offering and one template.-- ============================================================================-- Replace <account_data_sharing_id> with:-- SELECT CURRENT_ORGANIZATION_NAME() || '.' || CURRENT_ACCOUNT_NAME();CALLSAMOOHA_BY_SNOWFLAKE_LOCAL_DB.COLLABORATION.INITIALIZE($$api_version: 2.0.0spec_type: collaborationname: single_user_demoowner: mecollaborator_identifier_aliases: me:<account_data_sharing_id>analysis_runners: me: data_providers: me: data_offerings:-id:<data_offering_1_id>templates:-id:<age_band_template_id> $$,'APP_WH');SETcollaboration_name='<collaboration_name>';-- Verify that the owner has joined. Repeat until status is JOINED.CALLSAMOOHA_BY_SNOWFLAKE_LOCAL_DB.COLLABORATION.GET_STATUS($collaboration_name);-- ============================================================================-- Link the remaining data offering and template into the collaboration.-- ============================================================================-- Link the second data offering.CALLSAMOOHA_BY_SNOWFLAKE_LOCAL_DB.COLLABORATION.LINK_DATA_OFFERING($collaboration_name,$data_offering_2_id,['me']);-- Add the status_count template to the collaboration.CALLSAMOOHA_BY_SNOWFLAKE_LOCAL_DB.COLLABORATION.ADD_TEMPLATE_REQUEST($collaboration_name,$status_template_id,['me']);-- ============================================================================-- List resources and run analyses.-- ============================================================================-- List all data offerings in the collaboration.CALLSAMOOHA_BY_SNOWFLAKE_LOCAL_DB.COLLABORATION.VIEW_DATA_OFFERINGS($collaboration_name);-- List all templates in the collaboration.CALLSAMOOHA_BY_SNOWFLAKE_LOCAL_DB.COLLABORATION.VIEW_TEMPLATES($collaboration_name);-- Run the age_band_count template.-- Replace placeholders with the template name/version and view names from-- VIEW_TEMPLATES and VIEW_DATA_OFFERINGS.CALLSAMOOHA_BY_SNOWFLAKE_LOCAL_DB.COLLABORATION.RUN($collaboration_name,$$api_version: 2.0.0spec_type: analysisdescription: Countmatchingrowsgroupedbyage_band.template:'<age_band_count_template_name_and_version>'template_configuration: view_mappings: source_tables:-'<data_offering_view_1>'-'<data_offering_view_2>' $$);-- Run the status_count template.-- Replace placeholders with the template name/version and view names from-- VIEW_TEMPLATES and VIEW_DATA_OFFERINGS.CALLSAMOOHA_BY_SNOWFLAKE_LOCAL_DB.COLLABORATION.RUN($collaboration_name,$$api_version: 2.0.0spec_type: analysisdescription: Countmatchingrowsgroupedbystatus.template:'<status_count_template_name_and_version>'template_configuration: view_mappings: source_tables:-'<data_offering_view_1>'-'<data_offering_view_2>' $$);-- ============================================================================-- CLEANUP: Delete the collaboration, registered resources, and sample data.-- ============================================================================-- Teardown is a multi-step process. Call TEARDOWN, then wait for GET_STATUS-- to report LOCAL_DROP_PENDING, then call TEARDOWN again.CALLSAMOOHA_BY_SNOWFLAKE_LOCAL_DB.COLLABORATION.TEARDOWN($collaboration_name);CALLSAMOOHA_BY_SNOWFLAKE_LOCAL_DB.COLLABORATION.GET_STATUS($collaboration_name);-- When GET_STATUS reports LOCAL_DROP_PENDING, call TEARDOWN again to complete.CALLSAMOOHA_BY_SNOWFLAKE_LOCAL_DB.COLLABORATION.TEARDOWN($collaboration_name);-- Unregister the data offerings and templates from the default registry.CALLSAMOOHA_BY_SNOWFLAKE_LOCAL_DB.REGISTRY.UNREGISTER_DATA_OFFERING($data_offering_1_id);CALLSAMOOHA_BY_SNOWFLAKE_LOCAL_DB.REGISTRY.UNREGISTER_DATA_OFFERING($data_offering_2_id);CALLSAMOOHA_BY_SNOWFLAKE_LOCAL_DB.REGISTRY.UNREGISTER_TEMPLATE($age_band_template_id);CALLSAMOOHA_BY_SNOWFLAKE_LOCAL_DB.REGISTRY.UNREGISTER_TEMPLATE($status_template_id);-- Drop the sample database.DROPDATABASEIFEXISTSDEMO_DB;