Restrinja o acesso a dados através de regras de análise
Este documento fornece informações gerais sobre as regras de análise no GoogleSQL para BigQuery.
O que é uma regra de análise?
Uma regra de análise aplica políticas para a partilha de dados. Uma política representa uma condição que tem de ser cumprida antes de ser possível executar uma consulta. Com o BigQuery, pode aplicar uma regra de análise a uma visualização de propriedade através de uma sala limpa de dados ou aplicando a regra de análise diretamente à visualização de propriedade. Quando aplica uma regra de análise, aplica essa regra a todas as pessoas que consultam essa vista. Se a regra de análise for satisfeita, a consulta produz um resultado que satisfaz a regra de análise. Se a consulta não satisfizer a regra de análise, é produzido um erro.
Regras de análise suportadas
As seguintes regras de análise são suportadas:
Regra de análise do limite de agregação: aplica o número mínimo de entidades distintas que têm de estar presentes num conjunto de dados. Pode aplicar esta regra numa vista através de declarações DDL ou salas limpas de dados. Esta regra suporta a política de limite de agregação e a política de restrição de junção.
Regra de análise de privacidade diferencial: aplica um orçamento de privacidade, que limita os dados revelados a um subscritor quando os dados estão protegidos com privacidade diferencial. Pode aplicar esta regra numa vista através de declarações DDL ou salas limpas de dados. Esta regra suporta a política de privacidade diferencial e a política de restrição de junção.
Regra de análise de sobreposição de listas: só é possível consultar linhas sobrepostas após uma operação de junção, o que está em conformidade com a regra. Pode aplicar esta regra numa vista através de declarações DDL ou salas limpas de dados. Esta regra suporta a política de restrição de junção.
Regra de análise do limite de agregação
Uma regra de análise de limite de agregação aplica o número mínimo de entidades distintas que têm de 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 do limite de agregação agrupa os dados em várias dimensões, ao mesmo tempo que garante que o limite de agregação é cumprido. Conta o número de unidades de privacidade distintas (representadas pela coluna de unidades de privacidade) para cada grupo e só produz os grupos em que a contagem de unidades de privacidade distintas satisfaz o limite de agregação.
Uma vista que inclua esta regra de análise tem de incluir a política de limite de agregação e pode incluir opcionalmente a política de restrição de junção.
Defina uma regra de análise de limite de agregação para uma visualização de propriedade
Pode definir uma regra de análise de limite mínimo de agregação para uma vista numa sala de dados limpos ou com a declaraçã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 do limite de agregação.VIEW_NAME: o caminho e o nome da vista.
THRESHOLD: o número mínimo de unidades de privacidade distintas que têm de contribuir para cada linha nos resultados da consulta. Se uma potencial linha não satisfizer este limite, essa linha é omitida dos resultados da consulta.
PRIVACY_UNIT_COLUMN: representa a coluna da 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 num conjunto de dados que está a ser protegido.
Só pode usar uma coluna de unidade de privacidade e o tipo de dados da coluna de unidade de privacidade tem de ser agrupável.
Não é possível projetar diretamente os valores na coluna da unidade de privacidade através de uma consulta, e só pode usar funções de agregação suportadas por regras de análise para agregar os dados nesta coluna.
join_restriction_policy
(opcional): a política de restrição de junção opcional para a regra de análise do limite mínimo de agregação.JOIN_CONDITION: o tipo de restrição de junção a aplicar numa vista. Pode ter um dos seguintes valores:
JOIN_ALL
: todas as colunas emjoin_allowed_columns
têm de ser unidas internamente para que esta vista seja consultada.JOIN_ANY
: tem de juntar, pelo menos, uma coluna emjoin_allowed_columns
para que esta vista seja consultada.JOIN_BLOCKED
: não é possível juntar esta vista ao longo de nenhuma coluna. Neste caso, não definajoin_allowed_columns
.JOIN_NOT_REQUIRED
: não é necessária uma junção para consultar esta vista. Se for usado um join, só podem ser usadas as colunas emjoin_allowed_columns
.
JOIN_ALLOWED_COLUMNS: as colunas que podem fazer parte de uma operação de junção.
QUERY: a consulta para a vista.
Exemplo:
No exemplo seguinte, é criada uma regra de análise de limite de agregação numa vista denominada ExamView
. ExamView
faz referência a uma tabela denominada
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 rever a sintaxe de privacy_policy
para CREATE VIEW
, consulte a lista OPTIONS
em CREATE VIEW
.
Atualize uma regra de análise de limite de agregação para uma visualização de propriedade
Pode alterar a regra de análise do limite de agregação para uma visualização de propriedade numa
sala de dados limpos ou com a declaraçã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 pode definir para as políticas de privacidade na sintaxe anterior, consulte o artigo Defina uma regra de análise de limite de agregação para uma vista.
Exemplo:
No exemplo seguinte, uma regra de análise de limite de agregação é atualizada
numa vista denominada ExamView
.
ALTER VIEW mydataset.ExamView
SET OPTIONS (
privacy_policy= '{"aggregation_threshold_policy": {"threshold": 50, "privacy_unit_column": "last_name"}}'
);
Para rever a sintaxe de privacy_policy
para ALTER VIEW
, consulte
a lista OPTIONS
em ALTER VIEW SET OPTIONS
.
Consulte uma vista aplicada por uma regra de análise de limite de agregação
Pode consultar uma vista que tenha uma regra de análise de limite de agregação com a cláusula AGGREGATION_THRESHOLD
. A consulta tem de incluir funções de agregação e só pode usar
funções de agregação suportadas pelo limite de agregação
nesta consulta.
Exemplo:
No exemplo seguinte, é consultada uma regra de análise de limite de agregação numa vista denominada 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 |
*---------+---------------*/
A regra de análise do limite de agregação também pode incluir opcionalmente a política de restrição de junção. Para saber como usar a política de restrição de junção com uma regra de análise, consulte o artigo Política de restrição de junção nas regras de análise.
Para rever exemplos adicionais da cláusula
AGGREGATION_THRESHOLD
, consulte a 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 subscritor quando os dados estão protegidos com privacidade diferencial. Um orçamento de privacidade impede que qualquer subscritor consulte dados partilhados quando a soma do épsilon ou do delta de todas as consultas atinge o valor total do épsilon ou do delta. Pode usar esta regra de análise numa vista.
Uma vista que inclua esta regra de análise tem de incluir a política de privacidade diferencial e pode incluir opcionalmente a política de restrição de junção.
Defina uma regra de análise de privacidade diferencial para uma vista
Pode definir uma regra de análise de privacidade diferencial para uma vista numa
sala limpa de dados ou com a declaraçã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 num conjunto de dados protegido através de uma regra de análise de privacidade. Este valor é uma string JSON.
MAX_EPSILON_PER_QUERY: determina a quantidade de ruído adicionada aos resultados por consulta e impede que o épsilon total seja alcançado por uma única consulta. Este valor é um número JSON de
0.001
a1e+15
.EPSILON_BUDGET: O orçamento epsilon que representa o épsilon total que pode ser usado em todas as consultas diferencialmente privadas na visualização. Este valor tem de ser superior a
MAX_EPSILON_PER_QUERY
e é um número JSON de0.001
a1e+15
.DELTA_PER_QUERY: a probabilidade de qualquer linha no resultado não ser diferencialmente privada com épsilon. Este valor é um número JSON entre
1e-15
e1
.DELTA_BUDGET: O orçamento delta que representa o delta total que pode ser usado em todas as consultas com privacidade diferencial na vista. Este valor tem de ser superior a
DELTA_PER_QUERY
e é um número JSON de1e-15
a1000
.MAX_GROUPS_CONTRIBUTED (opcional): limita o número de grupos para os quais uma entidade numa coluna de unidade de privacidade pode contribuir. Este valor tem de ser um número inteiro JSON não negativo.
join_restriction_policy
(opcional): a política de restrição de junção opcional para a regra de análise de privacidade diferencial.JOIN_CONDITION: o tipo de restrição de junção a aplicar numa vista. Pode ter um dos seguintes valores:
JOIN_ALL
: todas as colunas emjoin_allowed_columns
têm de ser unidas internamente para que esta vista seja consultada.JOIN_ANY
: tem de juntar, pelo menos, uma coluna emjoin_allowed_columns
para que esta vista seja consultada.JOIN_BLOCKED
: não é possível juntar esta vista ao longo de nenhuma coluna. Neste caso, não definajoin_allowed_columns
.JOIN_NOT_REQUIRED
: não é necessária uma junção para consultar esta vista. Se for usado um join, só podem ser usadas as colunas emjoin_allowed_columns
.
JOIN_ALLOWED_COLUMNS: as colunas que podem fazer parte de uma operação de junção.
QUERY: a consulta para a vista.
Exemplo:
No exemplo seguinte, é criada uma regra de análise de privacidade diferencial numa vista denominada ExamView
. ExamView
faz referência a uma tabela denominada
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 rever a sintaxe de privacy_policy
para CREATE VIEW
, consulte a lista OPTIONS
em CREATE VIEW
.
Atualize uma regra de análise de privacidade diferencial para uma vista
Pode alterar a regra de análise de privacidade diferencial para uma vista numa
sala de dados limpos ou com a declaraçã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 pode definir para as políticas de privacidade na sintaxe anterior, consulte o artigo Defina uma regra de análise de privacidade diferencial para uma vista.
Exemplo:
No exemplo seguinte, uma regra de análise de privacidade diferencial é atualizada
numa vista denominada 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 rever a sintaxe de privacy_policy
para ALTER VIEW
, consulte
a lista OPTIONS
em ALTER VIEW SET OPTIONS
.
Consulte uma vista aplicada por uma regra de análise de privacidade diferencial
Pode consultar uma vista que tenha uma regra de análise de privacidade diferencial com a cláusula DIFFERENTIAL_PRIVACY
. Para rever a sintaxe e exemplos adicionais
para a cláusula DIFFERENTIAL_PRIVACY
, consulte a
cláusula DIFFERENTIAL_PRIVACY
.
Exemplo:
No exemplo seguinte, é consultada uma regra de análise de privacidade diferencial numa vista denominada ExamView
. Os dados com privacidade diferencial devem ser devolvidos com êxito a partir de ExamView
porque epsilon
, delta
> e max_groups_contributed
cumprem as 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 |
*---------+--------------------*/
Bloqueie uma consulta com um épsilon fora dos limites
O épsilon pode ser usado para adicionar ou remover ruído. Um valor de épsilon mais elevado significa que é adicionado menos ruído. Se quiser garantir que uma consulta com privacidade diferencial tem uma quantidade mínima de ruído, preste muita atenção ao valor de max_epsilon_per_query
na sua regra de análise de privacidade diferencial.
Exemplo:
Na consulta seguinte, a consulta é bloqueada com um erro porque
epsilon
na cláusula DIFFERENTIAL_PRIVACY
é superior a
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 vista, aguarde brevemente e, em seguida, 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;
Bloqueie consultas que excederam um orçamento de épsilon
O épsilon pode ser usado para adicionar ou remover ruído. Um valor de épsilon inferior aumenta o ruído,
um valor de épsilon superior reduz o ruído. Mesmo quando o ruído é elevado, várias consultas sobre os mesmos dados podem, eventualmente, revelar a versão dos dados sem ruído. Para evitar
que isto aconteça, pode criar um orçamento de épsilon. Se quiser adicionar um orçamento épsilon, reveja o valor de epsilon_budget
na regra de análise de privacidade diferencial para a sua visualização.
Exemplo:
Execute a seguinte consulta 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 vista, aguarde brevemente e, em seguida, 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 listas
Só é possível consultar linhas sobrepostas após uma operação de junção, o que está em conformidade com a regra de sobreposição de listas. Pode aplicar esta regra numa vista através de declarações DDL ou salas limpas de dados.
Uma vista que inclua esta regra de análise só pode incluir a política de restrição de junções.
Defina uma regra de análise de sobreposição de listas para uma vista
Pode definir uma regra de análise de sobreposição de listas para uma vista numa sala limpa de dados ou com a declaraçã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 junção para a regra de análise de sobreposição de listas.JOIN_CONDITION: O tipo de sobreposição de listas a aplicar numa vista. Pode ter um dos seguintes valores:
JOIN_ALL
: todas as colunas emjoin_allowed_columns
têm de ser unidas internamente para que esta vista seja consultada.JOIN_ANY
: tem de juntar, pelo menos, uma coluna emjoin_allowed_columns
para que esta vista seja consultada.
JOIN_ALLOWED_COLUMNS: as colunas que podem fazer parte de uma operação de junção.
QUERY: a consulta para a vista.
Exemplo:
No exemplo seguinte, é criada uma regra de análise de sobreposição de listas numa visualização de propriedade denominada ExamView
. ExamView
faz referência a uma tabela denominada
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 );
Atualize uma regra de análise de sobreposição de listas para uma vista
Pode alterar a regra de análise de sobreposição de listas para uma vista com uma
sala limpa de dados ou com a declaraçã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 pode definir para a política de privacidade na sintaxe anterior, consulte o artigo Defina uma regra de análise de sobreposição de listas para uma vista.
Exemplo:
No exemplo seguinte, uma regra de análise de sobreposição de listas é atualizada
numa vista denominada ExamView
.
ALTER VIEW mydataset.ExamView
SET OPTIONS(
privacy_policy= '{"join_restriction_policy": {"join_condition": "JOIN_ALL", "join_allowed_columns": ["test_id", "test_score"]}}'
);
Para rever a sintaxe de privacy_policy
para ALTER VIEW
, consulte
a lista OPTIONS
em ALTER VIEW SET OPTIONS
.
Consulte uma vista aplicada da regra de análise de sobreposição de listas
Pode executar uma operação de junção numa vista que tenha uma regra de análise de sobreposição de listas.
Para rever a sintaxe da operação JOIN
, consulte o artigo
Operação de junção.
Bloqueie uma operação de junção sem sobreposição
Pode bloquear uma operação de junção se não incluir, pelo menos, uma sobreposição com uma coluna obrigatória.
Exemplo:
Na consulta seguinte, uma vista denominada ExamView
é
unida a uma tabela denominada StudentTable
. Uma vez que a vista contém a regra de análise de sobreposição de listas JOIN_ANY
, é necessária, pelo menos, uma linha sobreposta de ExamView
e StudentTable
. Como existe, pelo menos, uma sobreposição, a consulta é executada com êxito.
-- 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 |
*------------+-----------+---------+-------------*/
Bloqueie uma operação de junção interna sem sobreposição total
Pode bloquear uma operação de junção se não incluir uma sobreposição com todas as colunas obrigatórias.
Exemplo:
No exemplo seguinte, é tentada uma operação de junção numa vista denominada
ExamView
e numa tabela denominada
StudentTable
, mas a consulta falha. A falha ocorre porque a regra de análise de sobreposição da lista ExamView
requer a união em todas as colunas presentes na política de restrição de união. Uma vez que a tabela denominada
StudentTable
não contém estas colunas, nem todas as linhas se sobrepõem e é produzido 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);
Use uma política de restrição de participação com outra política
A política de restrição de junção pode ser usada com outras políticas nas regras de análise de privacidade diferencial e limite de agregação. No entanto, depois de usar uma política de restrição de junção com outra política, não pode alterar essa outra política posteriormente.
Exemplo:
No exemplo seguinte, é usada uma política de restrição de junção numa 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 junção sem coluna obrigatória
Pode bloquear uma operação de junção se não incluir, pelo menos, uma coluna obrigatória. Para tal, inclua as seguintes partes na regra de análise de sobreposição de listas:
"join_restriction_policy": { "join_condition": "JOIN_ANY", "join_allowed_columns": ["column_name", ...] }
Exemplo:
Na consulta seguinte, a consulta é bloqueada com um erro porque não contém operações de junção 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
.
Bloqueie uma consulta sem operação de junção
Se a consulta tiver de ter uma operação de junção, pode bloquear a consulta se não estiver presente nenhuma operação de junção através de uma das seguintes regras de análise de sobreposição de listas:
"join_restriction_policy": { "join_condition": "JOIN_NOT_REQUIRED" }
"join_restriction_policy": { "join_condition": "JOIN_NOT_REQUIRED", "join_allowed_columns": [] }
Exemplo:
Na consulta seguinte, a consulta é bloqueada porque não existe nenhuma operação de junção 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;
Bloqueie uma consulta sem operação de junção nem coluna obrigatória
Se a consulta tiver de ter uma operação de junção e a operação de junção tiver de ter, pelo menos, uma coluna obrigatória, inclua as seguintes partes na regra de análise de sobreposição de listas:
"join_restriction_policy": { "join_condition": "JOIN_NOT_REQUIRED", "join_allowed_columns": ["column_name", ...] }
Exemplo:
Na consulta seguinte, a consulta é bloqueada porque a operação de junção 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
.
Bloqueie todas as operações de junção
Pode bloquear todas as operações de associação. Para o fazer, inclua apenas as seguintes partes na regra de análise de sobreposição de listas:
"join_restriction_policy": { "join_condition": "JOIN_BLOCKED", }
Exemplo:
Na consulta seguinte, a consulta é bloqueada porque existe uma
operação de junção com uma vista denominada 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 executar a consulta anterior, remova a operação INNER JOIN
.
Bloquear uma operação de junção interna sem todas as colunas obrigatórias
Pode bloquear uma operação de junção interna se não incluir todas as colunas obrigatórias. Para o fazer, inclua as seguintes partes na regra de análise de sobreposição de listas:
"join_restriction_policy": { "join_condition": "JOIN_ALL", "join_allowed_columns": ["column_name", ...] }
Exemplo:
Na consulta seguinte, a consulta é bloqueada com um erro porque
não inclui test_score
na operação de junção com
a vista denominada 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)
.
Exemplos de tabelas
Vários exemplos neste documento fazem referência a duas tabelas denominadas ExamTable
e
StudentTable
. ExamTable
contém uma lista de resultados dos testes produzidos pelos alunos e StudentTable
contém uma lista de alunos e os respetivos resultados dos testes.
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 já adicionou uma regra de análise a uma vista, não pode alternar entre regras de análise de limite de agregação e regras de análise de privacidade diferencial.
Uma regra de análise de limite de agregação tem as seguintes limitações:
- Só pode usar funções de agregação suportadas numa consulta numa vista aplicada da regra de análise do limite de agregação.
- Não pode adicionar uma regra de análise de limite de agregação a uma vista materializada.
- Se usar uma regra de análise de limite de agregação, vista aplicada, numa consulta de limite de agregação, ambas têm de ter o mesmo valor para a coluna de unidade de privacidade.
- Se usar uma regra de análise de limite de agregação, uma visualização aplicada num limite de agregação, numa consulta de limite de agregação, o limite na consulta tem de ser superior ou igual ao limite na visualização.
- A viagem no tempo está 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 vista, essa vista não pode ser usada e tem de criar uma nova vista.
Uma regra de análise de sobreposição de listas tem as seguintes limitações:
- Se combinar uma regra de análise de limite de agregação ou uma regra de análise de privacidade diferencial com uma regra de análise de sobreposição de listas e não colocar o
privacy_unit_column
comojoin_allowed_column
na regra de análise de sobreposição de listas, pode não conseguir juntar colunas em determinadas situações.
Preços
- Não existe um custo adicional para anexar uma regra de análise a uma vista.
- Aplicam-se os preços padrão do BigQuery para análise.