Limitare l'accesso ai dati utilizzando le regole di analisi

Questo documento fornisce informazioni generali sulle regole di analisi in GoogleSQL per BigQuery.

Che cos'è una regola di analisi?

Una regola di analisi applica una condizione per la condivisione dei dati. Con BigQuery, puoi applicare una regola di analisi a una vista, utilizzando una data clean room o applicando la regola di analisi direttamente alla vista. Quando applichi una regola di analisi, tutti coloro che eseguono query sulla vista devono rispettare la regola di analisi della vista. Se la regola di analisi è soddisfatta, la query produce un output che soddisfa la regola di analisi. Se la query non soddisfa la regola di analisi, viene generato un errore.

Regole di analisi supportate

Sono supportate le seguenti regole di analisi:

  • Regola di analisi della soglia di aggregazione: applica il numero minimo di entità distinte che devono essere presenti in un set di dati. Puoi applicare questa regola a una vista utilizzando istruzioni o data clean room.
  • Regola di analisi della privacy differenziale: applica un budget per la privacy, che limita i dati che vengono rivelati a un abbonato quando i dati sono protetti dalla privacy differenziale. Puoi applicare questa regola a una vista utilizzando istruzioni o data clean room.
  • Regola di analisi delle restrizioni di join: limita i tipi di join che possono essere utilizzati con colonne specifiche. I join non devono essere presenti nelle query e alcune colonne possono essere bloccate. Può essere incluso con una regola di analisi della soglia di aggregazione o con una regola di analisi della privacy differenziale. Puoi applicare questa regola a una vista utilizzando istruzioni o data clean room.
  • Regola di analisi della sovrapposizione dell'elenco: è simile alla regola di analisi della limitazione di join, ma non può essere utilizzata con altre regole di analisi. Puoi applicare questa regola a una vista utilizzando data clean room.

Regola di analisi della soglia di aggregazione

Una regola di analisi della soglia di aggregazione applica il numero minimo di entità distinte che devono essere presenti in un set di dati, in modo che le statistiche su tale set di dati siano incluse nei risultati di una query.

Se applicata, la regola di analisi della soglia di aggregazione raggruppa i dati in più dimensioni, garantendo al contempo il raggiungimento della soglia di aggregazione. Conta il numero di unità di privacy distinte (rappresentate dalla colonna unità di privacy) per ogni gruppo e restituisce solo i gruppi in cui il numero di unità di privacy distinte soddisfa la soglia di aggregazione.

Una vista che include questa regola di analisi può includere anche la regola di analisi della limitazione di join.

Definire una regola di analisi della soglia di aggregazione per una vista

Puoi definire una regola di analisi della soglia di aggregazione per una vista in una data clean room o con la seguente istruzione:

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

Sostituisci i seguenti valori:

  • VIEW_NAME: il percorso e il nome della vista.
  • THRESHOLD: il numero minimo di unità di privacy distinte che devono contribuire a ogni riga nei risultati della query. Se una riga potenziale non soddisfa questa soglia, viene omessa dai risultati della query.
  • PRIVACY_UNIT_COLUMN: rappresenta la colonna dell'unità relativa alla privacy. Una colonna di unità relativa alla privacy è l'identificatore univoco di un'unità relativa alla privacy. Un'unità relativa alla privacy è un valore della colonna dell'unità di privacy che rappresenta l'entità in un set di dati che viene protetto.

    Puoi utilizzare una sola colonna di unità di privacy e il tipo di dati per la colonna di unità di privacy deve essere raggruppabile.

    I valori nella colonna dell'unità relativa alla privacy non possono essere previsti direttamente tramite una query e puoi utilizzare solo funzioni aggregate supportate dalle regole di analisi per aggregare i dati in questa colonna.

  • QUERY: la query per la vista.

Nell'esempio seguente viene creata una regola di analisi della soglia di aggregazione:

-- Create a table called ExamTable.
CREATE 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 view that includes ExamTable.
CREATE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"aggregation_threshold_policy": {"threshold": 3, "privacy_unit_column": "last_name"}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

Per esaminare la sintassi privacy_policy per CREATE VIEW, consulta l'elenco OPTIONS in CREATE VIEW.

Aggiornare una regola di analisi della soglia di aggregazione per una vista

Puoi modificare la regola di analisi della soglia di aggregazione per una vista in una data clean room o con la seguente istruzione:

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

