Analyse de base des données exécutées par les consommateurs

Cette rubrique présente un cas d’utilisation d’analyse de base par le consommateur qui utilise l’API. Le cas d’utilisation 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 sur les 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 un exemple de code complet qui illustre la création, le partage et l’exécution de base de salles blanches entre un fournisseur et un consommateur.

Étapes du fournisseur

La liste suivante montre les principales étapes pour créer, publier et partager une salle blanche avec un consommateur. Les détails de chaque étape suivent la liste.

  1. Configurez l’environnement pour utiliser le rôle et l’entrepôt appropriés.

  2. Créez une nouvelle salle blanche.

  3. Liez des données dans la salle blanche.

  4. Définissez une politique de jointure, qui spécifie les colonnes des données du fournisseur sur lesquelles effectuer une jointure.

  5. Importez des modèles dans la salle blanche.

  6. Définissez une politique de colonnes, qui spécifie quelles colonnes des données du fournisseur peuvent être projetées dans quels modèles.

  7. Ajoutez des comptes qui peuvent servir de consommateurs dans cette salle blanche.

  8. Définissez la version par défaut qui est chargée lorsqu’un consommateur installe la salle blanche.

  9. Publiez la salle blanche pour qu’ensuite tous les consommateurs invités puissent installer et exécuter la salle blanche.

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 entrepôts avec 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;
Copy

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, 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');
Copy

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. Si vous ne définissez aucune politique de jointure sur vos données, toutes les colonnes sont joignables par défaut. Les colonnes protégées par une politique de jointure ne peuvent pas être projetées. Vos propres politiques de jointure ne restreignent pas vos propres requêtes.

Les salles blanches prennent en charge quelques politiques de données que vous pouvez définir sur des 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 créées lorsque vous liez des données. 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’inclusion JinjaSQL de filtres pour appliquer des politiques. Si le modèle n’inclut pas ces filtres de contrôle des politiques, les politiques ne seront pas respectées. Effectuez toujours des contrôles de politique sur les modèles que vous écrivez, et examinez tous les modèles que vous exécutez pour confirmer qu’ils appliquent des 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']);
Copy

En savoir plus sur les politiques de jointure.

Ajouter des modèles à une salle blanche

Un modèle de salle blanche est un modèle JinjaSQL valide qui correspond presque toujours à 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 la plupart d’entre eux sont utilisables dans l’UI uniquement. Par conséquent, vous créerez probablement vos propres modèles personnalisés pour les consommateurs (ou vous-même) à exécuter dans l’API.

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']);
Copy

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. Si vous ne spécifiez pas de politique de colonnes pour vos données, toutes vos colonnes peuvent être projeté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']);
Copy

Partager avec des consommateurs

Le fournisseur définit qui peut accéder à la salle blanche en tant que consommateur. Les consommateurs désignés ne peuvent pas accéder à la salle blanche tant qu’elle n’a pas été publiée. Seuls les comptes ajoutés par le fournisseur peuvent accéder à la salle blanche. Les consommateurs ne peuvent pas partager une salle blanche avec d’autres consommateurs.

L’exemple suivant montre comment partager une salle blanche avec deux consommateurs. La procédure utilise deux listes parallèles, délimitées par des virgules, de localisateurs de comptes consommateurs et d’IDs de comptes de partage de données consommateur.

CALL samooha_by_snowflake_local_db.provider.add_consumers(
  $cleanroom_name,
  'CONSUMER_LOCATOR1,CONSUMER_LOCATOR2',
  'CONSUMER_DATA_SHARING_ACCOUNT_ID1,CONSUMER_DATA_SHARING_ACCOUNT_ID2');
Copy

Partage avec des consommateurs dans d’autres régions d’hébergement Cloud

Si un consommateur et un fournisseur se trouvent dans des régions Cloud différentes, le fournisseur et le consommateur doivent activer l’exécution automatique inter-cloud pour que le consommateur puisse être ajouté à la salle blanche. Vous pouvez voir votre propre région Cloud en exécutant SELECT CURRENT_REGION();. Généralement, vous ne pouvez pas voir la région du consommateur, mais si vous essayez d’ajouter un consommateur dans une autre région, provider.add_consumers échoue avec un message indiquant le problème. Lorsque cet échec se produit, vous devez appeler provider.remove_consumers pour supprimer les comptes qui se trouvent dans une région différente, puis activez l’exécution automatique inter-Cloud et ajoutez à nouveau les comptes interrégionaux.

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.
  );
Copy

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);
Copy

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 de salle blanche de test, 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 :

  1. Configurez l’environnement.

  2. Installez la salle blanche.

  3. Définissez les politiques de jointure et de colonne.

  4. Effectuez l’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 le rôle SAMOOHA_APP_ROLE directement pour un accès API complet, 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 API limité.

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;
Copy

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;
Copy

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>');
Copy

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 similaires à celles du fournisseur. Veillez à utiliser les versions consumer de ces procédures, comme le montre 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']);
Copy

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);
Copy

Note

L’absence de politique de jointure du fournisseur signifie soit que le fournisseur vous autorise à joindre des données sur n’importe quelle colonne de ses données, soit que le fournisseur préférerait que vous ne joigniez pas vos données aux siennes. Parlez au fournisseur pour comprendre son intention s’il ne met pas en œuvre une politique de jointure sur ses données.

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 définissent pas de politiques sur les tables auxquelles ils lient des données.

Néanmoins, nous vous recommandons d’envisager l’ajout de politiques au cas où un fournisseur demanderait à exécuter un modèle plus tard, parce que vous pourriez oublier d’ajouter des politiques appropriées à ce moment-là. Si vous ne définissez pas les propriétés des jointures ou des colonnes sur vos données, des données peuvent être jointes à toutes les colonnes et celles-ci sont projetables.

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 donner des informations sur ce que fait le modèle et les 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 templates available in this clean room.
-- Also shows the template 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
);
Copy

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);
Copy

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 prend à la fois les tables des consommateurs et des fournisseurs, ainsi que deux variables : dimensions, qui est utilisée comme colonne de regroupement, et 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
  )
);
Copy

Exemple de code

Les fichiers de code 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.

  • :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>