Requêtes SQL libres

Un fournisseur de données peut permettre à ses données d’être exposées à un exécutant d’analyse via un modèle ou des requêtes libres. Lorsqu’un fournisseur de données active des requêtes libres sur un ensemble de données, tous les gestionnaires d’analyses ayant accès à l’offre de données peuvent exécuter des requêtes SQL dans leur environnement par rapport à cet ensemble de données.

Les gestionnaires d’analyses et les fournisseurs de données doivent tous deux avoir rejoint la collaboration avant que les données ne soient disponibles.

Vue d’ensemble

Voici les étapes à suivre pour exécuter des requêtes libres sur des données dans une salle blanche :

Fournisseurs de données

  1. Enregistrer une offre de données qui contient un ou plusieurs ensembles de données où allowed_analyses: template_and_freeform_sql est spécifié.

    Si le fournisseur de données souhaite appliquer des politiques Snowflake aux colonnes dans l’ensemble de données, il doit créer ces politiques avant d’enregistrer les données, et associer les politiques aux colonnes de la spécification de l’offre de données.

  2. Lier l’offre de données à la collaboration de la manière standard.

Exécutant d’analyses

Une fois la collaboration installés sur son compte, l’exécutant d’analyse, appelle VIEW_DATA_OFFERINGS. S’il y a une valeur dans la colonne freeform_sql_view_name, l’ensemble de données peut être interrogé directement en utilisant la vue nommée dans cette colonne.

Toute politique répertoriée dans freeform_sql_column_policies sont appliquées aux données par la collaboration. Toutes les politiques appliquées directement aux données sources par le fournisseur de données sont appliquées, mais ne seront pas affichées dans cette colonne.

Les détails sur le fournisseur de données et les étapes d’analyse sont donnés dans les sections suivantes.

Enregistrement d’un ensemble de données pour requête libre (fournisseur de données)

Les étapes suivantes montrent comment activer les requêtes libres lors de l’enregistrement d’une offre de données :

  1. Spécifiez allowed_analyses: template_and_freeform_sql dans la spécification de collaboration. L’ensemble de données peut ainsi être interrogé à l’aide d’un modèle ou d’une requête libre.

    ...
    datasets:
    - alias: customers_view
      data_object_fqn: PROVIDER_DB.DATA_SCH.CUSTOMERS
      object_class: custom
      allowed_analyses: template_and_freeform_sql
      schema_and_template_policies:
        HASHED_EMAIL:
          category: join_standard
          column_type: hashed_email_b64_encoded
    ...
    

    Seules les colonnes répertoriées sous schema_and_template_policies sont disponibles pour les requêtes via des modèles ou des requêtes libres.

  2. Si vous souhaitez appliquer des politiques Snowflake dans des requêtes libres sans les appliquer à vos données sources, procédez comme suit :

    1. Créez vos politiques Snowflake de la manière standard. Ne les appliquez pas à votre table.

      CREATE OR REPLACE AGGREGATION POLICY PROVIDER_DB.DATA_SCH.MIN_GROUP_SIZE_POLICY
        AS () RETURNS AGGREGATION_CONSTRAINT ->
          AGGREGATION_CONSTRAINT(MIN_GROUP_SIZE => 5);
      

      Le rôle qui crée la collaboration doit avoir le privilège USAGE sur la base de données, le schéma et l’objet de politique.

      Ces politiques sont liées dynamiquement ; toutes les modifications que vous apportez à ces politiques affectent immédiatement tous les ensembles de données qui utilisent ces politiques, même si l’offre de données est déjà enregistrée et liée.

    2. Attribuez vos politiques dans la spécification de l’offre de données sous le champ freeform_sql_policies. Important : Tous les noms de colonnes utilisés sous freeform_sql_policies doit utiliser le nom de colonne généré automatiquement si la colonne a été renommée. Le renommage affecte uniquement les colonnes de catégories standard de jointure.

      Ces politiques ne sont pas appliquées directement à la table source, mais uniquement à la vue enregistrée par la collaboration.

      schema_and_template_policies:
        HASHED_EMAIL:                                  # Source column name.
          category: join_standard
          column_type: hashed_email_b64_encoded        # Column is renamed to the column_type value.
        STATUS:
          category: passthrough
        AGE_BAND:
          category: passthrough
        DAYS_ACTIVE:
          category: passthrough
        INCOME_BRACKET:
          category: passthrough
      freeform_sql_policies:          # Apply agg, join, and masking policies created by the data owner to these columns.
        aggregation_policy:
          name: PROVIDER_DB.DATA_SCH.MIN_GROUP_SIZE_POLICY
          entity_keys:
            - HASHED_EMAIL_B64_ENCODED
        join_policy:
          name: PROVIDER_DB.DATA_SCH.EMAIL_JOIN_POLICY
          columns:
            - HASHED_EMAIL_B64_ENCODED    # This is the renamed column.
        masking_policies:
          - name: PROVIDER_DB.DATA_SCH.MASK_INCOME_POLICY
            columns:
              - INCOME_BRACKET
      
  3. Enregistrez l’offre de données de la manière standard en appelant REGISTER_DATA_OFFERING.