Sostituisci i seguenti valori:

  • VIEW_NAME: il percorso e il nome della vista.
  • THRESHOLD: il numero minimo di unità di privacy distinte che devono contribuire a ogni riga nei risultati della query. Se una riga potenziale non soddisfa questa soglia, viene omessa dai risultati della query.
  • PRIVACY_UNIT_COLUMN: rappresenta la colonna dell'unità relativa alla privacy. Una colonna di unità relativa alla privacy è l'identificatore univoco di un'unità relativa alla privacy. Un'unità relativa alla privacy è un valore della colonna dell'unità di privacy che rappresenta l'entità in un set di dati che viene protetto.

    Puoi utilizzare una sola colonna di unità di privacy e il tipo di dati per la colonna di unità di privacy deve essere raggruppabile.

    I valori nella colonna dell'unità relativa alla privacy non possono essere previsti direttamente tramite una query e puoi utilizzare solo funzioni aggregate supportate dalle regole di analisi per aggregare i dati in questa colonna.

Nell'esempio seguente, viene aggiornata una regola di analisi della soglia di aggregazione:

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

Per rivedere la sintassi privacy_policy per ALTER VIEW, consulta l'elenco OPTIONS in ALTER VIEW SET OPTIONS.

Esegui una query su una vista applicata con regola di analisi della soglia di aggregazione

Puoi eseguire query su una vista che ha una regola di analisi della soglia di aggregazione con la clausola AGGREGATION_THRESHOLD. La query deve includere funzioni di aggregazione e puoi utilizzare solo funzioni aggregate supportate dalle regole di analisi nella query.

Nell'esempio seguente, viene eseguita una query su una vista con una regola di analisi della soglia di aggregazione:

-- Create a table called ExamTable.
CREATE 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 view that includes ExamTable.
CREATE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"aggregation_threshold_policy": {"threshold": 3, "privacy_unit_column": "last_name"}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

-- Query an analysis–rule enforced view called 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             |
 *---------+---------------*/

Per esaminare altri esempi per la clausola AGGREGATION_THRESHOLD, consulta l'articolo clausola AGGREGATION_THRESHOLD.

Regola di analisi della privacy differenziale

La regola di analisi della privacy differenziale applica un budget per la privacy, che limita i dati che vengono rivelati a un abbonato quando i dati sono protetti dalla privacy differenziale. Un budget per la privacy impedisce a qualsiasi abbonato di eseguire query sui dati condivisi quando la somma di epsilon o delta di tutte le query raggiunge il valore epsilon totale o delta totale. Puoi utilizzare questa regola di analisi in una vista. Una vista che include questa regola di analisi può includere anche la regola di analisi della limitazione di join.

Definire una regola di analisi della privacy differenziale per una vista

Puoi definire una regola di analisi della privacy differenziale per una vista in una data clean room o con la seguente istruzione:

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
      }
    }'
  )
  AS QUERY;

Sostituisci i seguenti valori:

  • PRIVACY_UNIT_COLUMN: la colonna che identifica l'entità in un set di dati protetto tramite una regola di analisi della privacy. Questo valore è una stringa JSON.
  • MAX_EPSILON_PER_QUERY: determina l'efficacia della garanzia per la privacy per query e impedisce che una singola query raggiunga l'epsilon totale. Questo valore è un numero JSON compreso tra 0.001 e 1e+15.
  • EPSILON_BUDGET: il budget epsilon che rappresenta l'efficacia di una garanzia di privacy complessiva. Viene utilizzato nella totalità per tutte le query private differenziate sulla vista. Questo valore deve essere superiore a MAX_EPSILON_PER_QUERY ed è un numero JSON compreso tra 0.001 e 1e+15.
  • DELTA_PER_QUERY: la probabilità massima di perdita della privacy per query oltre la garanzia stabilita da Epsilon totale. Impedisce che una singola query raggiunga il delta totale. Questo valore è un numero JSON compreso tra 1e-15 e 1.
  • DELTA_BUDGET: il budget delta, che rappresenta la probabilità massima di perdita complessiva della privacy oltre la garanzia determinata da epsilon totale. Viene utilizzato nel complesso per tutte le query private in maniera differenziata sulla vista. Questo valore deve essere superiore a DELTA_PER_QUERY ed è un numero JSON compreso tra 1e-15 e 1000.
  • MAX_GROUPS_CONTRIBUTED: facoltativo. Limita il numero di gruppi a cui può contribuire un'entità in una colonna di unità di privacy. Questo valore deve essere un numero intero JSON non negativo.
  • QUERY: la query per la vista.

