Restreindre l'accès aux données à l'aide de règles d'analyse

Ce document fournit des informations générales sur les règles d'analyse dans GoogleSQL pour BigQuery.

Qu'est-ce qu'une règle d'analyse  ?

Une règle d'analyse applique des règles pour le partage de données. Une règle représente une condition qui doit être remplie avant qu'une requête puisse être exécutée. Avec BigQuery, vous pouvez appliquer une règle d'analyse à une vue à l'aide d'une data clean room ou en appliquant la règle d'analyse directement à la vue. Lorsque vous appliquez une règle d'analyse, vous exigez que toutes les personnes qui interrogent cette vue respectent cette règle d'analyse sur la vue. Si la règle d'analyse est satisfaite, la requête génère un résultat conforme à la règle d'analyse. Si la requête ne satisfait pas la règle d'analyse, une erreur est générée.

Règles d'analyse compatibles

Les règles d'analyse suivantes sont acceptées :

  • Règle d'analyse du seuil d'agrégation : applique le nombre minimal d'entités distinctes devant être présentes dans un ensemble de données. Vous pouvez appliquer cette règle au niveau d'une vue, à l'aide d'instructions DDL ou d'une data clean room. Cette règle est compatible avec la règle de seuil d'agrégation et la règle de restriction de jointure.

  • Règle d'analyse de confidentialité différentielle : applique un budget de confidentialité, qui limite les données divulguées à un abonné lorsque les données sont protégées par la confidentialité différentielle. Vous pouvez appliquer cette règle au niveau d'une vue, à l'aide d'instructions DDL ou d'une data clean room. Cette règle est compatible avec les règles de confidentialité différentielle et de restriction de la jointure.

  • Règle d'analyse de la superposition de listes : les lignes qui se chevauchent ne peuvent être interrogées qu'après une opération de jointure, ce qui est conforme à la règle. Vous pouvez appliquer cette règle au niveau d'une vue, à l'aide d'instructions ou d'une data clean room. Cette règle est compatible avec la règle de restriction de la participation.

Règle d'analyse du seuil d'agrégation

Une règle d'analyse du seuil d'agrégation applique le nombre minimal d'entités distinctes qui doivent contribuer à une ligne de sortie d'une requête, de sorte que cette ligne soit incluse dans les résultats de la requête.

Lorsqu'elle est appliquée, la règle d'analyse du seuil d'agrégation regroupe les données entre les dimensions, tout en garantissant que le seuil d'agrégation est atteint. Elle compte le nombre d'unités de confidentialité distinctes (représentées par la colonne d'unité de confidentialité) pour chaque groupe et ne génère que les groupes dont le nombre d'unités de confidentialité distincte respecte le seuil d'agrégation.

Une vue qui inclut cette règle d'analyse doit inclure la règle de seuil d'agrégation et peut éventuellement inclure la règle de restriction de jointure.

Définir une règle d'analyse du seuil d'agrégation pour une vue

Vous pouvez définir une règle d'analyse du seuil d'agrégation pour une vue dans une data clean room ou avec l'instruction CREATE VIEW :

CREATE OR REPLACE VIEW VIEW_NAME
  OPTIONS (
    privacy_policy= '{
      "aggregation_threshold_policy": {
        "threshold" : THRESHOLD,
        "privacy_unit_column": "PRIVACY_UNIT_COLUMN"
      },
      "join_restriction_policy": {
        "join_condition": "JOIN_CONDITION",
        "join_allowed_columns": JOIN_ALLOWED_COLUMNS
      }
    }'
  )
  AS QUERY;