Exécution de requêtes libres (exécution d’analyses)

Lorsqu’un exécutant d’analyse appelle VIEW_DATA_OFFERINGS, si une valeur apparaît dans la colonne freeform_sql_view_name, la vue SQL libre peut être interrogée directement, sans utiliser de modèle. Toutes les politiques Snowflake appliquées à la table source ou définies dans la section freeform_sql_policies de l’offre de données sont appliquées dans les requêtes.

CALL SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.COLLABORATION.VIEW_DATA_OFFERINGS($collaboration_name);

Colonne

Valeur

TEMPLATE_VIEW_NAME

data_provider.provider_customers_V1.customers

TEMPLATE_JOIN_COLUMNS

hashed_email_b64_encoded

ANALYSIS_ALLOWED_COLUMNS

STATUS, AGE_BAND, DAYS_ACTIVE, INCOME_BRACKET

ACTIVATION_ALLOWED_COLUMNS

FREEFORM_SQL_VIEW_NAME

SFDCR_FREEFORM_SQL_DEMO.FREEFORM_SQL.DATA_PROVIDER_PROVIDER_CUSTOMERS_V1_CUSTOMERS

FREEFORM_SQL_COLUMN_POLICIES

{
  "aggregation_policy": {"entity_keys": ["HASHED_EMAIL_B64_ENCODED"]},
  "masking_policy": {"columns": ["INCOME_BRACKET"]},
  "join_policy": {"columns": ["HASHED_EMAIL_B64_ENCODED"]},
  "no_policy": {"columns": ["DAYS_ACTIVE", "AGE_BAND", "STATUS"]}
}

SHARED_BY

data_provider

SHARED_WITH

["data_consumer"]

DATA_OFFERING_ID

provider_customers_V1

Vous devez utiliser la valeur de freeform_sql_view_name et pas la valeur de template_view_name.

SELECT status, COUNT(*) AS customer_count
  FROM SFDCR_FREEFORM_SQL_DEMO.FREEFORM_SQL.DATA_PROVIDER_PROVIDER_CUSTOMERS_V1_CUSTOMERS AS t
  GROUP BY status
  ORDER BY customer_count DESC;

Exemple : Collaboration entre deux parties

L’exemple suivant illustre une collaboration à deux parties, où une partie (le « fournisseur ») est le propriétaire de la collaboration et un fournisseur de données pour le consommateur. L’autre partie (le « consommateur ») est un exécutant d’analyses qui peut exécuter le modèle et utiliser les données fournies par le fournisseur, et exécuter les requêtes SQL libres sur les données, sous réserve des politiques définies dans la spécification du fournisseur de données.

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 :