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 uma condição para compartilhar dados. 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 precisem obedecer a essa regra de análise na visualização. 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, será produzido 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 ou data clean rooms.
  • 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 ou data clean rooms.
  • Regra de análise de restrição de mesclagem: limita os tipos de mesclagens que podem ser usados com colunas específicas. As mesclagens não precisam estar presentes nas consultas e algumas colunas podem ser bloqueadas. Podem ser incluídas em uma regra de análise de limite de agregação ou de análise de privacidade diferencial. É possível aplicar essa regra em uma visualização usando instruções ou data clean rooms.
  • Regra de análise de sobreposição de lista: semelhante à regra de análise de restrição de mesclagem, mas não pode ser usada com outras regras de análise. É possível aplicar essa regra em uma visualização usando data clean rooms.

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 precisam estar presentes em um conjunto de dados para que as estatísticas nesse conjunto sejam incluídas nos resultados de uma 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 também pode incluir a regra de análise de restrição de mesclagem.

Definir uma regra de análise de limite de agregação para uma vista

É 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 seguinte instrução:

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

Substitua os seguintes valores:

  • 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, e é possível usar apenas funções agregadas com suporte a regras de análise para agregar os dados nessa coluna.

  • QUERY: a consulta para a visualização.

No exemplo a seguir, uma regra de análise de limite de agregação é criada:

-- Create a table called ExamTable.
CREATE TABLE mydataset.ExamTable AS (
  SELECT "Hansen" AS last_name, "P91" AS test_id, 510 AS test_score UNION ALL
  SELECT "Wang", "U25", 500 UNION ALL
  SELECT "Wang", "C83", 520 UNION ALL
  SELECT "Wang", "U25", 460 UNION ALL
  SELECT "Hansen", "C83", 420 UNION ALL
  SELECT "Hansen", "C83", 560 UNION ALL
  SELECT "Devi", "U25", 580 UNION ALL
  SELECT "Devi", "P91", 480 UNION ALL
  SELECT "Ivanov", "U25", 490 UNION ALL
  SELECT "Ivanov", "P91", 540 UNION ALL
  SELECT "Silva", "U25", 550);

-- Create a view that includes ExamTable.
CREATE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"aggregation_threshold_policy": {"threshold": 3, "privacy_unit_column": "last_name"}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

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 vista

É possível alterar a regra de análise do limite de agregação para uma visualização em uma data clean room ou com a seguinte instrução:

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

Substitua os seguintes valores:

  • 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, e é possível usar apenas funções agregadas com suporte a regras de análise para agregar os dados nessa coluna.

No exemplo a seguir, uma regra de análise de limite de agregação é atualizada:

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, e é possível usar apenas funções de agregação compatíveis com regras de análise nessa consulta.

No exemplo a seguir, uma visualização com uma regra de análise de limite de agregação é consultada:

-- Create a table called ExamTable.
CREATE TABLE mydataset.ExamTable AS (
  SELECT "Hansen" AS last_name, "P91" AS test_id, 510 AS test_score UNION ALL
  SELECT "Wang", "U25", 500 UNION ALL
  SELECT "Wang", "C83", 520 UNION ALL
  SELECT "Wang", "U25", 460 UNION ALL
  SELECT "Hansen", "C83", 420 UNION ALL
  SELECT "Hansen", "C83", 560 UNION ALL
  SELECT "Devi", "U25", 580 UNION ALL
  SELECT "Devi", "P91", 480 UNION ALL
  SELECT "Ivanov", "U25", 490 UNION ALL
  SELECT "Ivanov", "P91", 540 UNION ALL
  SELECT "Silva", "U25", 550);

-- Create a view that includes ExamTable.
CREATE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"aggregation_threshold_policy": {"threshold": 3, "privacy_unit_column": "last_name"}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

-- Query an analysis–rule enforced view called ExamView.
SELECT WITH AGGREGATION_THRESHOLD
  test_id, COUNT(DISTINCT last_name) AS student_count
FROM mydataset.ExamView
GROUP BY test_id;

/*---------+---------------*
 | test_id | student_count |
 +---------+---------------+
 | P91     | 3             |
 | U25     | 4             |
 *---------+---------------*/

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 atingir o valor total de épsilon ou delta total. Você pode usar essa regra de análise em uma visualização. Uma visualização que inclui essa regra de análise também pode incluir a regra de análise 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 seguinte instrução:

