GENERATE_SYNTHETIC_DATA

O procedimento gera dados sintéticos de uma ou mais tabelas, com base nos dados das tabelas de entrada, e retorna uma tabela com métricas sobre os dados gerados, como o coeficiente de diferença (similaridade) entre os dados de origem e os dados gerados.

Esse procedimento armazenado usa os direitos do chamador para gerar a tabela de saída.

Leia os requisitos para executar esse procedimento. Se algum requisito não for atendido, a solicitação falhará antes de começar a gerar dados.

Saiba mais sobre o uso de dados sintéticos.

Sintaxe

SNOWFLAKE.DATA_PRIVACY.GENERATE_SYNTHETIC_DATA(<configuration_object>)
Copy

Argumentos

configuration_object

Um OBJECT que especifica os detalhes da solicitação. É possível usar uma constante OBJECT para especificar esse objeto.

O valor OBJECT tem a seguinte estrutura:

{
  'datasets': [
    {
      'input_table': '<input_table_name>',
      'output_table' : '<output_table_name>',
      'columns': {
        '<column_name>': {
          <property_name>: <property_value>
        }
        , ...
      }
    }
    , ...
  ],
  'similarity_filter': <boolean>,
  'replace_output_tables': <boolean>,
  'consistency_secret': <session-scoped reference string>
}
Copy

O valor OBJECT contém os seguintes pares chave-valor:

datasets

Uma matriz especificando os dados a serem gerados. Cada elemento da matriz é um valor OBJECT que define um único par de tabelas de entrada e saída. Você pode especificar um máximo de cinco pares de tabelas.

Um valor OBJECT filho que representa um único par de tabelas de entrada e saída tem as seguintes propriedades:

input_table

O nome totalmente qualificado da tabela de entrada a partir da qual serão gerados os dados sintéticos. Se a tabela não existir ou não puder ser acessada, o Snowflake retornará uma mensagem de erro. Consulte Como usar dados sintéticos no Snowflake para obter mais requisitos da tabela de entrada.

Se o identificador contiver espaços ou caracteres especiais, toda a cadeia de caracteres deverá ser delimitada por aspas duplas. Os identificadores delimitados por aspas duplas também diferenciam letras maiúsculas de minúsculas.

Para obter mais informações, consulte Requisitos para identificadores.

output_table

O nome totalmente qualificado da tabela de saída para armazenar os dados sintéticos gerados a partir de input_table. A tabela gerada terá as mesmas permissões e políticas como se o usuário tivesse chamado CREATE TABLE com valores padrão. Se a tabela já existir e replace_output_tables=TRUE, a tabela existente será substituída.

Além disso, o identificador deve começar com um caractere alfabético e não pode conter espaços ou caracteres especiais, a menos que toda a cadeia de caracteres do identificador esteja entre aspas duplas (por exemplo, "My object"). Os identificadores delimitados por aspas duplas também diferenciam letras maiúsculas de minúsculas.

Para obter mais informações, consulte Requisitos para identificadores.

columns

(Opcional) Um valor OBJECT que especifica propriedades adicionais para colunas específicas. Cada campo OBJECT define as propriedades de uma única coluna. Você não precisa definir propriedades para todas as colunas ou para nenhuma coluna. Para cada campo:

  • A chave é o nome da coluna. As propriedades do valor devem ser aplicadas a essa coluna.

  • O valor é um valor OBJECT que contém qualquer um dos seguintes pares chave-valor:

    • join_key: BOOLEAN, em que TRUE indica que essa é uma coluna de chave de junção. Isso não pode ser usado em uma coluna rotulada como categorical. A coluna deve ser um valor de cadeia de caracteres, numérico ou booliano. Saiba mais sobre chaves de junção.

      Padrão: FALSE.

    • categorical: BOOLEAN usado para especificar se a coluna é uma cadeia de caracteres categórica. Defina como TRUE para permitir que a saída marque os dados como não sensíveis e possa ser usada na saída. Defina como FALSE para censurar os valores da saída. Se não for especificado, será determinado pela análise dos dados. Pode ser especificado somente para colunas STRING. Se definido como TRUE, você não poderá especificar os campos replace ou join_key para essa coluna

      Padrão: inferido com base nos dados da coluna.

    • replace: especifica um formato de saída para os valores de STRING. Pode ser usado somente em colunas de cadeia de caracteres categóricas. Os únicos valores que podem ser usados com as colunas join_key são uuid e email. Não pode ser usado quando categorical é TRUE. Se especificado, você deve fornecer um valor para consistency_secret. Os seguintes valores são suportados:

      Valores replace

      Valor

      Descrição

      uuid

      Um UUID. Exemplo: 88d99a35-c4be-4022-b06a-41fb4629b46d

      name

      Nome e sobrenome no estilo da localidade US. Exemplo: George Washington

      first_name

      Um nome no estilo da localidade US. Exemplo: George

      last_name

      Um sobrenome no estilo da localidade US. Exemplo: Washington

      address

      Um endereço abreviado no estilo da localidade US. Exemplo: 1600 Pennsylvania Ave

      full_address

      Um endereço detalhado da rua no estilo da localidade US. Exemplo: 1600 Pennsylvania Ave NW, Washington DC 20500

      email

      Um endereço de e-mail. Exemplo: bdbQ6OPBS5ScOdJx8bVpFw@example.com

      phone

      Um número de telefone de 10 dígitos no estilo US no estilo da localidade US. Exemplo: 212-555-1234

      ssn

      Um número de seguro social no estilo US. Exemplo: 123-45-6789

      Padrão:

      • Para colunas join_key, uuid

      • Para colunas sem chave de junção, o valor será censurado.