Définitions :

  • aggregation_threshold_policy : règle de seuil d'agrégation pour la règle d'analyse du seuil d'agrégation.

    • VIEW_NAME : chemin d'accès et nom de la vue.

    • THRESHOLD : nombre minimal d'unités de confidentialité distinctes qui doivent contribuer à chaque ligne dans les résultats de la requête. Si une ligne potentielle ne respecte pas ce seuil, elle est omise des résultats de la requête.

    • PRIVACY_UNIT_COLUMN : représente la colonne d'unité de confidentialité. Une colonne d'unités de confidentialité est un identifiant unique pour une unité de confidentialité. Une unité de confidentialité est une valeur de la colonne d'unité de confidentialité qui représente l'entité dans un ensemble de données protégées.

      Vous ne pouvez utiliser qu'une seule colonne d'unité de confidentialité. Le type de données de cette colonne doit être groupable.

      Les valeurs de la colonne d'unité de confidentialité ne peuvent pas être projetées directement via une requête. Vous ne pouvez utiliser que des fonctions d'agrégation compatibles avec les règles d'analyse pour agréger les données de cette colonne.

  • join_restriction_policy (facultatif) : règle de restriction de jointure facultative pour la règle d'analyse du seuil d'agrégation.

    • JOIN_CONDITION : type de restriction de jointure à appliquer à une vue. Il peut s'agir de l'une des valeurs suivantes :

      • JOIN_ALL : toutes les colonnes de join_allowed_columns doivent être jointes en interne pour que cette vue soit interrogée.

      • JOIN_ANY : au moins une colonne de join_allowed_columns doit être jointe pour que cette vue soit interrogée.

      • JOIN_BLOCKED : cette vue ne peut être jointe à aucune colonne. Dans ce cas, ne définissez pas join_allowed_columns.

      • JOIN_NOT_REQUIRED : une jointure n'est pas nécessaire pour interroger cette vue. Si une jointure est utilisée, seules les colonnes de join_allowed_columns peuvent être utilisées.

    • JOIN_ALLOWED_COLUMNS : colonnes pouvant faire partie d'une opération de jointure.

  • QUERY : requête de la vue.

Exemple :

Dans l'exemple suivant, une règle d'analyse du seuil d'agrégation est créée sur une vue appelée ExamView. ExamView fait référence à une table appelée ExamTable :

CREATE OR REPLACE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"aggregation_threshold_policy": {"threshold": 3, "privacy_unit_column": "last_name"}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

Pour examiner la syntaxe privacy_policy de CREATE VIEW, consultez la liste OPTIONS dans CREATE VIEW.

Mettre à jour une règle d'analyse du seuil d'agrégation pour une vue

Vous pouvez modifier la règle d'analyse du seuil d'agrégation pour une vue dans une data clean room ou avec l'instruction ALTER VIEW :

ALTER VIEW VIEW_NAME
SET OPTIONS (
  privacy_policy= '{
    "aggregation_threshold_policy": {
      "threshold" : THRESHOLD,
      "privacy_unit_column": "PRIVACY_UNIT_COLUMN"
    }
  }'
)

Pour en savoir plus sur les valeurs que vous pouvez définir pour les règles de confidentialité dans la syntaxe précédente, consultez Définir une règle d'analyse de seuil d'agrégation pour une vue.

Exemple :

Dans l'exemple suivant, une règle d'analyse du seuil d'agrégation est mise à jour sur une vue appelée ExamView.

ALTER VIEW mydataset.ExamView
SET OPTIONS (
  privacy_policy= '{"aggregation_threshold_policy": {"threshold": 50, "privacy_unit_column": "last_name"}}'
);

Pour examiner la syntaxe de privacy_policy pour ALTER VIEW, consultez la liste OPTIONS dans ALTER VIEW SET OPTIONS.

Interroger une vue associée à une règle d'analyse du seuil d'agrégation

Vous pouvez interroger une vue dotée d'une règle d'analyse de seuil d'agrégation à l'aide de la clause AGGREGATION_THRESHOLD. La requête doit inclure des fonctions d'agrégation. Vous ne pouvez utiliser que les fonctions d'agrégation compatibles avec le seuil d'agrégation dans cette requête.

Exemple :

Dans l'exemple suivant, une règle d'analyse par seuil d'agrégation est interrogée sur une vue appelée ExamView:

SELECT WITH AGGREGATION_THRESHOLD
  test_id, COUNT(DISTINCT last_name) AS student_count
FROM mydataset.ExamView
GROUP BY test_id;

/*---------+---------------*
 | test_id | student_count |
 +---------+---------------+
 | P91     | 3             |
 | U25     | 4             |
 *---------+---------------*/

La règle d'analyse du seuil d'agrégation peut également inclure la règle de restriction de jointure. Pour savoir comment utiliser la règle de restriction de jointure avec une règle d'analyse, consultez Règle de restriction de jointure dans les règles d'analyse.

Pour consulter d'autres exemples sur la clause AGGREGATION_THRESHOLD, reportez-vous à la section Clause AGGREGATION_THRESHOLD.

Règle d'analyse de confidentialité différentielle