Nell'esempio seguente viene creata una regola di analisi della privacy differenziale:

-- Create a table called ExamTable.
CREATE 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 view that includes ExamTable.
CREATE 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": 1000.0, "max_groups_contributed": 2}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

-- Epsilon parameters are set very high due to the small dataset.
-- In practice, epsilon should be much smaller.

Per esaminare la sintassi privacy_policy per CREATE VIEW, consulta l'elenco OPTIONS in CREATE VIEW.

Aggiornare una regola di analisi della privacy differenziale per una vista

Puoi modificare la regola di analisi della privacy differenziale per una vista in una data clean room o con la seguente istruzione:

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
    }
  }'
)

Sostituisci i seguenti valori:

  • PRIVACY_UNIT_COLUMN: la colonna che identifica l'entità in un set di dati protetto tramite una regola di analisi della privacy. Questo valore è una stringa JSON.
  • MAX_EPSILON_PER_QUERY: determina l'efficacia della garanzia per la privacy per query e impedisce che una singola query raggiunga l'epsilon totale. Questo valore è un numero JSON compreso tra 0.001 e 1e+15.
  • EPSILON_BUDGET: il budget epsilon che rappresenta l'efficacia di una garanzia di privacy complessiva. Viene utilizzato nella totalità per tutte le query private differenziate sulla vista. Questo valore deve essere superiore a MAX_EPSILON_PER_QUERY ed è un numero JSON compreso tra 0.001 e 1e+15.
  • DELTA_PER_QUERY: la probabilità massima di perdita della privacy per query oltre la garanzia stabilita da Epsilon totale. Impedisce che una singola query raggiunga il delta totale. Questo valore è un numero JSON compreso tra 1e-15 e 1.
  • DELTA_BUDGET: il budget delta, che rappresenta la probabilità massima di perdita complessiva della privacy oltre la garanzia determinata da epsilon totale. Viene utilizzato nel complesso per tutte le query private in maniera differenziata sulla vista. Questo valore deve essere superiore a DELTA_PER_QUERY ed è un numero JSON compreso tra 1e-15 e 1000.
  • MAX_GROUPS_CONTRIBUTED: facoltativo. Limita il numero di gruppi a cui può contribuire un'entità in una colonna di unità di privacy. Questo valore deve essere un numero intero JSON non negativo.

Nell'esempio seguente viene aggiornata una regola di analisi della privacy differenziale:

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.005, "delta_budget": 1000.0, "max_groups_contributed": 2}}'
);

-- Epsilon parameters are set very high due to the small dataset.
-- In practice, epsilon should be much smaller.

Per rivedere la sintassi privacy_policy per ALTER VIEW, consulta l'elenco OPTIONS in ALTER VIEW SET OPTIONS.

Eseguire query su una vista applicata con regola di analisi della privacy differenziale

Puoi eseguire query su una vista che ha una regola di analisi della privacy differenziale con la clausola DIFFERENTIAL_PRIVACY. Per esaminare la sintassi e altri esempi per la clausola DIFFERENTIAL_PRIVACY, consulta l'articolo sulla clausola DIFFERENTIAL_PRIVACY.

Assicurati che la query con privacy differenziata venga eseguita

Crea una query con privacy differenziata per la vista applicata alla regola di analisi e assicurati che la query venga eseguita.

Ad esempio, nella seguente query vengono restituiti correttamente dati privati da ExamView perché epsilon, delta e max_groups_contributed soddisfano tutti le condizioni della regola di analisi differenziale in ExamView:

-- Create a table called ExamTable.
CREATE 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 view that includes ExamTable.
CREATE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"differential_privacy_policy": {"privacy_unit_column": "last_name", "max_epsilon_per_query": 1000.01, "epsilon_budget": 1000.0, "delta_per_query": 0.01, "delta_budget": 1000.0, "max_groups_contributed": 2}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

Dopo aver creato la visualizzazione, attendi un po' di tempo e, quando hai la certezza che sia stata creata, esegui la seguente query:

