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 dejoin_allowed_columns
doivent être jointes en interne pour que cette vue soit interrogée.JOIN_ANY
: au moins une colonne dejoin_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 pasjoin_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 dejoin_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
et1e+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 entre0.001
et1e+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
et1
.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 entre1e-15
et1000
.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 dejoin_allowed_columns
doivent être jointes en interne pour que cette vue soit interrogée.JOIN_ANY
: au moins une colonne dejoin_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 pasjoin_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 dejoin_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 dejoin_allowed_columns
doivent être jointes en interne pour que cette vue soit interrogée.JOIN_ANY
: au moins une colonne dejoin_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 quejoin_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
- L'association d'une règle d'analyse à une vue n'entraîne aucun coût supplémentaire.
- Les tarifs standards de BigQuery pour l'analyse s'appliquent.
- Les requêtes effectuées sur une vue associée à une règle d'analyse sont limitées aux offres hors édition ou à l'édition Enterprise Plus.