La règle d'analyse de confidentialité différentielle applique un budget de confidentialité, qui limite les données présentées à un abonné lorsque celles-ci sont protégées par la confidentialité différentielle. Un budget de confidentialité empêche tout abonné d'interroger les données partagées lorsque la somme des valeurs epsilon ou delta de toutes les requêtes atteint la valeur epsilon totale ou delta totale. Vous pouvez utiliser cette règle d'analyse dans une vue.

Une vue qui inclut cette règle d'analyse doit inclure la Règle de confidentialité différentielle et peut éventuellement inclure la Règle de restriction de jointure.

Définir une règle d'analyse de confidentialité différentielle pour une vue

Vous pouvez définir une règle d'analyse de confidentialité différentielle pour une vue dans une data clean room ou avec l'instruction CREATE VIEW :

CREATE OR REPLACE VIEW VIEW_NAME
  OPTIONS (
    privacy_policy= '{
      "differential_privacy_policy": {
        "privacy_unit_column": "PRIVACY_UNIT_COLUMN",
        "max_epsilon_per_query": MAX_EPSILON_PER_QUERY,
        "epsilon_budget": EPSILON_BUDGET,
        "delta_per_query": DELTA_PER_QUERY,
        "delta_budget": DELTA_BUDGET,
        "max_groups_contributed": MAX_GROUPS_CONTRIBUTED
      },
      "join_restriction_policy": {
        "join_condition": "JOIN_CONDITION",
        "join_allowed_columns": JOIN_ALLOWED_COLUMNS
      }
    }'
  )
  AS QUERY;

Définitions :

  • differential_privacy_policy: règles de confidentialité différentielle pour la règle d'analyse de confidentialité différentielle.

    • PRIVACY_UNIT_COLUMN : colonne qui identifie l'entité d'un ensemble de données protégé à l'aide d'une règle d'analyse de la confidentialité. Il s'agit d'une chaîne JSON.

    • MAX_EPSILON_PER_QUERY: détermine la quantité de bruit ajoutée aux résultats par requête et évite que le nombre total d'epsilon soit atteint par une seule requête. Cette valeur est un nombre JSON compris entre 0.001 et 1e+15.

    • EPSILON_BUDGET: budget epsilon qui représente la valeur epsilon totale pouvant être utilisée dans toutes les requêtes différentiellement privées sur la vue. Cette valeur doit être supérieure à MAX_EPSILON_PER_QUERY, et il s'agit d'un nombre JSON compris entre 0.001 et 1e+15.

    • DELTA_PER_QUERY : probabilité qu'une ligne du résultat ne soit pas différentiellement privée avec epsilon. Cette valeur est un nombre JSON compris entre 1e-15 et 1.

    • DELTA_BUDGET: budget delta, qui représente le delta total pouvant être utilisé dans toutes les requêtes différentiellement privées sur la vue. Cette valeur doit être supérieure à DELTA_PER_QUERY, et il s'agit d'un nombre JSON compris entre 1e-15 et 1000.

    • MAX_GROUPS_CONTRIBUTED (facultatif) : limite le nombre de groupes auxquels une entité d'une colonne d'unité de confidentialité peut contribuer. Cette valeur doit être un entier JSON non négatif.

  • join_restriction_policy (facultatif): règle de restriction de jointure facultative pour la règle d'analyse de confidentialité différentielle.

    • JOIN_CONDITION : type de restriction de jointure à appliquer à une vue. Il peut s'agir de l'une des valeurs suivantes :

      • JOIN_ALL : toutes les colonnes de join_allowed_columns doivent être jointes en interne pour que cette vue soit interrogée.

      • JOIN_ANY : au moins une colonne de join_allowed_columns doit être jointe pour que cette vue soit interrogée.

      • JOIN_BLOCKED : cette vue ne peut être jointe à aucune colonne. Dans ce cas, ne définissez pas join_allowed_columns.

      • JOIN_NOT_REQUIRED : une jointure n'est pas nécessaire pour interroger cette vue. Si une jointure est utilisée, seules les colonnes de join_allowed_columns peuvent être utilisées.

    • JOIN_ALLOWED_COLUMNS : colonnes pouvant faire partie d'une opération de jointure.

  • QUERY : requête de la vue.

Exemple :

Dans l'exemple suivant, une règle d'analyse de confidentialité différentielle est créée sur une vue appelée ExamView. ExamView fait référence à une table appelée ExamTable :

CREATE OR REPLACE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"differential_privacy_policy": {"privacy_unit_column": "last_name", "max_epsilon_per_query": 1000.0, "epsilon_budget": 10000.1, "delta_per_query": 0.01, "delta_budget": 0.1, "max_groups_contributed": 2}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