-- Query an analysis–rule enforced view called ExamView.
SELECT
  WITH DIFFERENTIAL_PRIVACY
    OPTIONS(epsilon=10, delta=.01, max_groups_contributed=2, privacy_unit_column=last_name)
    test_id,
    AVG(test_score, contribution_bounds_per_group => (0,100)) AS average_test_score
FROM mydataset.ExamView
GROUP BY test_id;

-- These results will change each time you run the query.
-- Smaller aggregations might be removed.
/*---------+--------------------*
 | test_id | average_test_score |
 +---------+--------------------+
 | P91     | ???                |
 | U25     | ???                |
 *---------+--------------------*/

-- Epsilon parameters are set very high due to the small dataset.
-- In practice, epsilon should be much smaller.

Bloccare una query con un'episilon fuori intervallo

È possibile utilizzare Epsilon per aggiungere o rimuovere rumori. Più epsilon significa meno rumore. Se vuoi assicurarti che una query con privacy differenziata presenti una quantità minima di rumore, presta particolare attenzione al valore di max_epsilon_per_query nella regola di analisi della privacy differenziale.

Ad esempio, nella seguente query, la query è bloccata con un errore perché epsilon nella clausola DIFFERENTIAL_PRIVACY è superiore a max_epsilon_per_query in ExamView:

-- Create a table called ExamTable.
CREATE 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 view that includes ExamTable.
CREATE 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": 1000.0, "max_groups_contributed": 2}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

Dopo aver creato la visualizzazione, attendi un po' di tempo ed esegui la seguente query:

-- Error: epsilon is out of bounds.
SELECT
  WITH DIFFERENTIAL_PRIVACY
    OPTIONS(epsilon=1e20, delta=.01, max_groups_contributed=2, privacy_unit_column=last_name)
    test_id,
    AVG(test_score, contribution_bounds_per_group => (0,100)) AS average_test_score
FROM mydataset.ExamView
GROUP BY test_id;

-- Epsilon parameters are set very high due to the small dataset.
-- In practice, epsilon should be much smaller.

Bloccare una query che non ha una quantità specifica di delta

Delta rappresenta la soglia che determina se i dati potrebbero essere divulgati accidentalmente. Meno delta aumenta la soglia, più delta diminuisce la soglia. Per assicurarti che una query privata in modo differenziale abbia una soglia specifica, aggiorna l'impostazione delta_per_query nella regola di analisi della privacy differenziale.

Ad esempio, nella seguente query, la query è bloccata con un errore perché delta nella clausola DIFFERENTIAL_PRIVACY non corrisponde delta_per_query in ExamView:

-- Create a table called ExamTable.
CREATE 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 view that includes ExamTable.
CREATE 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": 1000.0, "max_groups_contributed": 2}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

Dopo aver creato la visualizzazione, attendi un po' di tempo ed esegui la seguente query:

-- Error: delta in query does not match delta_per_query.
SELECT
  WITH DIFFERENTIAL_PRIVACY
    OPTIONS(epsilon=10, delta=.02, max_groups_contributed=2, privacy_unit_column=last_name)
    test_id,
    AVG(test_score, contribution_bounds_per_group => (0,100)) AS average_test_score
FROM mydataset.ExamView
GROUP BY test_id;

-- Epsilon parameters are set very high due to the small dataset.
-- In practice, epsilon should be much smaller.

Blocca le query che hanno superato un budget epsilon

È possibile utilizzare Epsilon per aggiungere o rimuovere rumori. Meno epsilon aumenta il rumore, più epsilon lo riduce. Anche quando il rumore è elevato, più query sugli stessi dati possono rivelare la versione senza rumore dei dati. Per evitare che ciò accada, puoi creare un budget epsilon. Se vuoi aggiungere un budget epsilon, verifica il valore di epsilon_budget nella regola di analisi della privacy differenziale della vista.

Esegui la seguente query tre volte. La terza volta, la query viene bloccata perché il numero totale di epsilon utilizzato è 30, ma epsilon_budget in ExamView consente solo 25.6:

-- Create a table called ExamTable.
CREATE 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 view that includes ExamTable.
CREATE 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": 1000.0, "max_groups_contributed": 2}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

Dopo aver creato la visualizzazione, attendi un po' di tempo, poi esegui la seguente query tre volte:

-- Error after three query runs: epsilon budget exceeded
SELECT
  WITH DIFFERENTIAL_PRIVACY
    OPTIONS(epsilon=10, delta=.01, max_groups_contributed=2, privacy_unit_column=last_name)
    test_id,
    AVG(test_score, contribution_bounds_per_group => (0,100)) AS average_test_score