CREATE OR REPLACE VIEW VIEW_NAME
  OPTIONS (
    privacy_policy= '{
      "differential_privacy_policy": {
        "privacy_unit_column": "PRIVACY_UNIT_COLUMN",
        "max_epsilon_per_query": MAX_EPSILON_PER_QUERY,
        "epsilon_budget": EPSILON_BUDGET,
        "delta_per_query": DELTA_PER_QUERY,
        "delta_budget": DELTA_BUDGET,
        "max_groups_contributed": MAX_GROUPS_CONTRIBUTED
      }
    }'
  )
  AS QUERY;

Substitua os seguintes valores:

  • 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 força da garantia de privacidade por consulta e impede que o épsilon 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 épsilon que representa a força de uma garantia geral de privacidade. Isso é usado na totalidade de todas as consultas particulares 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 máxima de perda de privacidade por consulta além da garantia determinada pelo épsilon total. Impede que o delta total seja alcançado por uma única consulta. Esse valor é um número JSON de 1e-15 a 1.
  • DELTA_BUDGET: o orçamento delta, que representa a probabilidade máxima de perda geral de privacidade além da garantia determinada pelo épsilon total. Isso é usado na totalidade para todas as consultas particulares 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 com os quais uma entidade em uma coluna de unidade de privacidade pode contribuir. Este valor precisa ser um número inteiro JSON não negativo.
  • QUERY: a consulta para a visualização.

No exemplo a seguir, uma regra de análise de privacidade diferencial é criada:

-- Create a table called ExamTable.
CREATE TABLE mydataset.ExamTable AS (
  SELECT "Hansen" AS last_name, "P91" AS test_id, 510 AS test_score UNION ALL
  SELECT "Wang", "U25", 500 UNION ALL
  SELECT "Wang", "C83", 520 UNION ALL
  SELECT "Wang", "U25", 460 UNION ALL
  SELECT "Hansen", "C83", 420 UNION ALL
  SELECT "Hansen", "C83", 560 UNION ALL
  SELECT "Devi", "U25", 580 UNION ALL
  SELECT "Devi", "P91", 480 UNION ALL
  SELECT "Ivanov", "U25", 490 UNION ALL
  SELECT "Ivanov", "P91", 540 UNION ALL
  SELECT "Silva", "U25", 550);

-- Create a view that includes ExamTable.
CREATE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"differential_privacy_policy": {"privacy_unit_column": "last_name", "max_epsilon_per_query": 10.01, "epsilon_budget": 1000.0, "delta_per_query": 0.01, "delta_budget": 1000.0, "max_groups_contributed": 2}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

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

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 seguinte instrução:

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

Substitua os seguintes valores:

  • 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 força da garantia de privacidade por consulta e impede que o épsilon 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 épsilon que representa a força de uma garantia geral de privacidade. Isso é usado na totalidade de todas as consultas particulares 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 máxima de perda de privacidade por consulta além da garantia determinada pelo épsilon total. Impede que o delta total seja alcançado por uma única consulta. Esse valor é um número JSON de 1e-15 a 1.
  • DELTA_BUDGET: o orçamento delta, que representa a probabilidade máxima de perda geral de privacidade além da garantia determinada pelo épsilon total. Isso é usado na totalidade para todas as consultas particulares 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 com os quais uma entidade em uma coluna de unidade de privacidade pode contribuir. Este valor precisa ser um número inteiro JSON não negativo.

No exemplo abaixo, uma regra de análise de privacidade diferencial é atualizada:

ALTER VIEW mydataset.ExamView
SET OPTIONS(
  privacy_policy= '{"differential_privacy_policy": {"privacy_unit_column": "last_name", "max_epsilon_per_query": 0.01, "epsilon_budget": 1000.0, "delta_per_query": 0.005, "delta_budget": 1000.0, "max_groups_contributed": 2}}'
);

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

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.

Verificar se a consulta particular diferenciada é executada

Crie uma consulta particular diferenciada para a visualização aplicada pela regra de análise e verifique se a consulta é executada.

Por exemplo, na consulta a seguir, os dados particulares diferenciais são retornados de ExamView porque epsilon, delta e max_groups_contributed atendem às condições da regra de análise diferencial em ExamView:

