Restringir o acesso aos dados usando regras de análise
Este documento contém informações gerais sobre regras de análise no GoogleSQL para BigQuery.
O que é uma regra de análise?
Uma regra de análise aplica políticas para o compartilhamento de dados. Uma política representa uma condição que precisa ser atendida antes que uma consulta possa ser executada. Com o BigQuery, é possível aplicar uma regra de análise em uma visualização usando uma data clean room ou aplicando a regra de análise diretamente na visualização. Quando você aplica uma regra de análise, você impõe que todos que consultam essa visualização obedeçam a essa regra de análise. Se a regra de análise for atendida, a consulta produzirá uma saída que satisfaça a regra de análise. Se a consulta não atender à regra de análise, ocorrerá um erro.
Regras de análise compatíveis
As seguintes regras de análise são compatíveis:
Regra de análise de limite de agregação: aplica o número mínimo de entidades distintas que precisam estar presentes em um conjunto de dados. É possível aplicar essa regra em uma visualização usando instruções DDL ou data clean rooms. Esta regra aceita a política de limite de agregação e a política de restrição de mesclagem.
Regra de análise de privacidade diferencial: aplica um orçamento de privacidade, que limita os dados revelados a um assinante quando os dados são protegidos com a privacidade diferencial. É possível aplicar essa regra em uma visualização usando instruções DDL ou data clean rooms. Essa regra aceita a política de privacidade diferencial e a política de restrição de mesclagem.
Regra de análise de sobreposição de lista: as linhas sobrepostas só podem ser consultadas após uma operação de mesclagem em conformidade com a regra. É possível aplicar essa regra em uma visualização usando instruções DDL ou data clean rooms. Esta regra aceita a política de restrição de mesclagem.
Regra de análise de limite de agregação
Uma regra de análise de limite de agregação aplica o número mínimo de entidades distintas que devem contribuir para uma linha de saída de uma consulta, para que a linha de saída seja incluída no resultado da consulta.
Quando aplicada, a regra de análise de limite de agregação agrupa dados em dimensões, garantindo que o limite de agregação seja atingido. Ela conta o número de unidades de privacidade distintas (representadas pela coluna de unidade de privacidade) de cada grupo e só gera os grupos em que a contagem de unidades de privacidade distinta atende ao limite de agregação.
Uma visualização que inclui essa regra de análise precisa incluir a política de limite de agregação e, opcionalmente, incluir a política de restrição de mesclagem.
Definir uma regra de análise de limite de agregação para uma visualização
É possível definir uma regra de análise de limite de agregação para uma visualização em uma
data clean room ou com a instrução 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;
Definições:
aggregation_threshold_policy
: a política de limite de agregação para a regra de análise de limite de agregação.VIEW_NAME: o caminho e o nome da visualização.
THRESHOLD: o número mínimo de unidades de privacidade distintas que precisam contribuir para cada linha nos resultados da consulta. Se uma linha em potencial não atender a esse limite, ela será omitida dos resultados da consulta.
PRIVACY_UNIT_COLUMN: representa a coluna de unidade de privacidade. Uma coluna de unidade de privacidade é um identificador exclusivo de uma unidade de privacidade. Uma unidade de privacidade é um valor da coluna de unidade de privacidade que representa a entidade em um conjunto de dados que está sendo protegido.
É possível usar apenas uma coluna de unidade de privacidade, e o tipo de dados dessa coluna precisa ser agrupável.
Os valores na coluna de unidade de privacidade não podem ser projetados diretamente por meio de uma consulta. Use apenas funções agregadas que aceitam regras de análise para agregar dados nessa coluna.
join_restriction_policy
(opcional): a política opcional de restrição de mesclagem para a regra de análise de limite de agregação.JOIN_CONDITION: o tipo de restrição de mesclagem a ser aplicada em uma visualização. Pode ser um dos seguintes valores:
JOIN_ALL
: todas as colunas emjoin_allowed_columns
precisam ser mescladas internamente para que essa visualização seja consultada.JOIN_ANY
: pelo menos uma coluna emjoin_allowed_columns
precisa ser mesclada para que essa visualização seja consultada.JOIN_BLOCKED
: essa visualização não pode ser mesclada em nenhuma coluna. Não definajoin_allowed_columns
nesse caso.JOIN_NOT_REQUIRED
: não é necessária uma mesclagem para consultar esta visualização. Se uma mesclagem for usada, somente as colunas emjoin_allowed_columns
poderão ser usadas.
JOIN_ALLOWED_COLUMNS: as colunas que podem fazer parte de uma operação de mesclagem.
QUERY: a consulta para a visualização.
Exemplo:
No exemplo a seguir, uma regra de análise de limite de agregação é criada
na visualização chamada ExamView
. ExamView
se refere a uma tabela chamada
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 );
Para revisar a sintaxe privacy_policy
para CREATE VIEW
, consulte a
lista OPTIONS
em CREATE VIEW
.
Atualizar uma regra de análise de limite de agregação para uma visualização
É possível alterar a regra de análise de limite de agregação para uma visualização em uma
data clean room ou com a instrução ALTER VIEW
:
ALTER VIEW VIEW_NAME SET OPTIONS ( privacy_policy= '{ "aggregation_threshold_policy": { "threshold" : THRESHOLD, "privacy_unit_column": "PRIVACY_UNIT_COLUMN" } }' )
Para mais informações sobre os valores que podem ser definidos para as Políticas de Privacidade na sintaxe anterior, consulte Definir uma regra de análise de limite de agregação para uma visualização.
Exemplo:
No exemplo a seguir, uma regra de análise de limite de agregação é atualizada
em uma visualização chamada ExamView
.
ALTER VIEW mydataset.ExamView
SET OPTIONS (
privacy_policy= '{"aggregation_threshold_policy": {"threshold": 50, "privacy_unit_column": "last_name"}}'
);
Para revisar a sintaxe privacy_policy
para ALTER VIEW
, consulte
a lista de OPTIONS
em ALTER VIEW SET OPTIONS
.
Consultar uma visualização aplicada pela regra de análise de limite de agregação
É possível consultar uma visualização que tenha uma regra de análise de limite de agregação com
a cláusula AGGREGATION_THRESHOLD
. A consulta precisa incluir funções de agregação. Use apenas
funções agregadas que aceitam o limite de agregação
nessa consulta.
Exemplo:
No exemplo a seguir, uma regra de análise de limite de agregação é consultada
na visualização chamada 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 |
*---------+---------------*/
Como opção, a regra de análise de limite de agregação também pode incluir a política de restrição de mesclagem. Para aprender a usar a política de restrição de mesclagem com uma regra de análise, consulte Política de restrição de mesclagem em regras de análise.
Para analisar outros exemplos da
cláusula AGGREGATION_THRESHOLD
, consulte
cláusula AGGREGATION_THRESHOLD
.
Regra de análise de privacidade diferencial
A regra de análise de privacidade diferencial aplica um orçamento de privacidade, que limita os dados revelados a um assinante quando estão protegidos com a privacidade diferencial. Um orçamento de privacidade impede que qualquer assinante consulte dados compartilhados quando a soma de épsilon ou delta de todas as consultas atingem o valor total de épsilon ou delta. Você pode usar essa regra de análise em uma visualização.
Uma visualização que inclui essa regra de análise precisa incluir a política de privacidade diferencial e, opcionalmente, incluir a política de restrição de mesclagem.
Definir uma regra de análise de privacidade diferencial para uma visualização
É possível definir uma regra de análise de privacidade diferencial para uma visualização em uma
data clean room ou com a instrução
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;
Definições:
differential_privacy_policy
: a política de privacidade diferencial para a regra de análise de privacidade diferencial.PRIVACY_UNIT_COLUMN: a coluna que identifica a entidade em um conjunto de dados protegido por uma regra de análise de privacidade. Esse valor é uma string JSON.
MAX_EPSILON_PER_QUERY: determina a quantidade de ruído adicionado aos resultados por consulta e evita que o épsilon total seja alcançado por uma única consulta. Esse valor é um número JSON de
0.001
a1e+15
.EPSILON_BUDGET: o orçamento de épsilon que representa o épsilon total que pode ser usado em todas as consultas privadas diferenciadas na visualização. Esse valor precisa ser maior que
MAX_EPSILON_PER_QUERY
e é um número JSON de0.001
a1e+15
.DELTA_PER_QUERY: a probabilidade de que qualquer linha no resultado não seja um épsilon privado diferencial. Esse valor é um número JSON de
1e-15
a1
.DELTA_BUDGET: o orçamento de delta representa o delta total que pode ser usado em todas as consultas privadas diferenciadas na visualização. Esse valor precisa ser maior que
DELTA_PER_QUERY
e é um número JSON de1e-15
a1000
.MAX_GROUPS_CONTRIBUTED (opcional): limita o número de grupos em que uma entidade na coluna de unidade de privacidade pode contribuir. Este valor precisa ser um número inteiro JSON não negativo.
join_restriction_policy
(opcional): a política opcional de restrição de mesclagem para a regra de análise de privacidade diferencial.JOIN_CONDITION: o tipo de restrição de mesclagem a ser aplicada em uma visualização. Pode ser um dos seguintes valores:
JOIN_ALL
: todas as colunas emjoin_allowed_columns
precisam ser mescladas internamente para que essa visualização seja consultada.JOIN_ANY
: pelo menos uma coluna emjoin_allowed_columns
precisa ser mesclada para que essa visualização seja consultada.JOIN_BLOCKED
: essa visualização não pode ser mesclada em nenhuma coluna. Não definajoin_allowed_columns
nesse caso.JOIN_NOT_REQUIRED
: não é necessária uma mesclagem para consultar esta visualização. Se uma mesclagem for usada, somente as colunas emjoin_allowed_columns
poderão ser usadas.
JOIN_ALLOWED_COLUMNS: as colunas que podem fazer parte de uma operação de mesclagem.
QUERY: a consulta para a visualização.
Exemplo:
No exemplo a seguir, uma regra de análise de privacidade diferencial é criada na
visualização chamada ExamView
. ExamView
se refere a uma tabela chamada
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.
Para revisar a sintaxe privacy_policy
para CREATE VIEW
, consulte a
lista OPTIONS
em CREATE VIEW
.
Atualizar uma regra de análise de privacidade diferencial para uma visualização
É possível alterar a regra de análise de privacidade diferencial para uma visualização em uma
data clean room ou com a instrução
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 } }' )
Para mais informações sobre os valores que podem ser definidos para as Políticas de Privacidade na sintaxe anterior, consulte Definir uma regra de análise de privacidade diferencial para uma visualização.
Exemplo:
No exemplo a seguir, uma regra de análise de privacidade diferencial é atualizada
em uma visualização chamada 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.
Para revisar a sintaxe privacy_policy
para ALTER VIEW
, consulte
a lista de OPTIONS
em ALTER VIEW SET OPTIONS
.
Consultar uma visualização aplicada pela regra de análise de privacidade diferencial
É possível consultar uma visualização que tenha uma regra de análise de privacidade diferencial com a
cláusula DIFFERENTIAL_PRIVACY
. Para revisar a sintaxe e outros exemplos da cláusula DIFFERENTIAL_PRIVACY
, consulte a cláusula DIFFERENTIAL_PRIVACY
.
Exemplo:
No exemplo a seguir, uma regra de análise de privacidade diferencial é consultada
na visualização chamada ExamView
. Os dados diferencialmente privados
precisam ser retornados de ExamView
porque epsilon
, delta
,
e max_groups_contributed
atendem às condições da
regra de análise diferencial em 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 |
*---------+--------------------*/
Bloquear uma consulta com um épsilon fora dos limites
Épsilon pode ser usado para adicionar ou remover ruído. Mais épsilon significa que
menos ruído será adicionado. Se você quiser garantir que uma consulta privada diferenciada tenha uma
quantidade mínima de ruído, preste muita atenção ao valor de
max_epsilon_per_query
na regra de análise de privacidade diferencial.
Exemplo:
A consulta a seguir é bloqueada com um erro porque
epsilon
na cláusula DIFFERENTIAL_PRIVACY
é maior que
max_epsilon_per_query
em 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.
Depois de criar a visualização, aguarde um pouco e execute a seguinte consulta:
-- 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;
Bloquear consultas que excederam um orçamento épsilon
Épsilon pode ser usado para adicionar ou remover ruído. Menos épsilon aumenta o ruído,
mais épsilon reduz o ruído. Mesmo quando o ruído é alto, várias consultas nos mesmos dados podem no final revelar a versão sem ruído dos dados. Para impedir
que isso aconteça, crie um orçamento épsilon. Se você quiser adicionar um
orçamento de épsilon, revise o valor de epsilon_budget
na
regra de análise de privacidade diferencial da sua visualização.
Exemplo:
Execute a consulta a seguir três vezes. Na terceira vez, a consulta é bloqueada
porque o épsilon total usado é 30
, mas epsilon_budget
em
ExamView
só permite 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.
Depois de criar a visualização, aguarde um pouco e execute a seguinte consulta três vezes:
-- 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;
Regra de análise de sobreposição de lista
Somente linhas sobrepostas podem ser consultadas após uma operação de mesclagem, que está em conformidade com a regra de sobreposição de lista. É possível aplicar essa regra em uma visualização usando instruções DDL ou data clean rooms.
Uma visualização que inclui essa regra de análise só pode incluir a política de restrição de mesclagem
Definir uma regra de análise de sobreposição de lista para uma visualização
É possível definir uma regra de análise de sobreposição de lista para uma visualização em uma
data clean room ou com a
instrução 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;
Definições:
join_restriction_policy
: a política de restrição de mesclagem para a regra de análise de sobreposição de lista.JOIN_CONDITION: o tipo de sobreposição de lista a ser aplicada em uma visualização. Pode ser um dos seguintes valores:
JOIN_ALL
: todas as colunas emjoin_allowed_columns
precisam ser mescladas internamente para que essa visualização seja consultada.JOIN_ANY
: pelo menos uma coluna emjoin_allowed_columns
precisa ser mesclada para que essa visualização seja consultada.
JOIN_ALLOWED_COLUMNS: as colunas que podem fazer parte de uma operação de mesclagem.
QUERY: a consulta para a visualização.
Exemplo:
No exemplo a seguir, uma regra de análise de sobreposição de lista é criada em
uma visualização chamada ExamView
. ExamView
se refere a uma tabela chamada
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 );
Atualizar uma regra de análise de sobreposição de lista para uma visualização
É possível alterar a regra de análise de sobreposição de lista para uma visualização com uma
data clean room ou com a
instrução ALTER VIEW
:
ALTER VIEW VIEW_NAME SET OPTIONS ( privacy_policy= '{ "join_restriction_policy": { "join_condition": "JOIN_CONDITION", "join_allowed_columns": JOIN_ALLOWED_COLUMNS } }' )
Para mais informações sobre os valores que podem ser definidos para a Política de Privacidade na sintaxe anterior, consulte Definir uma regra de análise de sobreposição de lista para uma visualização.
Exemplo:
No exemplo a seguir, uma regra de análise de sobreposição de lista é atualizada
em uma visualização chamada ExamView
.
ALTER VIEW mydataset.ExamView
SET OPTIONS(
privacy_policy= '{"join_restriction_policy": {"join_condition": "JOIN_ALL", "join_allowed_columns": ["test_id", "test_score"]}}'
);
Para revisar a sintaxe privacy_policy
para ALTER VIEW
, consulte
a lista de OPTIONS
em ALTER VIEW SET OPTIONS
.
Consultar uma visualização em que foi aplicada uma regra de análise de sobreposição de lista
É possível realizar uma operação de mesclagem em uma visualização que tenha uma
regra de análise de sobreposição de lista.
Para revisar a sintaxe da operação JOIN
, consulte
Operação de mesclagem.
Bloquear uma operação de mesclagem sem sobreposição
É possível bloquear uma operação de mesclagem se ela não incluir no mínimo uma sobreposição com uma coluna obrigatória.
Exemplo:
Na consulta a seguir, uma visualização chamada ExamView
é
mesclada com uma tabela chamada StudentTable
. Como
a visualização contém a regra de análise de sobreposição de lista JOIN_ANY
, no mínimo
é necessária uma linha sobreposta de ExamView
e StudentTable
. Porque
se houver pelo menos uma sobreposição, a consulta será executada com sucesso.
-- 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 |
*------------+-----------+---------+-------------*/
Bloquear uma operação de mesclagem interna sem sobreposição completa
É possível bloquear uma operação de mesclagem se ela não incluir uma sobreposição com todas as colunas obrigatórias.
Exemplo:
No exemplo a seguir, ocorre uma tentativa de operação de mesclagem em uma visualização chamada
ExamView
e uma tabela chamada
StudentTable
, mas a consulta falha. A falha ocorre
porque a regra de análise de sobreposição de lista ExamView
requer a mesclagem de todas as
colunas da política de restrição de mesclagem. Como a tabela chamada
StudentTable
não contém estas
colunas, nem todas as linhas se sobrepõem e ocorre um erro.
-- 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);
Usar uma política de restrição de mesclagem com outra política
A política de restrição de mesclagem pode ser usada com outras políticas na regra de análise de limite de agregação e de privacidade diferencial. No entanto, ao usar uma política de restrição de mesclagem com outra política, não é possível alterar a outra política posteriormente.
Exemplo:
Uma política de restrição de mesclagem é usada a seguir em uma regra de análise de limite de agregação:
-- 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 );
Bloquear uma operação de mesclagem sem coluna obrigatória
É possível bloquear uma operação de mesclagem se ela não incluir pelo menos uma coluna obrigatória. Para fazer isso, inclua as seguintes partes na regra de análise de sobreposição de lista:
"join_restriction_policy": { "join_condition": "JOIN_ANY", "join_allowed_columns": ["column_name", ...] }
Exemplo:
A consulta a seguir é bloqueada com um erro, porque
não contém operações de mesclagem na coluna test_score
ou
test_id
em 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);
Para executar a consulta anterior, na cláusula USING
, substitua last_name
por test_score
.
Bloquear uma consulta sem operação de mesclagem
Se a consulta precisa ter uma operação de mesclagem, é possível bloqueá-la caso nenhuma operação de mesclagem esteja presente, usando uma das seguintes regras de análise de sobreposição de lista:
"join_restriction_policy": { "join_condition": "JOIN_NOT_REQUIRED" }
"join_restriction_policy": { "join_condition": "JOIN_NOT_REQUIRED", "join_allowed_columns": [] }
Exemplo:
A consulta a seguir está bloqueada porque não há
operação de mesclagem com ExamView
na consulta:
-- 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;
Bloquear uma consulta sem operação de mesclagem e sem coluna obrigatória
Se a consulta precisar ter uma operação de mesclagem e a operação de mesclagem precisar ter pelo menos uma coluna obrigatória, inclua as seguintes partes na regra de análise de sobreposição de lista:
"join_restriction_policy": { "join_condition": "JOIN_NOT_REQUIRED", "join_allowed_columns": ["column_name", ...] }
Exemplo:
A consulta a seguir está bloqueada porque a
operação de mesclagem não inclui uma coluna na matriz 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);
Para executar a consulta anterior, na cláusula USING
, substitua last_name
por test_score
.
Bloquear todas as operações de mesclagem
É possível bloquear todas as operações de mesclagem. Para fazer isso, inclua apenas as seguintes partes na regra de análise de sobreposição de lista:
"join_restriction_policy": { "join_condition": "JOIN_BLOCKED", }
Exemplo:
A consulta a seguir está bloqueada porque há uma
operação de mesclagem com uma visualização chamada 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);
Para que a consulta anterior seja executada, remova a operação INNER JOIN
.
Bloquear uma operação de mesclagem interna sem todas as colunas obrigatórias
É possível bloquear uma operação de mesclagem interna se ela não incluir todas as colunas necessárias. Para fazer isso, inclua as seguintes partes na regra de análise de sobreposição de lista:
"join_restriction_policy": { "join_condition": "JOIN_ALL", "join_allowed_columns": ["column_name", ...] }
Exemplo:
A consulta a seguir é bloqueada com um erro porque
ela não inclui test_score
na operação de mesclagem com
a visualização chamada 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);
Para executar a consulta anterior, substitua USING (last_name)
por USING (last_name, test_score)
.
Tabelas de exemplos
Vários exemplos neste documento se referem a duas tabelas chamadas ExamTable
e
StudentTable
. ExamTable
contém uma lista de resultados de avaliações feitas pelos estudantes
e StudentTable
contém uma lista de estudantes e seus resultados nas avaliações.
Para testar os exemplos neste documento, adicione primeiro as seguintes tabelas de exemplo ao seu projeto:
-- 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);
Limitações
As regras de análise têm as seguintes limitações:
- Se você já tiver adicionado uma regra de análise a uma visualização, não será possível alternar entre as regras de análise de limite de agregação e de análise diferencial.
Uma regra de análise de limite de agregação tem as seguintes limitações:
- Só é possível usar funções de agregação compatíveis em uma consulta em uma visualização aplicada de regra de análise de limite de agregação.
- Não é possível adicionar uma regra de análise de limite de agregação a uma visualização materializada.
- Se você usar uma visualização aplicada por regra de análise de limite de agregação em uma consulta de limite de agregação, ambas precisam ter o mesmo valor na coluna de unidade de privacidade.
- Se você usar uma visualização aplicada por regra de análise de limite de agregação em uma consulta de limite de agregação, o limite na consulta precisará ser maior ou igual ao limite na visualização.
- A viagem no tempo é desativada em qualquer visualização que tenha uma regra de análise de limite de agregação.
Uma regra de análise de privacidade diferencial tem as seguintes limitações:
- Quando um orçamento de privacidade se esgota para uma visualização, ela não pode ser usada, e você precisa criar outra.
Uma regra de análise de sobreposição de listas tem as seguintes limitações:
- Se você combinar uma regra de análise de limite de agregação
ou de privacidade diferencial com uma regra de análise de sobreposição de lista e
não colocar
privacy_unit_column
comojoin_allowed_column
na regra de análise de sobreposição de lista, talvez não consiga mesclar as colunas em determinadas situações.
Preços
- Não há custo extra para anexar uma regra de análise a uma visualização.
- Os preços padrão do BigQuery para análise são aplicados.
- As consultas em uma visualização com uma regra de análise são restritas a ofertas que não sejam de edição ou à edição Enterprise Plus.