Sobre domínios de privacidade

Na privacidade diferencial no Snowflake, um domínio de privacidade define os valores possíveis em uma coluna, semelhante a um domínio matemático. Um domínio de privacidade é um intervalo de valores com um mínimo e um máximo ou uma lista enumerada de valores.

O domínio da privacidade é um fator que a Snowflake usa para calcular a quantidade de ruído <label-diff_privacy_noisy_aggregates> que deve ser adicionada para preservar a privacidade. Por isso, a maioria dos campos deve ter um domínio de privacidade finito; caso contrário, a quantidade de ruído adicionada precisaria ser infinita. Por padrão, campos sem domínios de privacidade são considerados como tendo um domínio infinito.

Quais colunas precisam de um domínio de privacidade?

Com exceção de uma função COUNT, uma consulta não pode agregar uma coluna, a menos que a coluna tenha um domínio de privacidade. Da mesma forma, uma consulta não pode usar uma coluna em uma cláusula GROUP BY, a menos que a coluna tenha um domínio de privacidade. Por exemplo, as colunas score e age no exemplo a seguir devem ter domínios de privacidade.

SELECT AVG(age) FROM t1
  GROUP BY score;
Copy

Esses requisitos não se aplicam a subconsultas. Por exemplo, na consulta a seguir, a coluna mean_age deve ter um domínio de privacidade, mas as colunas score e age não, mesmo que sejam usadas em uma agregação.

SELECT AVG(mean_age)
  FROM (SELECT AVG(age) AS mean_age FROM t1 GROUP BY score)
  WHERE mean_age >= 20 AND mean_age <= 80;
Copy

Definição de um domínio de privacidade

Embora tanto os administradores quanto os analistas que executam consultas possam definir um domínio de privacidade para uma coluna, eles fazem isso de maneiras diferentes:

  • Um administrador usa comandos CREATE TABLE e ALTER TABLE para definir um domínio de privacidade para uma coluna. Um administrador do provedor de dados define domínios de privacidade antes de dar acesso aos analistas. Em algumas circunstâncias, um administrador do analista também pode precisar definir domínios de privacidade em tabelas que estão sendo unidas às tabelas protegidas do provedor de dados. Se você for um administrador que precisa definir domínios de privacidade, consulte Como trabalhar com domínios de privacidade como administrador.

  • Um analista molda uma consulta para especificar implicitamente um domínio de privacidade usando elementos de consulta, como filtros e transformações de colunas. Esses domínios de privacidade podem ser especificados para colunas sem um domínio de privacidade ou podem restringir um domínio de privacidade definido pelo provedor de dados. Se você é um analista que precisa especificar ou restringir um domínio de privacidade, consulte Como trabalhar com domínios de privacidade como analista.

Interações entre domínios de privacidade

Vários domínios de privacidade podem estar envolvidos em uma consulta. Pode haver um domínio de privacidade especificado pelo administrador e um domínio de privacidade especificado pelo analista na mesma coluna. Como alternativa, uma consulta pode unir duas tabelas em uma coluna que tenha um domínio de privacidade em ambas as tabelas.

O Snowflake avalia todos os domínios de privacidade e calcula o domínio de privacidade a ser usado durante a consulta. Para obter informações sobre como esse domínio de privacidade no tempo de consulta é determinado, consulte:

Interação entre domínios de privacidade especificados pelo administrador e pelo analista

Um analista usa elementos de consulta para especificar implicitamente um domínio de privacidade para uma coluna. Por exemplo, filtrar uma coluna define um domínio de privacidade para ela. Este domínio de privacidade especificado pelo analista existe somente durante a consulta; ele não altera o domínio de privacidade definido por um administrador na coluna.

Um domínio de privacidade especificado pelo analista pode restringir um domínio de privacidade especificado pelo administrador, mas nunca pode expandi-lo. O domínio de privacidade no momento da consulta é a interseção entre o domínio de privacidade especificado pela consulta e o domínio de privacidade definido pelo administrador. Por exemplo, se o provedor de dados definir o domínio de privacidade como um intervalo (5, 15) e a consulta usar filtros para especificar o domínio de privacidade como um intervalo (0, 10), o domínio de privacidade efetivo no momento da consulta será (5, 10).

Da mesma forma, se o administrador definir o domínio de privacidade como uma lista (‘azul’, ‘amarelo’) e a consulta usar filtros para especificar um domínio de privacidade de (‘laranja’, ‘azul’), o domínio de privacidade no momento da consulta será (‘azul’).

Domínios de privacidade e junções

Quando um analista une duas tabelas em uma coluna que tem um domínio de privacidade em ambas as tabelas, o tipo de união determina o domínio de privacidade em tempo de consulta. Durante a duração da consulta, o domínio de privacidade efetivo pode ser a interseção dos dois domínios de privacidade, a união dos dois domínios de privacidade ou apenas um dos domínios de privacidade.

Na tabela a seguir, domainL refere-se ao domínio de privacidade na coluna de junção na tabela da esquerda e domainR refere-se ao domínio de privacidade na coluna de junção na tabela da direita.

Tipo de junção