-- Create a table called ExamTable.
CREATE TABLE mydataset.ExamTable AS (
  SELECT "Hansen" AS last_name, "P91" AS test_id, 510 AS test_score UNION ALL
  SELECT "Wang", "U25", 500 UNION ALL
  SELECT "Wang", "C83", 520 UNION ALL
  SELECT "Wang", "U25", 460 UNION ALL
  SELECT "Hansen", "C83", 420 UNION ALL
  SELECT "Hansen", "C83", 560 UNION ALL
  SELECT "Devi", "U25", 580 UNION ALL
  SELECT "Devi", "P91", 480 UNION ALL
  SELECT "Ivanov", "U25", 490 UNION ALL
  SELECT "Ivanov", "P91", 540 UNION ALL
  SELECT "Silva", "U25", 550);

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

Depois de criar a visualização, aguarde um pouco e, quando tiver certeza de que ela foi criada, execute a seguinte consulta:

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

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

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

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 particular 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.

Por exemplo, na consulta a seguir, a consulta é bloqueada com um erro porque epsilon na cláusula DIFFERENTIAL_PRIVACY é maior que max_epsilon_per_query em ExamView:

-- Create a table called ExamTable.
CREATE TABLE mydataset.ExamTable AS (
  SELECT "Hansen" AS last_name, "P91" AS test_id, 510 AS test_score UNION ALL
  SELECT "Wang", "U25", 500 UNION ALL
  SELECT "Wang", "C83", 520 UNION ALL
  SELECT "Wang", "U25", 460 UNION ALL
  SELECT "Hansen", "C83", 420 UNION ALL
  SELECT "Hansen", "C83", 560 UNION ALL
  SELECT "Devi", "U25", 580 UNION ALL
  SELECT "Devi", "P91", 480 UNION ALL
  SELECT "Ivanov", "U25", 490 UNION ALL
  SELECT "Ivanov", "P91", 540 UNION ALL
  SELECT "Silva", "U25", 550);

-- Create a view that includes ExamTable.
CREATE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"differential_privacy_policy": {"privacy_unit_column": "last_name", "max_epsilon_per_query": 10.01, "epsilon_budget": 1000.0, "delta_per_query": 0.01, "delta_budget": 1000.0, "max_groups_contributed": 2}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

Depois de criar a visualização, aguarde um pouco e execute a seguinte consulta:

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

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

Bloquear uma consulta que não tenha uma quantidade específica de delta

Delta representa o limite que determina se os dados podem vazar acidentalmente. Menos delta aumenta o limite, mais delta diminui o limite. Para garantir que uma consulta particular diferenciada tenha um limite específico, atualize a configuração delta_per_query na regra de análise de privacidade diferencial.

Por exemplo, na consulta a seguir, a consulta é bloqueada com um erro porque delta na cláusula DIFFERENTIAL_PRIVACY não corresponde a delta_per_query em ExamView:

-- Create a table called ExamTable.
CREATE TABLE mydataset.ExamTable AS (
  SELECT "Hansen" AS last_name, "P91" AS test_id, 510 AS test_score UNION ALL
  SELECT "Wang", "U25", 500 UNION ALL
  SELECT "Wang", "C83", 520 UNION ALL
  SELECT "Wang", "U25", 460 UNION ALL
  SELECT "Hansen", "C83", 420 UNION ALL
  SELECT "Hansen", "C83", 560 UNION ALL
  SELECT "Devi", "U25", 580 UNION ALL
  SELECT "Devi", "P91", 480 UNION ALL
  SELECT "Ivanov", "U25", 490 UNION ALL
  SELECT "Ivanov", "P91", 540 UNION ALL
  SELECT "Silva", "U25", 550);

-- Create a view that includes ExamTable.
CREATE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"differential_privacy_policy": {"privacy_unit_column": "last_name", "max_epsilon_per_query": 10.01, "epsilon_budget": 1000.0, "delta_per_query": 0.01, "delta_budget": 1000.0, "max_groups_contributed": 2}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

