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 em join_allowed_columns precisam ser mescladas internamente para que essa visualização seja consultada.

      • JOIN_ANY: pelo menos uma coluna em join_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 defina join_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 em join_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 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 epsilon total seja alcançado por uma única consulta. Esse valor é um número JSON de 0.001 a 1e+15.

    • EPSILON_BUDGET: o orçamento de epsilon 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 de 0.001 a 1e+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 a 1.

    • 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 de 1e-15 a 1000.

    • 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 em join_allowed_columns precisam ser mescladas internamente para que essa visualização seja consultada.

      • JOIN_ANY: pelo menos uma coluna em join_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 defina join_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 em join_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 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 em join_allowed_columns precisam ser mescladas internamente para que essa visualização seja consultada.

      • JOIN_ANY: pelo menos uma coluna em join_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 como join_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