FROM mydataset.ExamView
GROUP BY test_id;

-- Epsilon parameters are set very high due to the small dataset.
-- In practice, epsilon should be much smaller.

Bloccare le query che hanno superato un budget delta

Delta rappresenta la soglia che determina se i dati potrebbero essere divulgati accidentalmente. Meno delta aumenta la soglia, più delta diminuisce la soglia. Anche quando la soglia è alta, più query sugli stessi dati possono alla fine rivelare i dati differenzialmente privati. Per evitare che ciò accada, puoi creare un budget delta. Se vuoi aggiungere un budget delta, verifica il valore di delta_budget nella regola di analisi della privacy differenziale per la vista.

Esegui la seguente query sette volte. Alla settima volta, la query viene bloccata perché il delta totale utilizzato è 0.7, ma delta_budget in ExamView consente solo 0.6:

-- Create a table called ExamTable.
CREATE 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 view that includes ExamTable.
CREATE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"differential_privacy_policy": {"privacy_unit_column": "last_name", "max_epsilon_per_query": 10.01, "epsilon_budget": 0.2, "delta_per_query": 0.01, "delta_budget": 0.6, "max_groups_contributed": 2}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

Dopo aver creato la visualizzazione, attendi un po' di tempo, poi esegui la seguente query sette volte:

-- Error after seven query runs: epsilon budget exceeded
SELECT
  WITH DIFFERENTIAL_PRIVACY
    OPTIONS(epsilon=10, delta=.01, max_groups_contributed=2, privacy_unit_column=last_name)
    test_id,
    AVG(test_score, contribution_bounds_per_group => (0,100)) AS average_test_score
FROM mydataset.ExamView
GROUP BY test_id;

-- Epsilon parameters are set very high due to the small dataset.
-- In practice, epsilon should be much smaller.

Blocca una query che consente troppi contributi di gruppo

Puoi limitare il numero di gruppi a cui può contribuire ogni entità in una query con privacy differenziata. Se vuoi assicurarti che una query privatamente differenziata abbia un numero limitato di gruppi a cui ogni entità può contribuire, presta particolare attenzione al valore di max_groups_contributed nella regola di analisi della privacy differenziale.

Ad esempio, nella seguente query, la query è bloccata con un errore perché max_groups_contributed nella clausola DIFFERENTIAL_PRIVACY è superiore a max_groups_contributed in ExamView:

-- Create a table called ExamTable.
CREATE 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 view that includes ExamTable.
CREATE 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": 1000.0, "max_groups_contributed": 2}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

Dopo aver creato la visualizzazione, attendi un po' di tempo ed esegui la seguente query:

-- Error: max_groups_contributed is out of bounds.
SELECT
  WITH DIFFERENTIAL_PRIVACY
    OPTIONS(epsilon=10, delta=.02, max_groups_contributed=3, privacy_unit_column=last_name)
    test_id,
    AVG(test_score, contribution_bounds_per_group => (0,100)) AS average_test_score
FROM mydataset.ExamView
GROUP BY test_id;

-- Epsilon parameters are set very high due to the small dataset.
-- In practice, epsilon should be much smaller.

Regola di analisi delle restrizioni di join

Una regola di analisi delle restrizioni di join limita i tipi di join che possono essere utilizzati con colonne specifiche in una vista. Puoi utilizzare questa regola di analisi in una vista. Una vista che include questa regola di analisi può includere anche la regola di analisi della soglia di aggregazione o la regola di analisi della privacy differenziale.

Definire una regola di analisi della limitazione di join per una vista

Puoi definire una regola di analisi delle restrizioni di join per una vista in una data clean room o con la seguente istruzione.

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

Sostituisci i seguenti valori:

  • JOIN_CONDITION: il tipo di limitazione di join da applicare a una vista. Può essere uno dei seguenti valori:

    • JOIN_NOT_REQUIRED: non è necessario un join per eseguire query su questa visualizzazione. Se viene utilizzato un join, è possibile utilizzare solo le colonne in join_allowed_columns.

    • JOIN_BLOCKED: questa visualizzazione non può essere unita in nessuna colonna. Non impostare join_allowed_columns in questo caso.

    • JOIN_ANY: per eseguire query su questa vista, è necessario unire almeno una colonna in join_allowed_columns.

    • JOIN_ALL: tutte le colonne in join_allowed_columns devono essere unite internamente per poter eseguire query su questa vista.

  • JOIN_ALLOWED_COLUMNS: le colonne che possono far parte di un'operazione di unione.

  • QUERY: la query per la vista.