Depois de criar a visualização, aguarde um pouco e execute a seguinte consulta:

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

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

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.

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 table called ExamTable.
CREATE TABLE mydataset.ExamTable AS (
  SELECT "Hansen" AS last_name, "P91" AS test_id, 510 AS test_score UNION ALL
  SELECT "Wang", "U25", 500 UNION ALL
  SELECT "Wang", "C83", 520 UNION ALL
  SELECT "Wang", "U25", 460 UNION ALL
  SELECT "Hansen", "C83", 420 UNION ALL
  SELECT "Hansen", "C83", 560 UNION ALL
  SELECT "Devi", "U25", 580 UNION ALL
  SELECT "Devi", "P91", 480 UNION ALL
  SELECT "Ivanov", "U25", 490 UNION ALL
  SELECT "Ivanov", "P91", 540 UNION ALL
  SELECT "Silva", "U25", 550);

-- Create a view that includes ExamTable.
CREATE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"differential_privacy_policy": {"privacy_unit_column": "last_name", "max_epsilon_per_query": 10.01, "epsilon_budget": 25.6, "delta_per_query": 0.01, "delta_budget": 1000.0, "max_groups_contributed": 2}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

Depois de criar a visualização, aguarde um pouco e execute a seguinte consulta três vezes:

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

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

Bloquear consultas que excederam um orçamento delta

Delta representa o limite que determina se os dados podem vazar acidentalmente. Menos delta aumenta o limite, mais delta diminui o limite. Mesmo quando o limite é alto, várias consultas nos mesmos dados podem no final revelar os dados particulares diferenciais. Para impedir que isso aconteça, crie um orçamento delta. Para adicionar um orçamento delta, revise o valor de delta_budget na regra de análise de privacidade diferencial da sua visualização.

Execute a consulta a seguir sete vezes. Na sétima vez, a consulta é bloqueada porque o delta total usado é 0.7, mas delta_budget em ExamView só permite 0.6:

-- Create a table called ExamTable.
CREATE TABLE mydataset.ExamTable AS (
  SELECT "Hansen" AS last_name, "P91" AS test_id, 510 AS test_score UNION ALL
  SELECT "Wang", "U25", 500 UNION ALL
  SELECT "Wang", "C83", 520 UNION ALL
  SELECT "Wang", "U25", 460 UNION ALL
  SELECT "Hansen", "C83", 420 UNION ALL
  SELECT "Hansen", "C83", 560 UNION ALL
  SELECT "Devi", "U25", 580 UNION ALL
  SELECT "Devi", "P91", 480 UNION ALL
  SELECT "Ivanov", "U25", 490 UNION ALL
  SELECT "Ivanov", "P91", 540 UNION ALL
  SELECT "Silva", "U25", 550);

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

Depois de criar a visualização, aguarde um pouco e execute a seguinte consulta sete vezes:

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

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

Bloquear uma consulta que permite muitas contribuições do grupo

É possível limitar o número de grupos com que cada entidade pode contribuir em uma consulta particular diferenciada. Se você quiser garantir que uma consulta particular diferenciada tenha um número limitado de grupos com os quais cada entidade pode contribuir, preste muita atenção ao valor de max_groups_contributed na regra de análise de privacidade diferencial.

Por exemplo, na consulta a seguir, a consulta é bloqueada com um erro porque max_groups_contributed na cláusula DIFFERENTIAL_PRIVACY é maior que max_groups_contributed em ExamView:

-- Create a table called ExamTable.
CREATE TABLE mydataset.ExamTable AS (
  SELECT "Hansen" AS last_name, "P91" AS test_id, 510 AS test_score UNION ALL
  SELECT "Wang", "U25", 500 UNION ALL
  SELECT "Wang", "C83", 520 UNION ALL
  SELECT "Wang", "U25", 460 UNION ALL
  SELECT "Hansen", "C83", 420 UNION ALL
  SELECT "Hansen", "C83", 560 UNION ALL
  SELECT "Devi", "U25", 580 UNION ALL
  SELECT "Devi", "P91", 480 UNION ALL
  SELECT "Ivanov", "U25", 490 UNION ALL
  SELECT "Ivanov", "P91", 540 UNION ALL
  SELECT "Silva", "U25", 550);

-- Create a view that includes ExamTable.
CREATE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"differential_privacy_policy": {"privacy_unit_column": "last_name", "max_epsilon_per_query": 10.01, "epsilon_budget": 1000.0, "delta_per_query": 0.01, "delta_budget": 1000.0, "max_groups_contributed": 2}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

Depois de criar a visualização, aguarde um pouco e execute a seguinte consulta:

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

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

Regra de análise de restrição de mesclagem

