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 le norme per la condivisione dei dati. Un criterio rappresenta una condizione che deve essere soddisfatta prima che possa essere eseguita una query. 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 gli utenti che eseguono query su quella visualizzazione devono rispettare la regola di analisi nella visualizzazione. 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: impone il numero minimo di entità distinte che devono essere presenti in un set di dati. Puoi applicare questa regola a una vista utilizzando istruzioni DDL o data clean room. Questa regola supporta il criterio di soglia di aggregazione e il criterio di restrizione di unione.
Regola di analisi della privacy differenziale: applica un budget di privacy, che limita i dati rivelati a un abbonato quando i dati sono protetti con la privacy differenziale. Puoi applicare questa regola a una vista utilizzando istruzioni DDL o data clean room. Questa regola supporta le norme sulla privacy differenziale e le norme sulle limitazioni di unione.
Regola di analisi della sovrapposizione degli elenchi: le righe sovrapposte possono essere interrogate solo dopo un'operazione di unione, che è conforme alla regola. Puoi applicare questa regola a una vista utilizzando istruzioni DDL o data clean room. Questa regola supporta il criterio di limitazione dei join.
Regola di analisi della soglia di aggregazione
Una regola di analisi della soglia di aggregazione forza l'applicazione del numero minimo di entità distinte che devono contribuire a una riga di output di una query, in modo che la riga di output venga inclusa nel risultato della query.
Quando viene applicata, la regola di analisi della soglia di aggregazione raggruppa i dati in base alle dimensioni, garantendo al contempo il raggiungimento della soglia di aggregazione. Conta il numero di unità privacy distinte (rappresentate dalla colonna unità privacy) per ogni gruppo e restituisce solo i gruppi in cui il conteggio delle unità privacy distinte soddisfa la soglia di aggregazione.
Una visualizzazione che include questa regola di analisi deve includere i criteri per la soglia di aggregazione e può includere facoltativamente i criteri per la limitazione dei join.
Definisci 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 l'istruzione
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;
Definizioni:
aggregation_threshold_policy: La policy della soglia di aggregazione per la regola di analisi della soglia di aggregazione.VIEW_NAME: il percorso e il nome della visualizzazione.
THRESHOLD: il numero minimo di unità di privacy distinte che devono contribuire a ogni riga nei risultati della query. Se una potenziale riga non soddisfa questa soglia, viene omessa dai risultati della query.
PRIVACY_UNIT_COLUMN: rappresenta la colonna unità privacy. Una colonna unità privacy è un identificatore univoco per un'unità privacy. Un'unità di privacy è un valore della colonna dell'unità di privacy che rappresenta l'entità in un insieme di dati da proteggere.
Puoi utilizzare una sola colonna unità privacy e il tipo di dati per la colonna unità privacy deve essere raggruppabile.
I valori nella colonna dell'unità di privacy non possono essere proiettati direttamente tramite una query e puoi utilizzare solo funzioni aggregate supportate dalle regole di analisi per aggregare i dati in questa colonna.
join_restriction_policy(facoltativo): il criterio di restrizione di unione facoltativo per la regola di analisi della soglia di aggregazione.JOIN_CONDITION: Il tipo di restrizione di join da applicare a una vista. Può avere uno dei seguenti valori:
JOIN_ALL: tutte le colonne injoin_allowed_columnsdevono essere unite internamente per poter eseguire query su questa visualizzazione.JOIN_ANY: almeno una colonna injoin_allowed_columnsdeve essere unita per poter eseguire query su questa visualizzazione.JOIN_BLOCKED: questa visualizzazione non può essere unita a nessuna colonna. In questo caso, non impostarejoin_allowed_columns.JOIN_NOT_REQUIRED: Per eseguire query su questa visualizzazione non è necessario unire le tabelle. Se viene utilizzato un join, è possibile utilizzare solo le colonne injoin_allowed_columns.
JOIN_ALLOWED_COLUMNS: le colonne che possono far parte di un'operazione di join.
QUERY: La query per la visualizzazione.
Esempio:
Nell'esempio seguente, viene creata una regola di analisi della soglia di aggregazione
in una vista denominata ExamView. ExamView fa riferimento a una tabella chiamata
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 );
Per esaminare la sintassi di privacy_policy per CREATE VIEW, consulta l'elenco
OPTIONS in CREATE VIEW.
Aggiorna 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 l'istruzione ALTER VIEW:
ALTER VIEW VIEW_NAME SET OPTIONS ( privacy_policy= '''{ "aggregation_threshold_policy": { "threshold" : THRESHOLD, "privacy_unit_column": "PRIVACY_UNIT_COLUMN" } }''' )
Per saperne di più sui valori che puoi impostare per le norme sulla privacy nella sintassi precedente, consulta Definire una regola di analisi della soglia di aggregazione per una vista.
Esempio:
Nell'esempio seguente, una regola di analisi della soglia di aggregazione viene aggiornata
in una vista chiamata ExamView.
ALTER VIEW mydataset.ExamView
SET OPTIONS (
privacy_policy= '{"aggregation_threshold_policy": {"threshold": 50, "privacy_unit_column": "last_name"}}'
);
Per esaminare la sintassi di privacy_policy per ALTER VIEW, consulta
l'elenco OPTIONS in ALTER VIEW SET OPTIONS.
Eseguire query su una vista con regole di analisi della soglia di aggregazione applicate
Puoi eseguire una query su una vista con 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 di aggregazione supportate dalla soglia di aggregazione
in questa query.
Esempio:
Nel seguente esempio, viene eseguita una query su una regola di analisi della soglia di aggregazione in una vista chiamata 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 regola di analisi della soglia di aggregazione può anche includere facoltativamente il criterio di limitazione dei join. Per scoprire come utilizzare la policy di limitazione dei join con una regola di analisi, vedi Policy di limitazione dei join nelle regole di analisi.
Per esaminare altri esempi per la clausola
AGGREGATION_THRESHOLD, vedi
Clausola AGGREGATION_THRESHOLD.
Regola di analisi della privacy differenziale
La regola di analisi della privacy differenziale applica un budget di privacy, che limita i dati rivelati a un abbonato quando i dati sono protetti con la privacy differenziale. Un budget di privacy impedisce ai sottoscrittori di eseguire query sui dati condivisi se la somma del valore epsilon o delta di tutte le query raggiunge il valore epsilon o delta totale. Puoi utilizzare questa regola di analisi in una vista.
Una vista che include questa regola di analisi deve includere le norme sulla privacy differenziale e può includere facoltativamente le norme sulle limitazioni di unione.
Definisci 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 l'istruzione
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;
Definizioni:
differential_privacy_policy: le norme sulla privacy differenziale per la regola di analisi della privacy differenziale.PRIVACY_UNIT_COLUMN: la colonna che identifica l'entità in un set di dati protetto utilizzando una regola di analisi della privacy. Questo valore è una stringa JSON.
MAX_EPSILON_PER_QUERY: determina la quantità di rumore aggiunta ai risultati per query e impedisce che l'epsilon totale venga raggiunto da una singola query. Questo valore è un numero JSON compreso tra
0.001e1e+15.EPSILON_BUDGET: il budget epsilon che rappresenta l'epsilon totale che può essere utilizzato in tutte le query con privacy differenziale nella vista. Questo valore deve essere maggiore di
MAX_EPSILON_PER_QUERYed è un numero JSON compreso tra0.001e1e+15.DELTA_PER_QUERY: la probabilità che una riga nel risultato non sia epsilon-differenzialmente privata. Questo valore è un numero JSON compreso tra
1e-15e1.DELTA_BUDGET: il budget delta, che rappresenta il delta totale che può essere utilizzato in tutte le query con privacy differenziale nella vista. Questo valore deve essere maggiore di
DELTA_PER_QUERYed è un numero JSON compreso tra1e-15e1000.MAX_GROUPS_CONTRIBUTED (facoltativo): limita il numero di gruppi a cui può contribuire un'entità in una colonna dell'unità privacy. Questo valore deve essere un numero intero JSON non negativo.
join_restriction_policy(facoltativo): il criterio di restrizione del join facoltativo per la regola di analisi della privacy differenziale.JOIN_CONDITION: Il tipo di restrizione di join da applicare a una vista. Può avere uno dei seguenti valori:
JOIN_ALL: tutte le colonne injoin_allowed_columnsdevono essere unite internamente per poter eseguire query su questa visualizzazione.JOIN_ANY: almeno una colonna injoin_allowed_columnsdeve essere unita per poter eseguire query su questa visualizzazione.JOIN_BLOCKED: questa visualizzazione non può essere unita a nessuna colonna. In questo caso, non impostarejoin_allowed_columns.JOIN_NOT_REQUIRED: Per eseguire query su questa visualizzazione non è necessario unire le tabelle. Se viene utilizzato un join, è possibile utilizzare solo le colonne injoin_allowed_columns.
JOIN_ALLOWED_COLUMNS: le colonne che possono far parte di un'operazione di join.
QUERY: La query per la visualizzazione.
Esempio:
Nel seguente esempio, viene creata una regola di analisi della privacy differenziale in
una vista chiamata ExamView. ExamView fa riferimento a una tabella chiamata
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.
Per esaminare la sintassi di 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 l'istruzione
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 } }''' )
Per saperne di più sui valori che puoi impostare per le norme sulla privacy nella sintassi precedente, consulta Definisci una regola di analisi della privacy differenziale per una vista.
Esempio:
Nel seguente esempio, una regola di analisi della privacy differenziale viene aggiornata
in una vista denominata 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.
Per esaminare la sintassi di privacy_policy per ALTER VIEW, consulta
l'elenco OPTIONS in ALTER VIEW SET OPTIONS.
Esegui una query su una visualizzazione con regole di analisi della privacy differenziale applicate
Puoi eseguire una query su una vista con una regola di analisi della privacy differenziale con la
clausola DIFFERENTIAL_PRIVACY. Per esaminare la sintassi e altri esempi
per la clausola DIFFERENTIAL_PRIVACY, vedi
Clausola DIFFERENTIAL_PRIVACY.
Esempio:
Nel seguente esempio, viene eseguita una query su una regola di analisi della privacy differenziale in
una vista denominata ExamView. I dati con privacy differenziale
devono essere restituiti correttamente da ExamView perché epsilon, delta
e max_groups_contributed soddisfano tutti le condizioni della regola di analisi
differenziale in 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 |
*---------+--------------------*/
Bloccare una query con un epsilon fuori dai limiti
Epsilon può essere utilizzato per aggiungere o rimuovere rumore. Un valore di epsilon più alto significa che verrà aggiunto meno rumore. Se vuoi assicurarti che una query con privacy differenziale abbia una
quantità minima di rumore, presta molta attenzione al valore di
max_epsilon_per_query nella regola di analisi della privacy differenziale.
Esempio:
Nella seguente query, la query viene bloccata con un errore perché
epsilon nella clausola DIFFERENTIAL_PRIVACY è maggiore di
max_epsilon_per_query in 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.
Dopo aver creato la visualizzazione, attendi brevemente e poi esegui la seguente query:
-- 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;
Bloccare le query che hanno superato un budget epsilon
Epsilon può essere utilizzato per aggiungere o rimuovere rumore. Un valore di epsilon inferiore aumenta il rumore,
un valore di epsilon superiore riduce il rumore. Anche in presenza di un elevato livello di rumore, più query sugli stessi dati possono alla fine rivelare la versione non disturbata dei dati. Per evitare
che ciò accada, puoi creare un budget epsilon. Se vuoi aggiungere un budget
epsilon, esamina il valore di epsilon_budget nella
regola di analisi della privacy differenziale per la tua vista.
Esempio:
Esegui la seguente query tre volte. La terza volta, la query viene bloccata
perché l'epsilon totale utilizzato è 30, ma epsilon_budget in
ExamView consente solo 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.
Dopo aver creato la visualizzazione, attendi brevemente e poi esegui la seguente query tre volte:
-- 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;
Regola di analisi della sovrapposizione degli elenchi
Dopo un'operazione di unione, è possibile eseguire query solo sulle righe sovrapposte, in conformità alla regola di sovrapposizione degli elenchi. Puoi applicare questa regola a una vista utilizzando istruzioni DDL o data clean room.
Una visualizzazione che include questa regola di analisi deve includere solo le norme di limitazione dei join.
Definisci una regola di analisi della sovrapposizione degli elenchi per una vista
Puoi definire una regola di analisi della sovrapposizione di elenchi per una vista in una
data clean room o con l'istruzione
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;
Definizioni:
join_restriction_policy: La policy di limitazione dell'unione per la regola di analisi della sovrapposizione degli elenchi.JOIN_CONDITION: Il tipo di sovrapposizione di elenchi da applicare a una visualizzazione. Può avere uno dei seguenti valori:
JOIN_ALL: tutte le colonne injoin_allowed_columnsdevono essere unite internamente per poter eseguire query su questa visualizzazione.JOIN_ANY: almeno una colonna injoin_allowed_columnsdeve essere unita per poter eseguire query su questa visualizzazione.
JOIN_ALLOWED_COLUMNS: le colonne che possono far parte di un'operazione di join.
QUERY: La query per la visualizzazione.
Esempio:
Nell'esempio seguente, viene creata una regola di analisi della sovrapposizione degli elenchi in
una vista denominata ExamView. ExamView fa riferimento a una tabella chiamata
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 );
Aggiornare una regola di analisi della sovrapposizione degli elenchi per una vista
Puoi modificare la regola di analisi della sovrapposizione degli elenchi per una vista con una
data clean room o con l'istruzione
ALTER VIEW:
ALTER VIEW VIEW_NAME SET OPTIONS ( privacy_policy= '''{ "join_restriction_policy": { "join_condition": "JOIN_CONDITION", "join_allowed_columns": JOIN_ALLOWED_COLUMNS } }''' )
Per saperne di più sui valori che puoi impostare per le norme sulla privacy nella sintassi precedente, consulta Definisci una regola di analisi della sovrapposizione degli elenchi per una vista.
Esempio:
Nell'esempio seguente, una regola di analisi della sovrapposizione degli elenchi viene aggiornata
in una vista chiamata ExamView.
ALTER VIEW mydataset.ExamView
SET OPTIONS(
privacy_policy= '{"join_restriction_policy": {"join_condition": "JOIN_ALL", "join_allowed_columns": ["test_id", "test_score"]}}'
);
Per esaminare la sintassi di privacy_policy per ALTER VIEW, consulta
l'elenco OPTIONS in ALTER VIEW SET OPTIONS.
Eseguire una query su una visualizzazione applicata della regola di analisi della sovrapposizione degli elenchi
Puoi eseguire un'operazione di unione su una vista che ha una
regola di analisi della sovrapposizione di elenchi.
Per esaminare la sintassi dell'operazione JOIN, consulta
Operazione di unione.
Blocca un'operazione di unione senza sovrapposizione
Puoi bloccare un'operazione di unione se non include almeno una sovrapposizione con una colonna obbligatoria.
Esempio:
Nella seguente query, una vista chiamata ExamView viene
unita a una tabella chiamata StudentTable. Poiché
la vista contiene la regola di analisi della sovrapposizione degli elenchi JOIN_ANY, è richiesta almeno
una riga sovrapposta da ExamView e StudentTable. Poiché
esiste almeno una sovrapposizione, la query viene eseguita correttamente.
-- 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 |
*------------+-----------+---------+-------------*/
Bloccare un'operazione di inner join senza sovrapposizione completa
Puoi bloccare un'operazione di unione se non include una sovrapposizione con tutte le colonne obbligatorie.
Esempio:
Nel seguente esempio, viene tentata un'operazione di join su una vista denominata
ExamView e una tabella denominata
StudentTable, ma la query non va a buon fine. L'errore si verifica perché la regola di analisi della sovrapposizione degli elenchi ExamView richiede l'unione di tutte le colonne presenti nel criterio di restrizione dell'unione. Poiché la tabella chiamata
StudentTable non contiene queste
colonne, non tutte le righe si sovrappongono e viene generato un errore.
-- 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);
Utilizzare una policy di limitazione delle unioni con un'altra policy
Le norme di limitazione del join possono essere utilizzate con altre norme nelle regole di analisi della soglia di aggregazione e della privacy differenziale. Tuttavia, una volta utilizzato un criterio di restrizione di unione con un altro criterio, non puoi modificare quest'ultimo in un secondo momento.
Esempio:
Nell'esempio seguente, una policy di restrizione di join viene utilizzata in una regola di analisi della soglia di aggregazione:
-- 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 );
Bloccare un'operazione di unione senza colonne obbligatorie
Puoi bloccare un'operazione di unione se non include almeno una colonna obbligatoria. Per farlo, includi le seguenti parti nella regola di analisi della sovrapposizione degli elenchi:
"join_restriction_policy": { "join_condition": "JOIN_ANY", "join_allowed_columns": ["column_name", ...] }
Esempio:
Nella query seguente, la query viene bloccata con un errore perché
non contiene operazioni di unione nella colonna test_score o
test_id in ExamView e
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);
Per eseguire la query precedente, nella clausola USING, sostituisci last_name
con test_score.
Blocca una query senza operazione di unione
Se la query deve avere un'operazione di unione, puoi bloccarla se non è presente alcuna operazione di unione utilizzando una delle seguenti regole di analisi della sovrapposizione degli elenchi:
"join_restriction_policy": { "join_condition": "JOIN_NOT_REQUIRED" }
"join_restriction_policy": { "join_condition": "JOIN_NOT_REQUIRED", "join_allowed_columns": [] }
Esempio:
Nella query seguente, la query viene bloccata perché non è presente
un'operazione di join con ExamView nella query:
-- 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;
Bloccare 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 sovrapposizione degli elenchi:
"join_restriction_policy": { "join_condition": "JOIN_NOT_REQUIRED", "join_allowed_columns": ["column_name", ...] }
Esempio:
Nella seguente query, la query viene bloccata perché l'operazione
join non include una colonna nell'array
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);
Per eseguire la query precedente, nella clausola USING, sostituisci last_name
con test_score.
Blocca tutte le operazioni di unione
Puoi bloccare tutte le operazioni di unione. Per farlo, includi solo le seguenti parti nella regola di analisi della sovrapposizione degli elenchi:
"join_restriction_policy": { "join_condition": "JOIN_BLOCKED", }
Esempio:
Nella seguente query, la query viene bloccata perché è presente un'operazione
di join con una vista chiamata 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);
Per eseguire la query precedente, rimuovi l'operazione INNER JOIN.
Bloccare un'operazione di inner join senza tutte le colonne obbligatorie
Puoi bloccare un'operazione di inner join se non include tutte le colonne obbligatorie. Per farlo, includi le seguenti parti nella regola di analisi della sovrapposizione degli elenchi:
"join_restriction_policy": { "join_condition": "JOIN_ALL", "join_allowed_columns": ["column_name", ...] }
Esempio:
Nella seguente query, la query viene bloccata con un errore perché
non include test_score nell'operazione di unione con
la visualizzazione chiamata 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);
Per eseguire la query precedente, sostituisci USING (last_name)
con USING (last_name, test_score).
Tabelle di esempio
Diversi esempi in questo documento fanno riferimento a due tabelle chiamate ExamTable e
StudentTable. ExamTable contiene un elenco dei risultati dei test prodotti dagli studenti
e StudentTable contiene un elenco degli studenti e dei loro risultati dei test.
Per testare gli esempi in questo documento, aggiungi innanzitutto le seguenti tabelle di esempio al tuo progetto:
-- 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);
Limitazioni
Le regole di analisi presentano le seguenti limitazioni:
- Se hai già aggiunto una regola di analisi a una vista, non puoi passare dalle regole di analisi della soglia di aggregazione alle regole di analisi della privacy differenziale.
Una regola di analisi della soglia di aggregazione presenta le seguenti limitazioni:
- Puoi utilizzare solo le funzioni di aggregazione supportate in una query su una visualizzazione con regola di analisi della soglia di aggregazione applicata.
- Non puoi aggiungere una regola di analisi della soglia di aggregazione a una vista materializzata.
- Se utilizzi una regola di analisi della soglia di aggregazione, visualizzazione applicata in una query sulla soglia di aggregazione, entrambe devono avere lo stesso valore per la colonna dell'unità di privacy.
- Se utilizzi una visualizzazione con regole di analisi della soglia di aggregazione applicate in una query con soglia di aggregazione, la soglia nella query deve essere maggiore o uguale alla soglia nella visualizzazione.
- Spostamento nel tempo è disattivato in qualsiasi vista che ha 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 per una vista, questa non può essere utilizzata e devi crearne una nuova.
Una regola di analisi della sovrapposizione degli elenchi presenta le seguenti limitazioni:
- Se combini una regola di analisi della soglia di aggregazione o una regola di analisi della privacy differenziale con una regola di analisi della sovrapposizione degli elenchi e non inserisci
privacy_unit_columncomejoin_allowed_columnnella regola di analisi della sovrapposizione degli elenchi, potresti non essere in grado di unire le colonne in determinate situazioni.
Prezzi
- Non sono previsti costi aggiuntivi per collegare una regola di analisi a una vista.
- Vengono applicati i prezzi di BigQuery standard per l'analisi.