similarity_filter

(Opcional) Especifica se você deve usar um filtro de similaridade ao criar os dados sintéticos. Defina essa opção como TRUE para usar o filtro de privacidade integrado e remover as linhas da tabela de destino que são muito semelhantes às linhas da tabela de entrada. Se FALSE, cada tabela de saída terá o mesmo número de linhas que a tabela de entrada; se TRUE, uma tabela de saída poderá ter menos linhas que a tabela de entrada. Se TRUE, a geração de dados sintéticos falhará se você tiver valores NULL em qualquer coluna que não seja cadeia de caracteres.

Padrão: FALSE

Para obter mais informações, consulte Aumento de privacidade.

replace_output_tables

(Opcional) Especifica se a tabela de dados sintéticos de saída deve ser sobrescrita ao criar os dados sintéticos. Defina isso como TRUE para substituir a tabela de saída.

Padrão: FALSE

consistency_secret

STRING de referência com escopo de sessão para uma chave simétrica SECRET. Obrigatório se replace for especificado; caso contrário, opcional. Se presente, o procedimento gera valores consistentes para as chaves de junção STRING em várias execuções que reutilizam o mesmo segredo de consistência. Se não estiver presente, as chaves de junção serão consistentes entre as tabelas na mesma execução, mas não entre as execuções. Saiba mais.

Padrão: sem consistência

Saída

Nome da coluna

Tipo de dados

Descrição

created_on

TIMESTAMP

Hora em que os dados sintéticos foram gerados.

table_name

VARCHAR

Nome da tabela sintética.

table_schema

VARCHAR

Nome do esquema da tabela sintética.

table_database

VARCHAR

Nome do banco de dados da tabela sintética.

columns

VARCHAR

Um par de colunas na tabela sintética.

source_table_id

NUMBER

Identificador interno/gerado pelo sistema da tabela de entrada.

source_table_name

VARCHAR

Nome da tabela de entrada.

source_table_schema

VARCHAR

Nome do esquema da tabela de entrada.

source_table_database

VARCHAR

Nome do banco de dados da tabela de entrada.

source_columns

VARCHAR

Nomes das colunas de origem.

metric_type

ENUM

correlation_coefficient_difference – Calculado como o valor absoluto do coeficiente de correlação entre duas colunas não unidas na tabela de origem e as mesmas duas colunas nos dados gerados.

Atualmente, correlation_coefficient_difference é a única métrica compatível. Essa é a diferença entre o coeficiente de correlação de cada combinação de colunas na tabela de entrada e o mesmo coeficiente nos dados gerados. Cada linha representa a diferença do coeficiente de correlação entre uma combinação de colunas. O par de nomes de colunas é encontrado nestas colunas: columns e source_columns.

metric_value

NUMBER

Valor da métrica.

Requisitos de controle de acesso

Para gerar dados sintéticos, é necessário usar uma função com cada uma das seguintes concessões:

  • USAGE no warehouse que você deseja usar para consultas.

  • SELECT na tabela de entrada a partir da qual você deseja gerar dados sintéticos.

  • USAGE no banco de dados e no esquema que contêm a tabela de entrada, bem como no banco de dados que contém a tabela de saída.

  • CREATE TABLE no esquema com a tabela de saída.

  • OWNERSHIP nas tabelas de saída. A maneira mais simples de fazer isso é conceder OWNERSHIP ao esquema em que a tabela de saída é gerada. (No entanto, se alguém tiver aplicado um FUTURE GRANT nesse esquema, a propriedade da tabela será silenciosamente substituída, ou seja, o GRANT OWNERSHIP ON FUTURE TABLES IN SCHEMA db.my_schema TO ROLE some_role concederá automaticamente OWNERSHIP a some_role em todas as novas tabelas criadas no esquema my_schema)

Todos os usuários podem acessar o procedimento armazenado SNOWFLAKE.DATA_PRIVACY.GENERATE_SYNTHETIC_DATA. O acesso é disponibilizado usando a função de banco de dados SNOWFLAKE.CORE_VIEWER, que é concedida à função PUBLIC.