Uma regra de análise de restrição de mesclagem limita os tipos de mesclagens que podem ser usados com colunas específicas em uma visualização. Você pode usar essa regra de análise em uma visualização. Uma visualização que inclui essa regra de análise também pode incluir a regra de análise de limite de agregação ou regra de análise de privacidade diferencial.

Definir uma regra de análise de restrição de mesclagem para uma vista

É possível definir uma regra de análise de restrição de mesclagem para uma visualização em uma data clean room ou com a instrução a seguir.

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

Substitua os seguintes valores:

  • JOIN_CONDITION: o tipo de restrição de mesclagem a ser aplicada em uma visualização. Pode ser um dos seguintes valores:

    • 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_BLOCKED: essa visualização não pode ser unida em nenhuma coluna. Não defina join_allowed_columns nesse caso.

    • JOIN_ANY: pelo menos uma coluna em join_allowed_columns precisa ser mesclada para que essa visualização seja consultada.

    • JOIN_ALL: todas as colunas em join_allowed_columns precisam ser unidas internamente 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.

No exemplo a seguir, uma regra de análise de restrição de mesclagem é criada:

-- Create a table called ExamTable.
CREATE TABLE mydataset.ExamTable AS (
  SELECT "Hansen" AS last_name, "P91" AS test_id, 510 AS test_score UNION ALL
  SELECT "Wang", "U25", 500 UNION ALL
  SELECT "Wang", "C83", 520 UNION ALL
  SELECT "Wang", "U25", 460 UNION ALL
  SELECT "Hansen", "C83", 420 UNION ALL
  SELECT "Hansen", "C83", 560 UNION ALL
  SELECT "Devi", "U25", 580 UNION ALL
  SELECT "Devi", "P91", 480 UNION ALL
  SELECT "Ivanov", "U25", 490 UNION ALL
  SELECT "Ivanov", "P91", 540 UNION ALL
  SELECT "Silva", "U25", 550);

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

Usar uma regra de análise de restrição de mesclagem com outra regra de análise

Use uma regra de análise de restrição de mesclagem com uma regra de análise de limite de agregação ou uma regra de análise de privacidade diferencial. No entanto, depois de usar uma restrição de mesclagem com outra regra de análise em uma visualização, não será possível alterar essa outra regra de análise.

No exemplo a seguir, uma regra de análise de restrição de mesclagem e uma regra de análise de limite de agregação são usadas juntas:

-- Create a table called ExamTable.
CREATE TABLE mydataset.ExamTable AS (
  SELECT "Hansen" AS last_name, "P91" AS test_id, 510 AS test_score UNION ALL
  SELECT "Wang", "U25", 500 UNION ALL
  SELECT "Wang", "C83", 520 UNION ALL
  SELECT "Wang", "U25", 460 UNION ALL
  SELECT "Hansen", "C83", 420 UNION ALL
  SELECT "Hansen", "C83", 560 UNION ALL
  SELECT "Devi", "U25", 580 UNION ALL
  SELECT "Devi", "P91", 480 UNION ALL
  SELECT "Ivanov", "U25", 490 UNION ALL
  SELECT "Ivanov", "P91", 540 UNION ALL
  SELECT "Silva", "U25", 550);

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

Atualizar uma regra de análise de restrição de mesclagem para uma visualização

É possível alterar a regra de análise de restrição de mesclagem para uma visualização com uma data clean room ou com a seguinte instrução:

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

Substitua os seguintes valores:

  • JOIN_CONDITION: o tipo de restrição de mesclagem a ser aplicada em uma visualização. Pode ser um dos seguintes valores:

    • 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_BLOCKED: essa visualização não pode ser unida em nenhuma coluna. Não defina join_allowed_columns nesse caso.

    • JOIN_ANY: pelo menos uma coluna em join_allowed_columns precisa ser mesclada para que essa visualização seja consultada.

    • JOIN_ALL: todas as colunas em join_allowed_columns precisam ser unidas internamente 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.

No exemplo a seguir, uma regra de análise de restrição de mesclagem é atualizada:

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 aplicada pela regra de análise de restrição de mesclagem

Você pode executar uma operação de mesclagem em uma visualização que tenha uma regra de análise de restrição de mesclagem. Para revisar a sintaxe da operação JOIN, consulte Operação de mesclagem.

Verificar se a consulta restritiva de junção é executada

Você precisa testar para garantir que a consulta restritiva de mesclagem seja executada.