Domínio de privacidade no tempo de consulta

INNER

Intersecção de domainL e domainR

OUTER

União de domainL e domainR

LEFT

domainL

RIGHT

domainR

LEFT SEMI

Intersecção de domainL e domainR

LEFT ANTI

domainL

Por exemplo, suponha que a coluna day em t1 tenha um domínio de privacidade de (1, 100) e a coluna day em t2 tenha um domínio de privacidade de (0, 90). Quando um analista une t1 e t2 em day, o domínio de privacidade do tempo de consulta é (1, 90), que é a intersecção dos dois domínios de privacidade.

Valores fora de um domínio de privacidade

Um domínio de privacidade define valores possíveis em uma coluna, não necessariamente valores reais. A seguir, é resumido o que acontece com valores que não estão incluídos na lista ou no intervalo do domínio de privacidade.

Cadeias de caracteres

Valores em uma coluna de cadeia de caracteres que estão fora do domínio de privacidade são sempre tratados como NULL durante a consulta. Isso é verdadeiro independentemente de ser um domínio de privacidade especificado pelo administrador, um domínio de privacidade especificado pelo analista ou uma interseção de domínios de privacidade.

Por exemplo, suponha que o provedor de dados tenha definido um domínio de privacidade em uma coluna state de ('california', 'oregon') e o analista tenha escrito uma consulta que filtra a coluna state para ('nevada', 'oregon'). Se a consulta usar a coluna state em uma cláusula GROUPBY, o resultado conterá dois grupos: OREGON e NULL. O grupo NULL inclui todos os registros onde o valor da coluna state não é OREGON, juntamente com os registros onde o valor da coluna state é literalmente NULL.

Numérico, data e hora

O Snowflake trata valores numérico, de data ou de hora que estão fora do intervalo de um domínio de privacidade de forma diferente, dependendo se o domínio de privacidade foi definido por um administrador ou um analista.

Especificado pelo administrador:

Quando o provedor de dados define um domínio de privacidade de intervalo que contém um subconjunto dos valores reais da coluna, os valores fora do domínio de privacidade são fixados, ou seja, são tratados como se fossem o valor mais próximo no domínio (o valor mínimo ou máximo). Por exemplo, se o domínio de privacidade de uma coluna consistir em números inteiros entre 1 e 100, um registro com um valor real de 105 será tratado como se tivesse um valor de 100 ao calcular as agregações. Analistas não podem acessar valores fora do domínio de privacidade.

Quando uma junção de duas tabelas protegidas por privacidade resulta na interseção de domínios de privacidade, os valores fora do domínio de privacidade no momento da consulta são fixados.

Especificado pelo analista:

Quando um analista especifica um domínio de privacidade para uma coluna que não tem um ou restringe um domínio de privacidade especificado pelo administrador, a própria consulta determina o que acontece com os valores que estão fora do domínio de privacidade.

  • Se a consulta usar um filtro (cláusula WHERE), os valores fora do domínio de privacidade serão ignorados ao calcular agregações.

  • Se a consulta usar uma transformação de coluna, os valores na coluna que estiverem fora do domínio de privacidade serão fixados como um domínio de privacidade especificado pelo administrador.

Como os elementos de consulta intermediários afetam os domínios de privacidade

O modo como uma consulta é escrita pode afetar a alteração do intervalo de um domínio de privacidade ou até mesmo a existência de um domínio de privacidade em uma coluna. Esta seção ajuda você a entender como as partes intermediárias de uma consulta, ou seja, as partes da consulta antes da agregação final, podem afetar o domínio de privacidade de uma coluna.

Adição de novas colunas

Se uma consulta adicionar uma nova coluna baseada em uma coluna existente, a especificação ou restrição de um domínio de privacidade na coluna original não terá efeito sobre a nova coluna.

No exemplo a seguir, suponha que o provedor de dados definiu o domínio de privacidade na coluna score como um intervalo entre 0 e 100. Quando a consulta especifica o domínio de privacidade de score como um intervalo entre 1 e 2, ela não tem efeito no domínio de privacidade da coluna score_derived.

SELECT AVG(score_derived)
  FROM (SELECT score, score_derived FROM t1 WHERE score <= 2);
Copy

Por exemplo, a saída pode ser:

--------------------------
|"avg(""SCORE_DERIVED"")"|
--------------------------
|31.8196209349           |
--------------------------
Como usar uma cláusula GROUP BY em agregações intermediárias

Para partes intermediárias de uma consulta, usar uma cláusula GROUP BY ao agregar uma coluna remove o domínio de privacidade da coluna. Como resultado, você precisa especificar um novo domínio de privacidade na coluna se ele for usado na agregação final da consulta.

No exemplo a seguir, a agregação inicial remove qualquer domínio de privacidade que tenha sido definido na coluna score. A consulta é bem-sucedida somente porque define um domínio de privacidade no alias da coluna antes da agregação final.

SELECT AVG(num_scores)
  FROM (SELECT COUNT(score) AS num_scores
    FROM t1
    GROUP BY age)
  WHERE num_scores >= 0 AND num_scores <= 100;
Copy