Utilisation du modèle de requête SQL dans l’application Web

L’inclusion d’un modèle de requête SQL dans une salle blanche permet aux consommateurs d’écrire sous forme libre de SQL pour interroger les données dans la salle blanche. Lors de l’utilisation du modèle de requête SQL, les requêtes des consommateurs doivent répondre à certaines exigences pour renvoyer des résultats. Ces exigences sont déterminées par la manière dont le fournisseur de données protège ses tables avec des politiques de confidentialité des données.

Politiques de modèles

Les politiques suivantes sont appliquées par le modèle de requête SQL en vue de contrôler la manière dont le consommateur peut interroger les données :

Politique

Description

Politique de projection

Contrôle si une requête peut projeter une colonne, c’est-à-dire inclure la colonne dans une instruction SELECT. Dans une salle blanche, les consommateurs ne peuvent pas projeter une colonne avec une politique de projection.

Politique d’agrégation

Nécessite qu’une requête agrège des données afin de renvoyer des résultats. Chaque table accessible avec un modèle de requête SQL a une politique d’agrégation.

Une politique d’agrégation protège la confidentialité des entités en exigeant que chaque groupe d’agrégation contienne un nombre minimum d’entités. Une entité est identifiée par une valeur distincte dans une colonne. Par exemple, toutes les lignes avec la valeur joe@company.com dans la colonne email peuvent appartenir à la même entité.

Dans les salles blanches, la politique d’agrégation peut protéger plusieurs entités dans la table. Par exemple, la politique peut exiger qu’un groupe d’agrégation contienne au moins 5 ménages et 10 utilisateurs, où les ménages et les utilisateurs sont tous deux des entités.

Important

Les politiques de jointure, qui sont ajoutées à la salle blanche à l’étape 2 du processus de création, ne contrôlent pas les jointures lors de l’utilisation du modèle de requête SQL. Au lieu de cela, la salle blanche applique une politique de projection et une politique d’agrégation à chaque colonne sélectionnée comme colonne de jointure. Unre requête SQL peut joindre n’importe quelle colonne, pas seulement celles sélectionnées avec la liste déroulante Join Columns.

Ajouter un modèle de requête SQL pour une salle blanche

Le processus général de configuration d’une salle blanche afin que les consommateurs puissent utiliser le modèle de requête SQL pour exécuter des analyses comprend les éléments suivants :

  1. Démarrez le processus de création de salle blanche.

  2. À l’étape 2, utilisez la liste déroulante Join Columns pour sélectionner les colonnes que vous souhaitez protéger avec des politiques d’agrégation et de projection. Vos sélections n’auront aucun effet sur les colonnes pouvant être utilisées comme clés de jointure.

  3. À l’étape 3, Horizontal » SQL Query dans la liste des modèles, puis configurez le modèle de requête SQL.

  4. Partagez la salle blanche avec un consommateur.

Configurer le modèle de requête SQL

Après avoir ajouté le modèle de requête SQL à la salle blanche, vous pouvez le configurer en effectuant les actions suivantes :

Autoriser le consommateur à utiliser une colonne de jointure dans une instruction SELECT

Utilisez la liste déroulante Aggregation Policy Columns pour sélectionner le nom de la colonne, qui est étiqueté avec Join Policy.

Permettre au consommateur de SELECT et filtrer sur une colonne non jointe

Utilisez la liste déroulante Fully Permitted Columns pour sélectionner le nom de la colonne.

Définir des entités supplémentaires

Chaque colonne avec une politique de jointure identifie une entité protégée par la politique d’agrégation de la table. Cela signifie que chaque groupe d’agrégation doit contenir un nombre minimum de valeurs distinctes de chaque colonne de jointure.

Vous pouvez désigner des colonnes supplémentaires comme entités d’identification afin que chaque groupe d’agrégation contienne un nombre minimum de valeurs distinctes de ces colonnes. Par exemple, supposons que HEM est une politique de jointure. La configuration par défaut de la politique d’agrégation force les requêtes à agréger les données dans des groupes contenant une certaine quantité de valeurs distinctes de la colonne HEM. Supposons maintenant que vous ajoutiez la colonne FIRST_NAME comme colonne de politique d’agrégation. Désormais, chaque groupe d’agrégation doit contenir un certain nombre de valeurs distinctes des colonnes HEM et un certain nombre de valeurs distinctes de la colonne FIRST_NAME.

Pour ajouter une colonne qui identifie une entité, utilisez la liste déroulante Aggregation Policy Columns pour sélectionner le nom de la colonne.

Note

Il faut savoir que le fait de spécifier qu’une colonne identifie une entité permet également au consommateur de filtrer et de projeter cette colonne.

Modifier le nombre minimum d’entités

Lorsqu’une colonne identifie une entité, chaque groupe d’agrégation doit contenir un certain nombre de valeurs distinctes de la colonne. Pour ajuster le nombre de valeurs distinctes d’une entité :

  1. Trouvez la section Privacy Settings » Aggregation Policies.

  2. Trouvez la colonne, puis augmentez ou diminuez son Threshold. Plus le seuil est élevé, plus les valeurs distinctes doivent être renvoyées dans chaque groupe d’agrégation, ce qui offre des protections de confidentialité plus fortes pour l’entité.

Exécution d’une analyse à l’aide d’un modèle de requête SQL