-- NOTE: Delta and epsilon parameters are set very high due to the small
-- dataset. In practice, these should be much smaller.

Pour examiner la syntaxe privacy_policy de CREATE VIEW, consultez la liste OPTIONS dans CREATE VIEW.

Mettre à jour une règle d'analyse de confidentialité différentielle pour une vue

Vous pouvez modifier la règle d'analyse de confidentialité différentielle pour une vue dans une data clean room ou avec l'instruction suivante ALTER VIEW :

ALTER VIEW VIEW_NAME
SET OPTIONS (
  privacy_policy= '{
    "differential_privacy_policy": {
      "privacy_unit_column": "PRIVACY_UNIT_COLUMN",
      "max_epsilon_per_query": MAX_EPSILON_PER_QUERY,
      "epsilon_budget": EPSILON_BUDGET,
      "delta_per_query": DELTA_PER_QUERY,
      "delta_budget": DELTA_BUDGET,
      "max_groups_contributed": MAX_GROUPS_CONTRIBUTED
    }
  }'
)

Pour en savoir plus sur les valeurs que vous pouvez définir pour les règles de confidentialité dans la syntaxe précédente, consultez Définir une règle d'analyse de confidentialité différentielle pour une vue.

Exemple :

Dans l'exemple suivant, une règle d'analyse de la confidentialité différentielle est mise à jour sur une vue appelée ExamView.

ALTER VIEW mydataset.ExamView
SET OPTIONS(
  privacy_policy= '{"differential_privacy_policy": {"privacy_unit_column": "last_name", "max_epsilon_per_query": 0.01, "epsilon_budget": 1000.0, "delta_per_query": 0.05, "delta_budget": 0.1, "max_groups_contributed": 2}}'
);

-- NOTE: Delta and epsilon parameters are set very high due to the small
-- dataset. In practice, these should be much smaller.

Pour examiner la syntaxe de privacy_policy pour ALTER VIEW, consultez la liste OPTIONS dans ALTER VIEW SET OPTIONS.

Interroger une vue associée à une règle d'analyse de confidentialité différentielle

Vous pouvez interroger une vue comportant une règle d'analyse de confidentialité différentielle à l'aide de la clause DIFFERENTIAL_PRIVACY. Pour examiner la syntaxe et obtenir des exemples supplémentaires de la clause DIFFERENTIAL_PRIVACY, consultez la page Clause DIFFERENTIAL_PRIVACY.

Exemple :

Dans l'exemple suivant, une règle d'analyse de confidentialité différentielle est interrogée sur une vue appelée ExamView. Les données différentiellement privées sont normalement renvoyées avec succès de ExamView, car epsilon, delta et max_groups_contributed satisfont toutes aux conditions de la règle d'analyse différentielle dans ExamView.

-- Query an analysis–rule enforced view called ExamView.
SELECT
  WITH DIFFERENTIAL_PRIVACY
    test_id,
    AVG(test_score) AS average_test_score
FROM mydataset.ExamView
GROUP BY test_id;

-- Results will vary.
/*---------+--------------------*
 | test_id | average_test_score |
 +---------+--------------------+
 | P91     | 512.627693163311   |
 | C83     | 506.01565971561649 |
 | U25     | 524.81202728847893 |
 *---------+--------------------*/

Bloquer une requête avec un epsilon hors limites

Epsilon peut être utilisé pour ajouter ou supprimer du bruit. Plus le nombre epsilon est élevé, plus le bruit est ajouté. Si vous souhaitez vous assurer qu'une requête différentiellement privée comporte un minimum de bruit, vérifiez attentivement la valeur de max_epsilon_per_query dans votre règle d'analyse de confidentialité différentielle.

Exemple :

Dans la requête suivante, la requête est bloquée avec une erreur, car la valeur de epsilon dans la clause DIFFERENTIAL_PRIVACY est supérieure à max_epsilon_per_query dans ExamView:

-- Create a view that includes a table called ExamTable.
CREATE OR REPLACE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"differential_privacy_policy": {"privacy_unit_column": "last_name", "max_epsilon_per_query": 10.01, "epsilon_budget": 1000.0, "delta_per_query": 0.01, "delta_budget": 0.1, "max_groups_contributed": 2}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

-- NOTE: Delta and epsilon parameters are set very high due to the small
-- dataset. In practice, these should be much smaller.

