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;
df.group_by("score").agg(f.mean("age").as_("mean_age")).show()
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;
df.group_by("score").agg(f.mean("age").as_("mean_age")) \
.where((f.col("mean_age") >= 20) & (f.col("mean_age") <= 80)) \
.select(f.mean("mean_age")).show()
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 |
OUTER |
União de |
LEFT |
|
RIGHT |
|
LEFT SEMI |
Intersecção de |
LEFT ANTI |
|
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 colunastate
para ('nevada'
,'oregon'
). Se a consulta usar a colunastate
em uma cláusula GROUPBY, o resultado conterá dois grupos:OREGON
eNULL
. O grupoNULL
inclui todos os registros onde o valor da colunastate
não éOREGON
, juntamente com os registros onde o valor da colunastate
é literalmenteNULL
.
- 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 descore
como um intervalo entre 1 e 2, ela não tem efeito no domínio de privacidade da colunascore_derived
.
SELECT AVG(score_derived)
FROM (SELECT score, score_derived FROM t1 WHERE score <= 2);
df.with_column("score_derived", f.col("score")) \
.where((f.col("score") >= 1) & \
(f.col("score") <= 2)) \
.select(f.mean("score_derived")).show()
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;
df.group_by("age").agg(f.count("score").as_("num_scores")) \
.where((f.col("num_scores") >= 0) & (f.col("num_scores") <= 100)) \
.select(f.mean("num_scores")).show()