Nell'esempio seguente viene creata una regola di analisi delle restrizioni di join:

-- Create a table called ExamTable.
CREATE 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 view that includes ExamTable.
CREATE 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 );

Utilizzare una regola di analisi delle restrizioni di join con un'altra regola di analisi

Puoi utilizzare una regola di analisi delle restrizioni di join con una regola di analisi della soglia di aggregazione o con una regola di analisi della privacy differenziale. Tuttavia, una volta utilizzata una limitazione di unione con un'altra regola di analisi in una vista, non puoi modificare l'altra regola di analisi.

Nell'esempio seguente vengono utilizzate insieme una regola di analisi della limitazione di join e una regola di analisi della soglia di aggregazione:

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

Aggiornare una regola di analisi della limitazione di join per una vista

Puoi modificare la regola di analisi della limitazione di join per una vista con una data clean room o con la seguente istruzione:

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

Sostituisci i seguenti valori:

  • JOIN_CONDITION: il tipo di limitazione di join da applicare a una vista. Può essere uno dei seguenti valori:

    • JOIN_NOT_REQUIRED: non è necessario un join per eseguire query su questa visualizzazione. Se viene utilizzato un join, è possibile utilizzare solo le colonne in join_allowed_columns.

    • JOIN_BLOCKED: questa visualizzazione non può essere unita in nessuna colonna. Non impostare join_allowed_columns in questo caso.

    • JOIN_ANY: per eseguire query su questa vista, è necessario unire almeno una colonna in join_allowed_columns.

    • JOIN_ALL: tutte le colonne in join_allowed_columns devono essere unite internamente per poter eseguire query su questa vista.

  • JOIN_ALLOWED_COLUMNS: le colonne che possono far parte di un'operazione di unione.

  • QUERY: la query per la vista.

Nell'esempio seguente viene aggiornata una regola di analisi della limitazione di join:

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

Per rivedere la sintassi privacy_policy per ALTER VIEW, consulta l'elenco OPTIONS in ALTER VIEW SET OPTIONS.

Esegui query su una vista applicata con regola di analisi della limitazione di join

Puoi eseguire un'operazione di join su una vista che ha una regola di analisi della limitazione di join. Per esaminare la sintassi dell'operazione JOIN, consulta Operazione di join.

Assicurati che la query restrittiva di join venga eseguita

Devi eseguire un test per assicurarti che la query restrittiva di join venga eseguita.

Ad esempio, nella seguente query, i dati uniti vengono restituiti correttamente da ExamView e StudentTable:

-- Create a table called ExamTable.
CREATE 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 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);

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

-- Query the ExamView view.
SELECT *
FROM mydataset.ExamView INNER JOIN mydataset.StudentTable USING (test_score)
GROUP BY test_id;

-- These results will change each time you run the query.
-- Smaller aggregations might be removed.
/*---------+--------------------*
 | test_id | average_test_score |
 +---------+--------------------+
 | P91     | ???                |
 | U25     | ???                |
 *---------+--------------------*/

Bloccare un'operazione di join senza colonna obbligatoria

Puoi bloccare un'operazione di join se non include almeno una colonna obbligatoria. A questo scopo, includi le seguenti parti nella regola di analisi delle limitazioni di join:

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

Ad esempio, nella seguente query la query è bloccata da un errore perché non contiene operazioni di join nelle colonne test_score o test_id in ExamView e StudentTable:

-- Create a table called ExamTable.
CREATE 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 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);

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

-- Query the ExamView view.
SELECT *
FROM mydataset.ExamView INNER JOIN mydataset.StudentTable USING (last_name)
GROUP BY test_id;

Per eseguire la query precedente, sostituisci last_name con test_score nella clausola USING.

Blocca una query senza operazione di join

Se la query deve avere un'operazione di join, puoi bloccarla se non è presente alcuna operazione di join utilizzando una delle seguenti regole di analisi della limitazione di join:

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

Ad esempio, nella query seguente, la query è bloccata perché non esiste un'operazione di unione nella query:

-- Create a table called ExamTable.
CREATE 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 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);

-- Create a view that includes ExamTable.
CREATE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"join_restriction_policy": {"join_condition": "JOIN_NOT_REQUIRED"}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

-- Query the ExamView view.
SELECT *
FROM mydataset.ExamView
GROUP BY test_id;

Blocca una query senza operazione di join e senza colonna obbligatoria

Se la query deve avere un'operazione di join e l'operazione di join deve avere almeno una colonna obbligatoria, includi le seguenti parti nella regola di analisi della limitazione di join:

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

Ad esempio, nella seguente query la query è bloccata perché l'operazione di unione non include una colonna nell'array join_allowed_columns:

-- Create a table called ExamTable.
CREATE 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 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);

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

-- Query the ExamView view.
SELECT *
FROM mydataset.ExamView INNER JOIN mydataset.StudentTable USING (last_name)
GROUP BY test_id;

Per eseguire la query precedente, sostituisci last_name con test_score nella clausola USING.

Blocca tutte le operazioni di join

Puoi bloccare tutte le operazioni di join. Per farlo, includi solo le seguenti parti nella regola di analisi delle restrizioni di join:

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

Ad esempio, nella seguente query la query è bloccata perché è in corso un'operazione di unione:

-- Create a table called ExamTable.
CREATE 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 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);

-- Create a view that includes ExamTable.
CREATE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"join_restriction_policy": {"join_condition": "JOIN_BLOCKED"}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

-- Query the ExamView view.
SELECT *
FROM mydataset.ExamView INNER JOIN mydataset.StudentTable USING (last_name)
GROUP BY test_id;

Per eseguire la query precedente, rimuovi l'operazione INNER JOIN.

Blocca un'operazione di join interna senza tutte le colonne obbligatorie

Puoi bloccare un'operazione di join interno se non include tutte le colonne obbligatorie. A questo scopo, includi le seguenti parti nella regola di analisi delle limitazioni di join:

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

Ad esempio, nella seguente query, la query è bloccata da un errore perché non include test_score nell'operazione di join:

-- Create a table called ExamTable.
CREATE 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 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);

-- Create a view that includes ExamTable.
CREATE 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 the ExamView view.
SELECT *
FROM mydataset.ExamView INNER JOIN mydataset.StudentTable USING (last_name)
GROUP BY test_id;

Per eseguire la query precedente, sostituisci USING (last_name) con USING (last_name, test_score).

Elenca regola di analisi della sovrapposizione

Limita i tipi di join che possono essere utilizzati con colonne specifiche. I join devono essere presenti nelle query e alcune colonne non possono essere bloccate. Puoi definire e aggiornare una regola di analisi della sovrapposizione degli elenchi per una vista in una data clean room. Per maggiori informazioni, consulta Condividere dati sensibili con le data clean room.

Limitazioni

Le regole di analisi presentano le seguenti limitazioni:

  • Se hai già aggiunto una regola di analisi a una vista, non puoi passare dalla regola di analisi delle soglie di aggregazione alle regole di analisi differenziale.

Una regola di analisi delle soglie di aggregazione presenta le seguenti limitazioni:

  • Puoi utilizzare solo le funzioni aggregate supportate in una query su una vista applicata tramite regola di analisi della soglia di aggregazione.
  • Non puoi aggiungere una regola di analisi della soglia di aggregazione a una vista materializzata.
  • Se utilizzi una vista applicata con una regola di analisi della soglia di aggregazione in una query sulla soglia di aggregazione, entrambe devono avere lo stesso valore per la colonna delle unità di privacy.
  • Se utilizzi una vista applicata con una regola di analisi della soglia di aggregazione in una query sulla soglia di aggregazione, la soglia nella query deve essere maggiore o uguale alla soglia nella vista.
  • L'opzione Viaggio nel tempo è disattivata in tutte le viste che hanno una regola di analisi della soglia di aggregazione.

Una regola di analisi della privacy differenziale presenta le seguenti limitazioni:

  • Una volta esaurito il budget per la privacy di una vista, quest'ultima non può essere utilizzata e devi crearne una nuova.

Una regola di analisi delle restrizioni di join ha le seguenti limitazioni:

  • Se non posizioni privacy_unit_column come join_allowed_column in una regola di analisi della limitazione di join, potresti non essere in grado di unire nessuna colonna in determinate situazioni.

Prezzi