Une fois la vue créée, attendez brièvement le temps d'exécuter la requête suivante :

-- Error: Epsilon is too high: 1e+20, policy for table mydataset.
-- ExamView allows max 10.01
SELECT
  WITH DIFFERENTIAL_PRIVACY
    OPTIONS(epsilon=1e20)
    test_id,
    AVG(test_score) AS average_test_score
FROM mydataset.ExamView
GROUP BY test_id;

Bloquer les requêtes ayant dépassé un budget epsilon

Epsilon peut être utilisé pour ajouter ou supprimer du bruit. Une valeur epsilon plus faible augmente le bruit, et une valeur plus élevée réduit le bruit. Même lorsque le bruit est important, plusieurs requêtes portant sur les mêmes données peuvent à terme révéler la version sans bruit des données. Pour éviter cela, vous pouvez créer un budget epsilon. Si vous souhaitez ajouter un budget epsilon, vérifiez la valeur de epsilon_budget dans la règle d'analyse de confidentialité différentielle de votre vue.

Exemple :

Exécutez la requête suivante trois fois. La troisième fois, la requête est bloquée, car la valeur epsilon totale utilisée est de 30, mais epsilon_budget dans ExamView n'autorise que 25.6:

-- Create a view that includes a table called ExamTable.
CREATE OR REPLACE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"differential_privacy_policy": {"privacy_unit_column": "last_name", "max_epsilon_per_query": 10.01, "epsilon_budget": 25.6, "delta_per_query": 0.01, "delta_budget": 0.1, "max_groups_contributed": 2}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

-- NOTE: Delta and epsilon parameters are set very high due to the small
-- dataset. In practice, these should be much smaller.

Une fois la vue créée, attendez brièvement puis exécutez la requête suivante trois fois :

-- Error after three query runs: Privacy budget is not sufficient for
-- table 'mydataset.ExamView' in this query.

SELECT
  WITH DIFFERENTIAL_PRIVACY
    OPTIONS(epsilon=10)
    test_id,
    AVG(test_score) AS average_test_score
FROM mydataset.ExamView
GROUP BY test_id;

Répertorier la règle d'analyse de chevauchement

Seules les lignes qui se chevauchent peuvent être interrogées après une opération de jointure, conformément à la règle de chevauchement de liste. Vous pouvez appliquer cette règle au niveau d'une vue, à l'aide d'instructions DDL ou d'une data clean room.

Une vue qui inclut cette règle d'analyse ne doit inclure que la règle de restriction des jointures.

Définir une règle d'analyse de chevauchement de listes pour une vue

Vous pouvez définir une règle d'analyse de chevauchement de liste pour une vue dans une data clean room ou avec l'instruction CREATE VIEW :

CREATE OR REPLACE VIEW VIEW_NAME
  OPTIONS (
    privacy_policy= '{
      "join_restriction_policy": {
        "join_condition": "JOIN_CONDITION",
        "join_allowed_columns": JOIN_ALLOWED_COLUMNS
      }
    }'
  )
  AS QUERY;

Définitions :

  • join_restriction_policy: règle de restriction de jointure pour la règle d'analyse de chevauchement de liste.

    • JOIN_CONDITION : type de chevauchement de liste à appliquer à une vue. Il peut s'agir de l'une des valeurs suivantes :

      • JOIN_ALL : toutes les colonnes de join_allowed_columns doivent être jointes en interne pour que cette vue soit interrogée.

      • JOIN_ANY : au moins une colonne de join_allowed_columns doit être jointe pour que cette vue soit interrogée.

    • JOIN_ALLOWED_COLUMNS : colonnes pouvant faire partie d'une opération de jointure.

  • QUERY : requête de la vue.

Exemple :

Dans l'exemple suivant, une règle d'analyse de chevauchement de liste est créée dans une vue appelée ExamView. ExamView fait référence à une table appelée ExamTable :

-- Create a view that includes a table called ExamTable.
CREATE OR REPLACE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"join_restriction_policy": {"join_condition": "JOIN_ANY", "join_allowed_columns": ["test_id", "test_score"]}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

Mettre à jour une règle d'analyse de chevauchement de listes pour une vue

Vous pouvez modifier la règle d'analyse de chevauchement de liste pour une vue avec une data clean room ou avec l'instruction ALTER VIEW :