Por exemplo, na consulta a seguir, os dados combinados são retornados com sucesso de ExamView e StudentTable:

-- Create a table called ExamTable.
CREATE TABLE mydataset.ExamTable AS (
  SELECT "Hansen" AS last_name, "P91" AS test_id, 510 AS test_score UNION ALL
  SELECT "Wang", "U25", 500 UNION ALL
  SELECT "Wang", "C83", 520 UNION ALL
  SELECT "Wang", "U25", 460 UNION ALL
  SELECT "Hansen", "C83", 420 UNION ALL
  SELECT "Hansen", "C83", 560 UNION ALL
  SELECT "Devi", "U25", 580 UNION ALL
  SELECT "Devi", "P91", 480 UNION ALL
  SELECT "Ivanov", "U25", 490 UNION ALL
  SELECT "Ivanov", "P91", 540 UNION ALL
  SELECT "Silva", "U25", 550);

-- Create a table called StudentTable.
CREATE TABLE mydataset.StudentTable AS (
  SELECT "Hansen" AS last_name, 510 AS test_score UNION ALL
  SELECT "Wang", 500 UNION ALL
  SELECT "Devi", 580 UNION ALL
  SELECT "Ivanov", 490 UNION ALL
  SELECT "Silva", 550);

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

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

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

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 restrição de mesclagem:

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

Por exemplo, na consulta a seguir, a consulta é 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 table called ExamTable.
CREATE TABLE mydataset.ExamTable AS (
  SELECT "Hansen" AS last_name, "P91" AS test_id, 510 AS test_score UNION ALL
  SELECT "Wang", "U25", 500 UNION ALL
  SELECT "Wang", "C83", 520 UNION ALL
  SELECT "Wang", "U25", 460 UNION ALL
  SELECT "Hansen", "C83", 420 UNION ALL
  SELECT "Hansen", "C83", 560 UNION ALL
  SELECT "Devi", "U25", 580 UNION ALL
  SELECT "Devi", "P91", 480 UNION ALL
  SELECT "Ivanov", "U25", 490 UNION ALL
  SELECT "Ivanov", "P91", 540 UNION ALL
  SELECT "Silva", "U25", 550);

-- Create a table called StudentTable.
CREATE TABLE mydataset.StudentTable AS (
  SELECT "Hansen" AS last_name, 510 AS test_score UNION ALL
  SELECT "Wang", 500 UNION ALL
  SELECT "Devi", 580 UNION ALL
  SELECT "Ivanov", 490 UNION ALL
  SELECT "Silva", 550);

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

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

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 restrição de mesclagem:

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

Por exemplo, na consulta a seguir, a consulta está bloqueada porque não há operação de mesclagem na consulta:

-- Create a table called ExamTable.
CREATE TABLE mydataset.ExamTable AS (
  SELECT "Hansen" AS last_name, "P91" AS test_id, 510 AS test_score UNION ALL
  SELECT "Wang", "U25", 500 UNION ALL
  SELECT "Wang", "C83", 520 UNION ALL
  SELECT "Wang", "U25", 460 UNION ALL
  SELECT "Hansen", "C83", 420 UNION ALL
  SELECT "Hansen", "C83", 560 UNION ALL
  SELECT "Devi", "U25", 580 UNION ALL
  SELECT "Devi", "P91", 480 UNION ALL
  SELECT "Ivanov", "U25", 490 UNION ALL
  SELECT "Ivanov", "P91", 540 UNION ALL
  SELECT "Silva", "U25", 550);

-- Create a table called StudentTable.
CREATE TABLE mydataset.StudentTable AS (
  SELECT "Hansen" AS last_name, 510 AS test_score UNION ALL
  SELECT "Wang", 500 UNION ALL
  SELECT "Devi", 580 UNION ALL
  SELECT "Ivanov", 490 UNION ALL
  SELECT "Silva", 550);

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

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

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 sua regra de análise de restrição de mesclagem:

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

Por exemplo, na consulta a seguir, a consulta está bloqueada porque a operação de mesclagem não inclui uma coluna na matriz join_allowed_columns:

-- Create a table called ExamTable.
CREATE TABLE mydataset.ExamTable AS (
  SELECT "Hansen" AS last_name, "P91" AS test_id, 510 AS test_score UNION ALL
  SELECT "Wang", "U25", 500 UNION ALL
  SELECT "Wang", "C83", 520 UNION ALL
  SELECT "Wang", "U25", 460 UNION ALL
  SELECT "Hansen", "C83", 420 UNION ALL
  SELECT "Hansen", "C83", 560 UNION ALL
  SELECT "Devi", "U25", 580 UNION ALL
  SELECT "Devi", "P91", 480 UNION ALL
  SELECT "Ivanov", "U25", 490 UNION ALL
  SELECT "Ivanov", "P91", 540 UNION ALL
  SELECT "Silva", "U25", 550);

-- Create a table called StudentTable.
CREATE TABLE mydataset.StudentTable AS (
  SELECT "Hansen" AS last_name, 510 AS test_score UNION ALL
  SELECT "Wang", 500 UNION ALL
  SELECT "Devi", 580 UNION ALL
  SELECT "Ivanov", 490 UNION ALL
  SELECT "Silva", 550);

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

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

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 restrição de mesclagem:

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

Por exemplo, na consulta a seguir, a consulta está bloqueada porque há uma operação de mesclagem:

-- Create a table called ExamTable.
CREATE TABLE mydataset.ExamTable AS (
  SELECT "Hansen" AS last_name, "P91" AS test_id, 510 AS test_score UNION ALL
  SELECT "Wang", "U25", 500 UNION ALL
  SELECT "Wang", "C83", 520 UNION ALL
  SELECT "Wang", "U25", 460 UNION ALL
  SELECT "Hansen", "C83", 420 UNION ALL
  SELECT "Hansen", "C83", 560 UNION ALL
  SELECT "Devi", "U25", 580 UNION ALL
  SELECT "Devi", "P91", 480 UNION ALL
  SELECT "Ivanov", "U25", 490 UNION ALL
  SELECT "Ivanov", "P91", 540 UNION ALL
  SELECT "Silva", "U25", 550);

-- Create a table called StudentTable.
CREATE TABLE mydataset.StudentTable AS (
  SELECT "Hansen" AS last_name, 510 AS test_score UNION ALL
  SELECT "Wang", 500 UNION ALL
  SELECT "Devi", 580 UNION ALL
  SELECT "Ivanov", 490 UNION ALL
  SELECT "Silva", 550);

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

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

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 restrição de mesclagem:

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

Por exemplo, na consulta a seguir, a consulta é bloqueada com um erro porque ela não inclui test_score na operação de mesclagem:

-- Create a table called ExamTable.
CREATE TABLE mydataset.ExamTable AS (
  SELECT "Hansen" AS last_name, "P91" AS test_id, 510 AS test_score UNION ALL
  SELECT "Wang", "U25", 500 UNION ALL
  SELECT "Wang", "C83", 520 UNION ALL
  SELECT "Wang", "U25", 460 UNION ALL
  SELECT "Hansen", "C83", 420 UNION ALL
  SELECT "Hansen", "C83", 560 UNION ALL
  SELECT "Devi", "U25", 580 UNION ALL
  SELECT "Devi", "P91", 480 UNION ALL
  SELECT "Ivanov", "U25", 490 UNION ALL
  SELECT "Ivanov", "P91", 540 UNION ALL
  SELECT "Silva", "U25", 550);

-- Create a table called StudentTable.
CREATE TABLE mydataset.StudentTable AS (
  SELECT "Hansen" AS last_name, 510 AS test_score UNION ALL
  SELECT "Wang", 500 UNION ALL
  SELECT "Devi", 580 UNION ALL
  SELECT "Ivanov", 490 UNION ALL
  SELECT "Silva", 550);

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

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

Para executar a consulta anterior, substitua USING (last_name) por USING (last_name, test_score).

Regra de análise de sobreposição de lista

Limita os tipos de mesclagens que podem ser usados com colunas específicas. As mesclagens precisam estar presentes nas consultas, e determinadas colunas não podem ser bloqueadas. É possível definir e atualizar uma regra de análise de sobreposição de lista para uma visualização em uma data clean room. Para mais informações, consulte Compartilhar dados sensíveis com data clean rooms.

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 restrição de mesclagem tem as seguintes limitações:

  • Se você não colocar privacy_unit_column como um join_allowed_column em uma regra de análise de restrição de mesclagem, talvez não seja possível mesclar nenhuma coluna em determinadas situações.

Preços