Como trabalhar com domínios de privacidade como administrador

Um domínio de privacidade define os valores possíveis em uma coluna, semelhante a um domínio matemático. O Snowflake usa um domínio de privacidade para determinar a quantidade de ruído a ser introduzida nos resultados.

Para obter uma compreensão completa dos domínios de privacidade antes de concluir as tarefas nesta seção, consulte Sobre domínios de privacidade.

É uma prática recomendada para um provedor de dados definir um domínio de privacidade para todas as colunas numéricas e categóricas sobre as quais um analista pode querer agir antes de distribuir os dados para ele.

Como escolher um domínio de privacidade

Um domínio de privacidade define valores possíveis em uma coluna, não necessariamente valores reais. Você pode restringir ou expandir um domínio de privacidade conforme necessário para que ele não contenha valores reais. Por exemplo, você pode fazer qualquer um dos seguintes:

  • Defina uma lista mais ampla para ocultar valores exatos. Como um analista pode visualizar o domínio de privacidade, talvez você não queira expor o conteúdo exato de uma coluna. Por exemplo, suponha que uma coluna contenha um subconjunto de códigos postais. Talvez você queira expandir o domínio de privacidade para incluir todos os códigos postais possíveis, ocultando assim se um determinado código postal está no conjunto de dados.

  • Defina um intervalo mais estreito para ocultar a presença de um valor discrepante. Por exemplo, se a maioria dos valores estiver entre 1 e 50, talvez você não queira que um valor de 100 seja incluído em uma média, pois o analista poderia deduzir a presença de 100 porque a média é excepcionalmente alta.

Para obter informações sobre como os valores fora de um domínio de privacidade são tratados, consulte Valores fora de um domínio de privacidade.

Importante

Qualquer pessoa com privilégios para consultar uma tabela protegida por privacidade tem a capacidade de visualizar o domínio de privacidade de uma coluna nessa tabela, portanto, escolha seus domínios de privacidade com cuidado.

Embora a maioria dos campos deva ter um domínio de privacidade, há exceções importantes. Por exemplo, campos de identificador exclusivos como ID do usuário, e-mail, números de cartão de crédito e números de previdência Social não devem ter um domínio de privacidade. Os usuários podem ver o domínio exato da privacidade e, normalmente, você não quer que um analista saiba se um identificador específico existe no conjunto de dados.

Em contraste, os domínios de privacidade devem conter os valores reais para campos de identificador quando eles não são exclusivos de uma entidade individual e cujos valores possíveis são conhecidos publicamente, como códigos postais, códigos ICD em dados de saúde e códigos NAICS.

Definição de um domínio de privacidade

Você define um domínio de privacidade como um intervalo de valores com um mínimo e um máximo ou como uma lista enumerada de valores. Em geral, o tipo de domínio de privacidade é baseado no tipo de dados da coluna. Não é possível definir um domínio de privacidade em uma coluna se o tipo de dados não estiver na lista a seguir.

Tipo de dados

Tipo de domínio de privacidade

Numérico

Data e hora

Faixa

Cadeias de caracteres

Lista enumerada

Para definir, alterar ou descartar um domínio de privacidade, você precisa do privilégio OWNERSHIP em uma tabela. Você pode definir um domínio de privacidade ao fazer o seguinte:

Para cada um desses métodos, a sintaxe do novo domínio de privacidade é a mesma.

Nota

Quando uma tabela é descartada, seus domínios de privacidade também são descartados. Isso também se aplica a um comando CREATE OR REPLACE.

Sintaxe de domínio de privacidade

A sintaxe para criar um domínio de privacidade é:

PRIVACY DOMAIN
  {
      [ BETWEEN ( <lo_value>, <hi_value> ) ]
    | [ IN ( '<value1>, '<value2>', ... ) ]
    | [ REFERENCES <table_name>( <col_name> ) ]
  }
Copy

Parâmetros

Um único parâmetro deve ser especificado.

BETWEEN ( lo_value, hi_value )

Cria um domínio de privacidade que é o intervalo de valores possíveis na coluna, onde lo_value é o valor mínimo e hi_value é o valor máximo.

IN ( 'value1', 'value2', ... )

Cria um domínio de privacidade que é uma lista enumerada dos valores especificados.

O parâmetro IN aceita no máximo 50 valores, cada um dos quais pode conter no máximo 100 caracteres. Se você precisar especificar uma lista enumerada com mais de 50 valores, use o parâmetro REFERENCES.

REFERENCES table_name( col_name )

Cria um domínio de privacidade que é uma lista enumerada que consiste nos valores contidos na coluna de uma tabela.

O usuário que faz consultas privadas diferenciadas em uma tabela com um domínio de privacidade REFERENCES deve ter privilégios SELECT na tabela que contém a coluna referenciada no domínio de privacidade. Isso significa que, se você compartilhar uma tabela protegida por privacidade que faça referência a outra, é melhor compartilhar a tabela referenciada no mesmo compartilhamento.

O domínio de privacidade pode fazer referência a si mesmo; no entanto, você deve ter cuidado ao usar esse recurso. Se o domínio de privacidade fizer referência à sua própria coluna, a lista enumerada conterá todos os valores reais na coluna, e não todos os valores possíveis na coluna, o que pode expor informações privadas. Por exemplo, se o domínio de privacidade de uma coluna zipcode fizer referência a si mesmo, o analista saberá com absoluta certeza se um determinado código postal está no conjunto de dados ao ver o domínio de privacidade.

Nota

Você não pode definir um domínio de privacidade que faça referência a si mesmo ao criar a tabela pela primeira vez. Primeiro crie a tabela e depois defina o domínio de privacidade com um comando separado.

A coluna referenciada pode conter 16.384 valores exclusivos.

Definição de um domínio de privacidade ao criar uma nova tabela

A sintaxe para definir um domínio de privacidade para uma coluna ao usar o comando CREATE TABLE para criar uma tabela é:

CREATE TABLE <table_name>
  ( <col_name> <col_type> PRIVACY DOMAIN
    {
        [ BETWEEN ( <lo_value>, <hi_value> ) ]
      | [ IN ( '<value1>', '<value2>', ... ) ]
      | [ REFERENCES <table_name>( <col_name> ) ]
    }
  )
Copy

Para obter mais informações, consulte Sintaxe de domínio de privacidade.

Definição de um domínio de privacidade ao adicionar uma nova coluna

A sintaxe para definir um domínio de privacidade ao usar ALTER TABLE para adicionar uma nova coluna a uma tabela existente é:

ALTER TABLE <table_name>
  ADD COLUMN <col_name> <col_type> PRIVACY DOMAIN
    {
        [ BETWEEN ( <lo_value>, <hi_value> ) ]
      | [ IN ( '<value1>', '<value2>', ... ) ]
      | [ REFERENCES <table_name>( <col_name> ) ]
    }
Copy

Para obter mais informações, consulte Sintaxe de domínio de privacidade.

Definição de um domínio de privacidade modificando uma coluna

A sintaxe para definir um domínio de privacidade para uma coluna existente de uma tabela usando o comando ALTER TABLE … ALTER COLUMN é:

ALTER TABLE <table_name>
  { ALTER | MODIFY } COLUMN <col1_name> SET PRIVACY DOMAIN
    {
        [ BETWEEN ( <lo_value>, <hi_value> ) ]
      | [ IN ( '<value1>', '<value2>', ... ) ]
      | [ REFERENCES <table_name>( <col_name> ) ]
    }
Copy

Para obter mais informações, consulte Sintaxe de domínio de privacidade.

Modificação de um domínio de privacidade

A sintaxe para modificar um domínio de privacidade existente é idêntica à criação de um novo domínio de privacidade em uma coluna existente. Um comando ALTER TABLE .. ALTER COLUMN … SET PRIVACY DOMAIN substitui o domínio de privacidade antigo pelo novo.

Remoção de um domínio de privacidade

A sintaxe para usar o comando ALTER TABLE … ALTER COLUMN para remover um domínio de privacidade de uma coluna é:

ALTER TABLE <table_name>
  { ALTER | MODIFY } COLUMN <col1_name> UNSET PRIVACY DOMAIN
Copy

Exibição de um domínio de privacidade

Para ver os domínios de privacidade de uma tabela ou exibição protegida por privacidade, execute o comando DESCRIBE TABLE ou DESCRIBE VIEW. O domínio de privacidade de uma coluna aparece na coluna PRIVACY_DOMAIN da saída.

Você precisa do privilégio SELECT em uma tabela protegida por privacidade para exibição seus domínios de privacidade.

Interpretação do objeto de domínio de privacidade

Um domínio de privacidade para uma coluna é retornado como um objeto JSON. O campo domain_type do objeto JSON indica se o domínio de privacidade é um intervalo de valores ou uma lista enumerada. Os campos restantes no objeto dependem do valor do campo domain_type.

O objeto JSON para um domínio de privacidade pode incluir os seguintes campos:

domain_type

Indica o tipo de domínio de privacidade.

BETWEEN

O domínio de privacidade é um intervalo de valores possíveis que podem estar na coluna.

IN

O domínio de privacidade é uma lista enumerada dos valores possíveis que podem estar na coluna.

REFERENCES

O domínio de privacidade é uma lista enumerada dos valores possíveis que podem estar na coluna. Esta lista vem da coluna da mesma tabela ou de outra tabela. Para exibir a lista enumerada do domínio de privacidade, consulte o conteúdo da coluna referenciada.

low

Quando domain_type = BETWEEN, especifica o valor mínimo no intervalo de valores possíveis.

high

Quando domain_type = BETWEEN, especifica o valor máximo no intervalo de valores possíveis.

values

Quando domain_type = IN, especifica a lista enumerada de valores possíveis, estruturada como uma matriz.

database

Quando domain_type = REFERENCES, especifica o banco de dados que contém a coluna que o Snowflake referencia para construir a lista enumerada de valores possíveis.

schema

Quando domain_type = REFERENCES, especifica o esquema que contém a coluna que o Snowflake referencia para construir a lista enumerada de valores possíveis.

table

Quando domain_type = REFERENCES, especifica a tabela que contém a coluna que o Snowflake referencia para construir a lista enumerada de valores possíveis.

column

Quando domain_type = REFERENCES, especifica a coluna que o Snowflake referencia para construir a lista enumerada de valores possíveis. Para exibir a lista enumerada do domínio de privacidade, consulte o conteúdo desta coluna.