ALTER VIEW VIEW_NAME
SET OPTIONS (
  privacy_policy= '{
    "join_restriction_policy": {
      "join_condition": "JOIN_CONDITION",
      "join_allowed_columns": JOIN_ALLOWED_COLUMNS
    }
  }'
)

Pour en savoir plus sur les valeurs que vous pouvez définir pour la règle de confidentialité dans la syntaxe précédente, consultez la section Définir une règle d'analyse de chevauchement de liste pour une vue.

Exemple :

Dans l'exemple suivant, une règle d'analyse de chevauchement de listes est mise à jour sur une vue appelée ExamView.

ALTER VIEW mydataset.ExamView
SET OPTIONS(
  privacy_policy= '{"join_restriction_policy": {"join_condition": "JOIN_ALL", "join_allowed_columns": ["test_id", "test_score"]}}'
);

Pour examiner la syntaxe de privacy_policy pour ALTER VIEW, consultez la liste OPTIONS dans ALTER VIEW SET OPTIONS.

Interroger une vue associée à une règle d'analyse de chevauchement de liste

Vous pouvez effectuer une opération de jointure sur une vue dotée d'une règle d'analyse de chevauchement de liste. Pour examiner la syntaxe de l'opération JOIN, consultez la section Opération JOIN.

Bloquer une opération de jointure sans chevauchement

Vous pouvez bloquer une opération de jointure si elle n'inclut pas au moins un chevauchement avec une colonne obligatoire.

Exemple :

Dans la requête suivante, une vue appelée ExamView est jointe à une table appelée StudentTable. Étant donné que la vue contient la règle d'analyse de chevauchement de liste JOIN_ANY, au moins une ligne chevauchant de ExamView et StudentTable est requise. Comme il existe au moins un chevauchement, la requête s'exécute correctement.

-- Create a view that includes a table called ExamTable.
CREATE OR REPLACE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"join_restriction_policy": {"join_condition": "JOIN_ANY", "join_allowed_columns": ["test_score", "last_name"]}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

-- Query a view called ExamView and a table called StudentTable.
SELECT *
FROM mydataset.ExamView INNER JOIN mydataset.StudentTable USING (test_score);

/*------------+-----------+---------+-------------*
 | test_score | last_name | test_id | last_name_1 |
 +------------+-----------+---------+-------------+
 | 490        | Ivanov    | U25     | Ivanov      |
 | 500        | Wang      | U25     | Wang        |
 | 510        | Hansen    | P91     | Hansen      |
 | 550        | Silva     | U25     | Silva       |
 | 580        | Devi      | U25     | Devi        |
 *------------+-----------+---------+-------------*/

Bloquer une opération de jointure interne sans chevauchement complet

Vous pouvez bloquer une opération de jointure si elle n'inclut pas de chevauchement avec toutes les colonnes obligatoires.

Exemple :

Dans l'exemple suivant, une opération de jointure est tentée sur une vue appelée ExamView et une table appelée StudentTable, mais la requête échoue. L'échec se produit car la règle d'analyse de chevauchement de liste ExamView nécessite la jointure sur toutes les colonnes présentes dans la règle de restriction de jointure. Étant donné que la table appelée StudentTable ne contient pas ces colonnes, toutes les lignes ne se chevauchent pas et une erreur est générée.

-- Create a view that includes ExamTable.
CREATE OR REPLACE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"join_restriction_policy": {"join_condition": "JOIN_ALL", "join_allowed_columns": ["test_score", "last_name"]}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

-- Query error: Joining must occur on all of the following columns
-- [test_score, last_name] on table mydataset.ExamView.
SELECT *
FROM mydataset.ExamView INNER JOIN mydataset.StudentTable USING (last_name);

Utiliser une règle de restriction de jointure avec une autre règle

La règle de restriction de jointure peut être utilisée avec d'autres règles du seuil d'agrégation et des règles d'analyse de confidentialité différentielle. Toutefois, une fois que vous avez utilisé une règle de restriction de jointure avec une autre règle, vous ne pouvez plus la modifier par la suite.

Exemple :

Dans l'exemple suivant, une règle de restriction de jointure est utilisée dans une règle d'analyse du seuil d'agrégation:

-- Create a view that includes a table called ExamTable.
CREATE OR REPLACE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"aggregation_threshold_policy":{"threshold": 3, "privacy_unit_column": "last_name"}, "join_restriction_policy": {"join_condition": "JOIN_ANY", "join_allowed_columns": ["test_id", "test_score"]}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

