Analyse de base des données exécutées par les consommateurs¶
Vue d’ensemble¶
Cette rubrique présente une analyse de base effectuée par le consommateur à l’aide de l’API de salles blanches. L’exemple montre comment un fournisseur peut créer et partager de manière programmatique une salle blanche avec des données, et comment un consommateur peut exécuter une analyse à partir des données du fournisseur. Le fournisseur définit les requêtes SQL qui peuvent être exécutées sur leurs données. Un fournisseur peut définir des requêtes qui interrogent uniquement les données du fournisseur, uniquement les données du consommateur, ou qui joignent les données du fournisseur et du consommateur.
Vous pouvez télécharger l’exemple de code complet pour le charger et l’exécuter sur votre compte Snowflake.
Le schéma suivant montre le flux de données via les principaux composants d’une analyse de base du cycle du consommateur.
Dans une analyse de base effectuée par le consommateur impliquant deux parties, le fournisseur et le consommateur lient les données à la salle blanche. Ces données sont accessibles à l’aide d’une vue sécurisée stockée dans la DB du consommateur dans le paquet d’application de la salle blanche sur le compte du consommateur.
Lors d’une analyse, l’application de salle blanche sur le compte du consommateur utilise les vues sécurisées du consommateur et du fournisseur spécifiées, et les résultats sont partagés avec le consommateur.
Étapes du fournisseur¶
La liste suivante montre les principales étapes pour créer, publier et partager une salle blanche avec un consommateur :
Mise en place de l’environnement¶
Pour utiliser l’API, vous devez utiliser un entrepôt pour lequel SAMOOHA_APP_ROLE dispose de privilèges. app_wh est l’un des nombreux entrepôts ayant accès à l’API. Choisissez l’entrepôt qui correspond à vos besoins. (Vous pouvez également utiliser votre propre entrepôt, si vous le souhaitez).
Le rôle SAMOOHA_APP_ROLE est nécessaire pour accéder à l’API.
USE WAREHOUSE app_wh;
USE ROLE SAMOOHA_APP_ROLE;
Créer la salle blanche¶
L’étape suivante consiste à créer une nouvelle salle blanche. Il suffit pour cela d’utiliser un seul appel API qui spécifie si la salle blanche est destinée à une utilisation interne ou externe. Les salles blanches internes ne sont accessibles qu’aux consommateurs de la même organisation. Les salles blanches externes peuvent être utilisées par des consommateurs extérieurs à l’organisation. Pour les deux types de salles blanches, les consommateurs doivent être invités à utiliser la salle blanche pour pouvoir y accéder.
Les salles blanches externes déclenchent des contrôles de sécurité supplémentaires lorsque certaines actions sont effectuées. Lorsque cela se produit, vous devez appeler provider.view_cleanroom_scan_status pour voir quand l’analyse de sécurité est terminée, et vous pouvez passer à l’action suivante.
L’exemple suivant crée une salle blanche interne :
CALL samooha_by_snowflake_local_db.provider.cleanroom_init($cleanroom_name, 'INTERNAL');
Lier les données à la salle blanche¶
Le fournisseur et le consommateur peuvent tous les deux lier (importer) des tables, des vues et d’autres objets de données pris en charge dans une salle blanche. Lorsque vous liez des données, l’API crée une vue cachée et sécurisée à l’intérieur de la salle blanche qui est basée sur l’objet source lié. Vous référencez l’objet lié par son nom source, et non par son nom de vue interne, dans toutes les procédures de salle blanche.
Les données liées à la salle blanche ne sont pas directement accessibles par aux collaborateurs de la salle blanche. Les données liées sont accessibles à l’aide d’un modèle importé dans la salle blanche (à moins que vous n’activiez les requêtes SQL de forme libre sur vos données).
Avant qu’un objet puisse être lié à une salle blanche, l’objet doit être enregistré. L’enregistrement d’un objet accorde des privilèges d’accès appropriés au rôle SAMOOHA_APP_ROLE sur l’objet. Vous pouvez soit enregistrer directement un objet, soit enregistrer un objet parent (tel qu’une base de données ou un schéma) pour accéder à des objets enfants. Vous pouvez enregistrer un objet dans l’UI ou dans l’API.
Astuce
L’enregistrement est plus facile à effectuer et à gérer dans l’UI que dans l’API.
Les objets sont enregistrés au niveau du compte, et non au niveau de la salle blanche ; vous devez enregistrer un objet une seule fois par compte, et celui-ci peut être lié à n’importe quelle salle blanche du compte. (Vous ne pouvez lier que des objets enregistrés dans votre propre compte.) Une fois que vous avez enregistré un objet, celui-ci est disponible peut être lié par n’importe quelle salle blanche du compte. En savoir plus sur l’enregistrement.
L’exemple suivant lie des données dans la table CUSTOMERS de la base de données exemple SAMOOHA_SAMPLE_DATABASE. Cette base de données est enregistrée automatiquement lorsque vous installez l’environnement de salle blanche dans un compte, vous n’avez donc pas besoin de l’enregistrer. Vous pouvez lier ou dissocier des objets à tout moment dans une salle blanche, et les résultats se propagent rapidement à tous les collaborateurs.
CALL samooha_by_snowflake_local_db.provider.link_datasets(
$cleanroom_name,
['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS']);
Définir la politique de jointure¶
Si vous ajoutez un modèle à la salle blanche qui permet au consommateur de joindre des données à vos données, vous devez définir une politique de jointure de salle blanche sur vos données. Une politique de jointure de salle blanche spécifie les colonnes sur lesquelles joindre des données dans les requêtes exécutées par les collaborateurs. Vos propres politiques de jointure ne restreignent pas vos propres requêtes.
Les salles blanches prennent en charge quelques types de politiques de données que vous pouvez définir sur les données liées. Ces politiques sont similaires aux politiques équivalentes de Snowflake, sans être les mêmes, et s’appliquent uniquement à la vue interne, et non aux données source. Toutes les politiques Snowflake définies sur les données source sont propagées aux vues liées à une salle blanche. Les politiques de salle blanche sont définies sur les données liées uniquement, et non sur les données source.
Important
Le modèle est responsable de l’utilisation de filtres JinjaSQL pour appliquer des politiques. Si le modèle n’utilise pas de filtres de politiques, les politiques ne seront pas respectées. Ajoutez toujours des filtres de politiques aux modèles que vous écrivez, et examinez tous les modèles que vous exécutez afin de vous assurer qu’ils appliquent les politiques de salle blanche.
Vous pouvez définir des politiques uniquement sur les données que vous liez ; vous ne pouvez pas définir de politiques sur les données d’autres personnes.
L’exemple suivant montre comment définir une politique de jointure qui permet à deux colonnes de la table liée d’être jointes :
CALL samooha_by_snowflake_local_db.provider.set_join_policy(
$cleanroom_name,
['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:HASHED_EMAIL',
'SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:HASHED_PHONE']);
Ajouter des modèles à une salle blanche¶
Un modèle de salle blanche est un modèle JinjaSQL valide qui évalue généralement une requête SQL. Un modèle, parfois appelé analyse, peut recevoir des arguments de l’appelant, et peut accéder à toutes les données liées dans la salle blanche. Les fournisseurs et les consommateurs peuvent tous deux ajouter des modèles dans une salle blanche et les exécuter.
Snowflake fournit quelques modèles standard, mais vous écrirez probablement vos propres modèles personnalisés.
Toutes les politiques de salle blanche que vous définissez ne sont appliquées que si le modèle inclut des filtres de politiques dans le modèle, alors assurez-vous que les modèles que vous ajoutez à une salle blanche incluent ces filtres. Pour plus d’informations sur les politiques, consultez Comprendre les politiques relatives aux tables de clean room.
Par défaut, seuls les consommateurs peuvent exécuter des modèles. Si un fournisseur veut exécuter un modèle, il doit demander l’autorisation au consommateur. De même, si un consommateur veut télécharger un modèle, il doit demander l’autorisation au fournisseur.
Pour plus d’informations sur la création d’un modèle personnalisé, voir Ajouter des modèles personnalisés à une salle blanche et Référence d’un modèle de salle blanche personnalisé.
L’exemple suivant montre comment ajouter un modèle fourni par Snowflake à la salle blanche :
CALL samooha_by_snowflake_local_db.provider.add_templates(
$cleanroom_name,
['prod_overlap_analysis']);
Définir des politiques de colonnes¶
Les politiques de colonnes de salle blanche spécifient quelles colonnes de vos tables peuvent être projetées dans les requêtes exécutées par les collaborateurs. Une politique de colonnes est liée à la fois à une colonne et à un modèle, de sorte que différentes colonnes peuvent être définies comme projetables avec différents modèles. Un modèle doit être présent dans une salle blanche pour que vous puissiez définir des politiques de colonnes pour ce modèle.
Les politiques de colonnes, comme toutes les politiques, sont overwrite-only ; cela signifie que la définition de politiques de colonnes écrase complètement toutes les politiques de colonnes existantes définies par ce compte. Le fournisseur et le consommateur peuvent tous deux définir des politiques de colonnes sur leurs données. En savoir plus sur les politiques de colonnes.
L’exemple suivant montre comment autoriser la projection de quatre colonnes à partir de la base de données exemple des salles blanches qui a été liée précédemment :
CALL samooha_by_snowflake_local_db.provider.set_column_policy($cleanroom_name, [
'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:STATUS',
'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:AGE_BAND',
'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:DAYS_ACTIVE',
'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:REGION_CODE']);
Définir la version par défaut¶
Les salles blanches sont des applications natives versionnées. Certaines actions, telles que l’ajout de code à une salle blanche, génèrent une nouvelle version corrective de l’application. Les consommateurs doivent installer la salle blanche dans leur compte. La version qu’ils installent est basée sur le numéro de version par défaut que vous spécifiez. Si vous publiez ultérieurement une nouvelle version de la salle blanche et que vous incrémentez le numéro de version par défaut, toutes les versions installées par les consommateurs seront automatiquement mises à jour et les nouvelles installations seront par défaut la nouvelle version. En savoir plus sur la gestion des versions des salles blanches.
L’exemple suivant montre comment définir la version par défaut d’une salle blanche sur V1.0.0, qui est la version initiale d’une salle blanche, si vous n’avez pas importé de code :
CALL samooha_by_snowflake_local_db.provider.set_default_release_directive(
$cleanroom_name,
'V1_0', -- Version number: Never changes.
'0' -- Patch number: Can change.
);
Publier la salle blanche¶
Publiez ou republiez la salle blanche comme indiqué dans l’exemple suivant. La première fois que cette procédure est appelée, elle rend la salle blanche visible et installable par tous les consommateurs avec lesquels vous l’avez partagée. Vous devez appeler cette procédure chaque fois que vous apportez des modifications importantes, par exemple lorsque vous mettez à jour la version par défaut ou lorsque vous apportez des modifications spécifiques à l’UI de salle blanche.
CALL samooha_By_snowflake_local_db.provider.create_or_update_cleanroom_listing(
$cleanroom_name);
Le consommateur peut désormais installer la salle blanche, lier des données, définir des politiques et exécuter des modèles, comme décrit ci-dessous.
Astuce
Lorsque vous n’avez plus besoin d’une salle blanche, vous devez supprimer la salle blanche sur les comptes du fournisseur et du consommateur (provider.drop_cleanroom et consumer.uninstall_cleanroom). Le nombre de salles blanches et de collaborateurs par compte est limité. Lorsque vous laissez de nombreuses salles blanches inutilisées dans votre compte, vous pouvez atteindre votre quota.
Étapes du consommateur¶
Une fois qu’un fournisseur a publié une salle blanche, tous les consommateurs qui ont été ajoutés en tant que collaborateurs peuvent voir et installer la salle blanche en utilisant soit l’UI ou l’API. Cette section montre comment un consommateur peut installer une salle blanche et exécuter une analyse à l’aide de l’API.
Voici un bref aperçu des étapes suivies par le consommateur pour installer une salle blanche et effectuer une analyse :
Mise en place de l’environnement¶
Comme le fournisseur, le consommateur doit utiliser un entrepôt auquel le rôle SAMOOHA_APP_ROLE peut accéder. Toutefois, contrairement au fournisseur, le consommateur peut utiliser directement le rôle SAMOOHA_APP_ROLE pour un accès complet à l’API, ou un administrateur de salle blanche dans ce compte peut accorder un rôle plus limité qui donne des privilèges pour exécuter un sous-ensemble de l’API pour les consommateurs. Ce rôle limité, parfois appelé de manière générique « rôle d’exécution », est accordé par un utilisateur disposant des privilèges complets de salle blanche. Découvrez comment accorder un accès limité à l’API.
Un rôle d’exécution ne vous permet pas d’installer une salle blanche, vous devez donc utiliser le rôle SAMOOHA_APP_ROLE, comme le montre l’exemple suivant :
USE WAREHOUSE app_wh;
USE ROLE SAMOOHA_APP_ROLE;
Installer la salle blanche¶
L’extrait suivant montre comment répertorier toutes les salles blanches qui sont installées et celles que vous êtes invité à installer :
-- See all clean rooms, installed and not.
CALL samooha_by_snowflake_local_db.consumer.view_cleanrooms();
-- See only clean rooms that aren't installed.
CALL samooha_by_snowflake_local_db.consumer.view_cleanrooms() ->>
SELECT * FROM $1
WHERE IS_ALREADY_INSTALLED = false;
Installez la salle blanche que le fournisseur a partagée avec vous, comme indiqué dans l’exemple suivant. Vous devez spécifier le localisateur de compte du fournisseur lorsque vous installez une salle blanche.
CALL samooha_by_snowflake_local_db.consumer.install_cleanroom(
$cleanroom_name,
'<PROVIDER_ACCOUNT_LOCATOR>');
Astuce
Les salles blanches ont à la fois un nom et un ID. Pour les salles blanches créées à l’aide de l’API, utilisez le nom de la salle blanche lorsqu’une procédure d’API a besoin d’un nom de salle blanche. Pour les salles blanches créées dans l’UI, utilisez l’ID de la salle blanche plutôt que le nom lorsqu’une procédure d’API a besoin d’un nom de salle blanche.
L’UI de salle blanche signale les salles blanches créées à l’aide de l’API comme Supported with Developer APIs.
Ajouter des données et définir des politiques¶
Si les modèles de salle blanche permettent au consommateur d’inclure ses propres données dans une requête, le consommateur enregistre les données, lie les données et définit des politiques comme le fait le fournisseur. Veillez à utiliser les versions consumer de ces procédures, comme montré dans l’exemple suivant :
-- You must use a role with MANAGE GRANTS privilege on an object to register it.
USE ROLE ACCOUNTADMIN;
CALL samooha_by_snowflake_local_db.consumer.register_db('MY_DATABASE');
-- Link some tables.
CALL samooha_by_snowflake_local_db.consumer.link_datasets(
$cleanroom_name,
[
'SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS',
'MY_DATABASE.PUBLIC.EXPOSURES'
]);
La politique de jointure du fournisseur indique sur quelles colonnes du fournisseur il est possible de joindre des données. Cet exemple montre comment vérifier les colonnes des fournisseurs sur lesquelles vous pouvez joindre d’autres colonnes :
CALL samooha_by_snowflake_local_db.consumer.view_provider_join_policy($cleanroom_name);
Un fournisseur a besoin de l’approbation du consommateur pour exécuter un modèle dans la salle blanche. Par conséquent, la plupart des consommateurs ne prennent pas la peine de définir des politiques sur les tables qui sont liées. Néanmoins, nous vous recommandons d’envisager d’ajouter des politiques au cas où un fournisseur demanderait d’exécuter un modèle ultérieurement, car vous pourriez oublier d’ajouter les politiques appropriées à ce moment-là.
Si vous définissez des politiques, elles ne sont appliquées que si le modèle inclut un filtre join_policy ou column_policy dans la colonne du modèle, alors assurez-vous que les modèles que vous ajoutez à une salle blanche incluent ces filtres pour appliquer vos politiques. Pour examiner les modèles dans une salle blanche, appelez consumer.view_added_templates. Pour plus d’informations sur les politiques, consultez Comprendre les politiques relatives aux tables de clean room.
Effectuer l’analyse¶
Avant d’exécuter un modèle, vous l’examinez généralement pour voir ce qu’il fait et quelles variables il accepte, puis vous examinez quelles tables de fournisseurs sont disponibles dans la salle blanche.
Examiner les modèles¶
Vous pouvez lister les modèles dans une salle blanche et examiner le code de chacun (à moins que le fournisseur n’ait explicitement flouté le code). Cela peut être utile pour vous aider à mieux comprendre la requête. Vous pouvez également demander à la salle blanche d’analyser le modèle et d’indiquer les variables que vous pouvez passer lorsque vous exécutez le code.
Vous pouvez transmettre une liste de tables à utiliser dans la requête, en fonction de la conception du modèle. Toute table liée à la salle blanche peut être transmise au modèle.
De nombreux modèles prennent également en charge des variables que vous pouvez spécifier au moment de l’exécution, par exemple, pour faire correspondre une valeur particulière ou pour spécifier les colonnes à afficher. Idéalement, le fournisseur devrait vous informer du fonctionnement du modèle et des arguments qu’il accepte. Mais généralement, vous souhaitez également examiner un modèle pour voir le code. L’extrait suivant répertorie les modèles ajoutés à la salle blanche par n’importe quel collaborateur, et obtient les arguments pris en charge pour un modèle spécifique :
-- View the list of templates available in this clean room,
-- and the source code for each template.
CALL samooha_by_snowflake_local_db.consumer.view_added_templates($cleanroom_name);
-- Show which variables can be passed in when running the specified template.
CALL samooha_by_snowflake_local_db.consumer.get_arguments_from_template(
$cleanroom_name,
$template_name
);
Astuce
Si vous voyez la variable de tableau my_table utilisée dans un modèle, elle contient la liste des noms des tables de consommateurs que vous transmettez lorsque vous exécutez le modèle. Si vous voyez la variable de tableau source_table, contenant la liste des noms des tables de fournisseurs que vous transmettez lorsque vous exécutez le modèle.
Voir quelles données sont disponibles¶
Vous pouvez dresser la liste des ensembles de données que vous et le fournisseur avez liés à une salle blanche, comme le montre l’exemple suivant :
-- See which datasets you have linked into the clean room.
CALL samooha_by_snowflake_local_db.consumer.view_consumer_datasets($cleanroom_name);
-- See which datasets the provider has linked into the clean room.
CALL samooha_by_snowflake_local_db.consumer.view_provider_datasets($cleanroom_name);
Lorsque vous transmettez un nom de table, utilisez le nom de la table, pas le nom de la vue, à partir des résultats de ces procédures.
Exécuter le modèle¶
Dans les deux étapes précédentes, vous avez appris de quelles données vous disposez et quelles variables vous pouvez transmettre. Vous êtes maintenant prêt à exécuter l’analyse.
En fonction de la requête et de la taille des données, vous pouvez modifier la taille de l’entrepôt pour quelque chose de plus approprié.
L’exemple suivant montre comment un utilisateur peut appeler un modèle qui accepte à la fois les tables des consommateurs et des fournisseurs, ainsi que deux variables : la variable dimensions, qui est utilisée comme colonne de regroupement, et la variable facultative where_clause, qui est utilisée dans une clause WHERE dans la requête.
Le modèle exécute une requête sur une seule table de fournisseurs, de sorte que la requête omet les tables des consommateurs.
Dans l’exemple suivant, remarquez comment la valeur dimensions est un nom de colonne préfixé par p. Le p indique que cette colonne provient de la table du fournisseur qui est transmise. Les noms des colonnes nécessitent généralement l’ajout d’un p ou c pour indiquer de quelle table elles proviennent, fournisseur ou consommateur, afin de distinguer les noms de colonnes. Cependant, cette exigence est spécifique à chaque modèle. Vous devez communiquer avec le fournisseur du modèle ou examiner le code du modèle pour comprendre quand ces préfixes sont nécessaires.
CALL samooha_by_snowflake_local_db.consumer.run_analysis(
$cleanroom_name,
$template_name,
[], -- This template doesn't accept consumer tables.
['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS'], -- Provider tables.
object_construct( -- Template-specific arguments.
'dimensions', ['p.STATUS'], -- Template takes a variable named 'dimensions'.
'where_clause', 'p.REGION_CODE=$$REGION_10$$' -- Template allows you to pass in a WHERE clause.
-- $$ is used to wrap string literals
)
);
Exemple de code¶
Les fichiers de feuille de calcul suivants montrent comment créer, partager et exécuter une analyse de salle blanche.
Téléchargez les exemples suivants, puis chargez-les sous forme de fichiers de feuilles de calcul dans votre compte Snowflake. Vous avez besoin de comptes distincts pour le fournisseur et le consommateur, chacun avec l’API de salles blanches installée. Consultez les instructions pour charger une feuille de calcul SQL dans votre compte Snowflake.
:download :
Exemple de code fournisseur</samples/clean-rooms/c-run-analysis-p.sql>:download :
Exemple de code consommateur</samples/clean-rooms/c-run-analysis-c.sql>