Utilisez les informations de cette section pour rédiger une requête réussie dans le modèle de requête SQL.

Quelles sont les colonnes sur lesquelles je peux effectuer des jointures ?

Vous pouvez joindre n’importe quelle colonne.

Exigence d’agrégation

Chaque table dans une salle blanche qui utilise le modèle de requête SQL a une politique d’agrégation. Par conséquent, toutes les requêtes exécutées à l’aide du modèle de requête SQL doit renvoyer des résultats agrégés.

Pour obtenir des instructions sur la manière d’écrire une requête réussie sur des données protégées par une politique d’agrégation, consultez :

Quelles colonnes puis-je projeter ?

Les requêtes exécutées à l’aide des modèles de requête SQL ont des restrictions sur les colonnes qui peuvent être projetées (utilisées dans une instruction SELECT).

Pour déterminer si votre requête peut projeter une colonne :

  1. Dans la section Query Configurations, trouvez la vignette Tables.

  2. Utilisez la liste déroulante pour sélectionner une table.

  3. Recherchez les colonnes comportant une étiquette de politique de projection. Vous pouvez projeter toutes les colonnes répertoriées, à l’exception de celles avec une politique de projection.

Sur quelles colonnes puis-je filtrer ?

Pour déterminer sur quelles colonnes votre requête peut filtrer :

  1. Dans la section Query Configurations, trouvez la vignette Tables.

  2. Utilisez la liste déroulante pour sélectionner une table et examiner les colonnes. Vous pouvez filtrer sur toutes les colonnes répertoriées.

Afficher les résultats

Pour exécuter votre requête dans l’application Web, sélectionnez Run, puis nommez et planifiez éventuellement l’exécution de votre requête. Vérifiez le statut de la requête dans la liste Analyses and Queries pour voir quand la requête est terminée. Sélectionnez une requête terminée pour voir les résultats. Les requêtes réussies affichent un tableau de résultats. Si le tableau des résultats répond aux exigences spécifiques détaillées ci-après, les résultats peuvent également être affichés dans un graphique. Snowflake propose plusieurs types de graphiques, notamment des graphiques à barres, à lignes et à secteurs ; choisissez le format de sortie en sélectionnant le bouton approprié dans la section des résultats.

Exigences graphiques

Pour que Snowflake puisse générer un graphique :

  • Le tableau des résultats doit inclure au moins une colonne de mesure (numérique) et une colonne de dimension (catégorie).

  • Le nom de la colonne de mesure doit avoir le préfixe ou le suffixe suivant (insensible à la casse) :

    • Préfixes de nom de colonne :

      • COUNT

      • SUM

      • AVG

      • MIN

      • MAX

      • OUTPUT

      • OVERLAP

    • Suffixe du nom de la colonne :

      • _OVERLAP

Snowflake génère un graphique en utilisant la première colonne de mesure éligible et la première colonne de dimension dans une table de résultats.

Limitations

  • Une clause ORDER BY n’a aucun effet sur la manière dont les résultats de l’analyse sont affichés.

Exemple de requêtes

Utilisez cette section pour mieux comprendre ce qu’une requête peut et ne peut pas inclure lors de l’exécution d’une analyse avec le modèle de requête SQL.

Requêtes sans fonction d’agrégation

Dans certaines circonstances, vous pouvez renvoyer des valeurs sans utiliser de fonction d’agrégation.

Autorisé

Non autorisé

SELECT gender, regions
  FROM TABLE sample_db.demo.customer
  GROUP BY gender, region;
Copy
SELECT gender, regions
  FROM TABLE sample_db.demo.customer;
Copy
Expressions de table communes (CTEs)

Autorisé

Non autorisé

WITH audience AS
  (SELECT COUNT(DISTINCT t1.hashed_email),
    t1.status
    FROM provider_db.overlap.customers t1
    JOIN consumer_db.overlap.customers t2
      ON t1.hashed_email = t2.hashed_email
    GROUP BY t1.status);

SELECT * FROM audience;
Copy
WITH audience AS
  (SELECT t1.hashed_email,
    t1.status
    FROM provider_db.overlap.customers quoted t1
    JOIN consumer_db.overlap.customers t2
      ON t1.hashed_email = t2.hashed_email
    GROUP BY t1.status)

SELECT * FROM audience
Copy
CREATE, ALTER, TRUNCATE

Une requête ne peut pas utiliser CREATE, ALTER ou TRUNCATE.

Requête avec jointures

Autorisé

SELECT p.education_level,
  c.status,
  AVG(p.days_active),
  COUNT(DISTINCT p.age_band)
  FROM  sample_database_preprod.demo.customers c
  INNER JOIN
  sample_database_preprod.demo.customers p
    ON  c.hashed_email = p.hashed_email
  GROUP BY ALL;
Copy
DATE_TRUNC

Autorisé

SELECT COUNT(*),
  DATE_TRUNC('week', date_joined) AS week
  FROM consumer_sample_database.audience_overlap.customers
  GROUP BY week;
Copy
Identificateurs avec guillemets

Autorisé

SELECT COUNT(DISTINCT t1.”hashed_email”)
  FROM provider_sample_database.audience_overlap."customers quoted" t1
  INNER JOIN
  consumer_sample_database.audience_overlap.customers t2
    ON t1."hashed_email" = t2.hashed_email;
Copy