Bloquer une opération de jointure sans colonne obligatoire

Vous pouvez bloquer une opération de jointure si elle n'inclut pas au moins une colonne obligatoire. Pour ce faire, incluez les parties suivantes dans votre règle d'analyse de chevauchement de liste :

"join_restriction_policy": {
  "join_condition": "JOIN_ANY",
  "join_allowed_columns": ["column_name", ...]
}

Exemple :

Dans la requête suivante, la requête est bloquée avec une erreur, car elle ne contient aucune opération de jointure sur la colonne test_score ou test_id de ExamView et StudentTable:

-- Create a view that includes a table called ExamTable.
CREATE OR REPLACE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"aggregation_threshold_policy": {"threshold": 3, "privacy_unit_column": "last_name"}, "join_restriction_policy": {"join_condition": "JOIN_ANY", "join_allowed_columns": ["test_score", "test_id"]}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

-- Query error: Joining must occur on at least one of the following columns
-- [test_score, test_id] on table mydataset.ExamView.
SELECT *
FROM mydataset.ExamView INNER JOIN mydataset.StudentTable USING (last_name);

Pour exécuter la requête précédente, dans la clause USING, remplacez last_name par test_score.

Bloquer une requête sans opération de jointure

Si la requête doit comporter une opération de jointure, vous pouvez la bloquer si aucune opération de jointure n'est présente à l'aide de l'une des règles d'analyse de chevauchement de liste suivantes :

"join_restriction_policy": {
  "join_condition": "JOIN_NOT_REQUIRED"
}
"join_restriction_policy": {
  "join_condition": "JOIN_NOT_REQUIRED",
  "join_allowed_columns": []
}

Exemple :

Dans la requête suivante, la requête est bloquée, car elle ne comporte aucune opération de jointure avec ExamView :

-- Create a view that includes a table called ExamTable.
CREATE OR REPLACE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"aggregation_threshold_policy": {"threshold": 3, "privacy_unit_column": "last_name"}, "join_restriction_policy": {"join_condition": "JOIN_NOT_REQUIRED"}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

-- Query error: At least one allowed column must be specified with
-- join_condition = 'JOIN_NOT_REQUIRED'.
SELECT *
FROM mydataset.ExamView;

Bloquer une requête sans opération de jointure et sans colonne obligatoire

Si la requête doit comporter une opération de jointure et au moins une colonne obligatoire, incluez les parties suivantes dans votre règle d'analyse de chevauchement de liste :

"join_restriction_policy": {
  "join_condition": "JOIN_NOT_REQUIRED",
  "join_allowed_columns": ["column_name", ...]
}

Exemple :

Dans la requête suivante, la requête est bloquée, car l'opération de jointure n'inclut pas de colonne dans le tableau ExamView join_allowed_columns ::

-- Create a view that includes a table called ExamTable.
CREATE OR REPLACE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"aggregation_threshold_policy": {"threshold": 3, "privacy_unit_column": "last_name"}, "join_restriction_policy": {"join_condition": "JOIN_NOT_REQUIRED", "join_allowed_columns": ["test_score"]}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

-- Query error: Join occurring on a restricted column.
SELECT *
FROM mydataset.ExamView INNER JOIN mydataset.StudentTable USING (last_name);

Pour exécuter la requête précédente, dans la clause USING, remplacez last_name par test_score.

Bloquer toutes les opérations de jointure

Vous pouvez bloquer toutes les opérations de jointure. Pour ce faire, n'incluez que les parties suivantes dans votre règle d'analyse de chevauchement de liste:

"join_restriction_policy": {
  "join_condition": "JOIN_BLOCKED",
}

Exemple :

Dans la requête suivante, la requête est bloquée, car il existe une opération de jointure avec une vue appelée ExamView:

-- Create a view that includes a table called ExamTable.
CREATE OR REPLACE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"aggregation_threshold_policy": {"threshold": 3, "privacy_unit_column": "last_name"}, "join_restriction_policy": {"join_condition": "JOIN_BLOCKED"}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

-- Query error: Join occurring on a restricted column.
SELECT *
FROM mydataset.ExamView INNER JOIN mydataset.StudentTable USING (last_name);

Pour exécuter la requête précédente, supprimez l'opération INNER JOIN.

Bloquer une opération de jointure interne sans toutes les colonnes obligatoires