Notas de uso

Exemplos

Este exemplo gera dados sintéticos de uma tabela de entrada com informações médicas (tipo sanguíneo, gênero, idade e etnia). A resposta mostra a proximidade dos dados entre a fonte e as tabelas geradas. A tabela de dados sintéticos gerada não é mostrada.

Duas colunas designadas como chaves de junção

CALL SNOWFLAKE.DATA_PRIVACY.GENERATE_SYNTHETIC_DATA({
    'datasets':[
        {
          'input_table': 'syndata_db.sch.faker_source_t',
          'output_table': 'syndata_db.sch.faker_synthetic_t',
          'columns': { 'blood_type': {'join_key': TRUE} , 'ethnicity': {'join_key': TRUE}}
        }
      ]
  });
Copy

Nenhuma coluna designada como chave de junção

CALL SNOWFLAKE.DATA_PRIVACY.GENERATE_SYNTHETIC_DATA({
  'datasets':[
      {
        'input_table': 'syndata_db.sch.faker_source_t',
        'output_table': 'syndata_db.sch.faker_synthetic_t'
      }
    ]
});
Copy

Use a chave de consistência para gerar valores consistentes em várias execuções

CREATE OR REPLACE SECRET my_db.public.my_consistency_secret
  TYPE = SYMMETRIC_KEY
  ALGORITHM = GENERIC;

CALL SNOWFLAKE.DATA_PRIVACY.GENERATE_SYNTHETIC_DATA({
  'datasets':[
      {
        'input_table': 'CLINICAL_DB.PUBLIC.BASE_TABLE',
        'output_table': 'my_db.public.test_syndata',
        'columns': { 'patient_id': {'join_key': TRUE, 'replace': 'uuid'}}
      }
    ],
    'consistency_secret': SYSTEM$REFERENCE('SECRET', 'MY_CONSISTENCY_SECRET', 'SESSION', 'READ')::STRING,
    'replace_output_tables': TRUE
});
Copy

Saída da chamada da função

+---------------------------+-------------------+--------------+----------------+------------------------+-------------------+---------------------+-----------------------+------------------------+------------------------------------+----------------+
| CREATED_ON                | TABLE_NAME        | TABLE_SCHEMA | TABLE_DATABASE | COLUMNS                | SOURCE_TABLE_NAME | SOURCE_TABLE_SCHEMA | SOURCE_TABLE_DATABASE | SOURCE_COLUMNS         | METRIC_TYPE                        | METRIC_VALUE   |
+---------------------------+-------------------+--------------+----------------+------------------------+-------------------+---------------------+-----------------------+------------------------+------------------------------------+----------------+
| 2024-07-30 09:53:28.439 Z | faker_synthetic_t | sch          | syndata_db     | "BLOOD_TYPE,GENDER"    | faker_source_t    | sch                 | syndata_db            | "BLOOD_TYPE,GENDER"    | CORRELATION_COEFFICIENT_DIFFERENCE | 0.02430214616  |
| 2024-07-30 09:53:28.439 Z | faker_synthetic_t | sch          | syndata_db     | "BLOOD_TYPE,AGE"       | faker_source_t    | sch                 | syndata_db            | "BLOOD_TYPE,AGE"       | CORRELATION_COEFFICIENT_DIFFERENCE | 0.001919343586 |
| 2024-07-30 09:53:28.439 Z | faker_synthetic_t | sch          | syndata_db     | "BLOOD_TYPE,ETHNICITY" | faker_source_t    | sch                 | syndata_db            | "BLOOD_TYPE,ETHNICITY" | CORRELATION_COEFFICIENT_DIFFERENCE | 0.003720197046 |
| 2024-07-30 09:53:28.439 Z | faker_synthetic_t | sch          | syndata_db     | "GENDER,AGE"           | faker_source_t    | sch                 | syndata_db            | "GENDER,AGE"           | CORRELATION_COEFFICIENT_DIFFERENCE | 0.004348586645 |
| 2024-07-30 09:53:28.439 Z | faker_synthetic_t | sch          | syndata_db     | "GENDER,ETHNICITY"     | faker_source_t    | sch                 | syndata_db            | "GENDER,ETHNICITY"     | CORRELATION_COEFFICIENT_DIFFERENCE | 0.001171535243 |
| 2024-07-30 09:53:28.439 Z | faker_synthetic_t | sch          | syndata_db     | "AGE,ETHNICITY"        | faker_source_t    | sch                 | syndata_db            | "AGE,ETHNICITY"        | CORRELATION_COEFFICIENT_DIFFERENCE | 0.004265938158 |
+---------------------------+-------------------+--------------+----------------+------------------------+-------------------+---------------------+-----------------------+------------------------+------------------------------------+----------------+