Vous pouvez bloquer une opération de jointure interne si elle n'inclut pas toutes les colonnes obligatoires. Pour ce faire, incluez les parties suivantes dans votre règle d'analyse de chevauchement de liste:

"join_restriction_policy": {
  "join_condition": "JOIN_ALL",
  "join_allowed_columns": ["column_name", ...]
}

Exemple :

Dans la requête suivante, la requête est bloquée avec une erreur, car elle n'inclut pas test_score dans l'opération de jointure avec la vue appelée ExamView:

-- Create a view that includes a table called ExamTable.
CREATE OR REPLACE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"aggregation_threshold_policy": {"threshold": 3, "privacy_unit_column": "last_name"}, "join_restriction_policy": {"join_condition": "JOIN_ALL", "join_allowed_columns": ["test_score", "last_name"]}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

-- Query error: Joining must occur on all of the following columns
-- [test_score, last_name] on table mydataset.ExamView.
SELECT *
FROM mydataset.ExamView INNER JOIN mydataset.StudentTable USING (last_name);

Pour exécuter la requête précédente, remplacez USING (last_name) par USING (last_name, test_score).

Exemples de table

Plusieurs exemples de ce document font référence à deux tables appelées ExamTable et StudentTable. ExamTable contient une liste des résultats des tests produits par les étudiants, et StudentTable contient une liste des élèves et leurs résultats.

Pour tester les exemples de ce document, commencez par ajouter les exemples de tables suivants à votre projet :

-- Create a table called ExamTable.
CREATE OR REPLACE TABLE mydataset.ExamTable AS (
  SELECT "Hansen" AS last_name, "P91" AS test_id, 510 AS test_score UNION ALL
  SELECT "Wang", "U25", 500 UNION ALL
  SELECT "Wang", "C83", 520 UNION ALL
  SELECT "Wang", "U25", 460 UNION ALL
  SELECT "Hansen", "C83", 420 UNION ALL
  SELECT "Hansen", "C83", 560 UNION ALL
  SELECT "Devi", "U25", 580 UNION ALL
  SELECT "Devi", "P91", 480 UNION ALL
  SELECT "Ivanov", "U25", 490 UNION ALL
  SELECT "Ivanov", "P91", 540 UNION ALL
  SELECT "Silva", "U25", 550);

-- Create a table called StudentTable.
CREATE OR REPLACE TABLE mydataset.StudentTable AS (
  SELECT "Hansen" AS last_name, 510 AS test_score UNION ALL
  SELECT "Wang", 500 UNION ALL
  SELECT "Devi", 580 UNION ALL
  SELECT "Ivanov", 490 UNION ALL
  SELECT "Silva", 550);

Limites

Les règles d'analyse présentent les limites suivantes :

  • Si vous avez déjà ajouté une règle d'analyse à une vue, vous ne pouvez pas basculer entre les règles d'analyse du seuil d'agrégation et les règles d'analyse de confidentialité différentielle.

Une règle d'analyse du seuil d'agrégation présente les limites suivantes :

  • Vous ne pouvez utiliser que des fonctions d'agrégation compatibles dans une requête sur une vue associée à une règle d'analyse du seuil d'agrégation.
  • Vous ne pouvez pas ajouter une règle d'analyse du seuil d'agrégation à une vue matérialisée.
  • Si vous utilisez une vue associée à une règle d'analyse du seuil d'agrégation dans une requête de seuil d'agrégation, elles doivent toutes les deux avoir la même valeur pour la colonne d'unité de confidentialité.
  • Si vous utilisez une vue associée à une règle d'analyse du seuil d'agrégation dans une requête de seuil d'agrégation, le seuil de la requête doit être supérieur ou égal au seuil de la vue.
  • Les fonctionnalités temporelles sont désactivées sur les vues associées à une règle d'analyse du seuil d'agrégation.

Une règle d'analyse de confidentialité différentielle présente les limites suivantes :

  • Une fois le budget de confidentialité épuisé pour une vue, cette vue ne peut plus être utilisée. Vous devez donc créer une autre vue.

Une règle d'analyse de chevauchement de liste présente les limites suivantes:

  • Si vous combinez une règle d'analyse du seuil d'agrégation ou une règle d'analyse de confidentialité différentielle avec une règle d'analyse de chevauchement de liste, et que vous ne placez pas privacy_unit_column en tant que join_allowed_column dans la règle d'analyse de chevauchement de liste, vous ne pourrez peut-être pas joindre des colonnes dans certaines situations.

Tarifs