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 valor 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>
        }
        , ...
      }
    }
    , ...
  ]
  'privacy_filter': <boolean>,
  'replace_output_tables': <boolean>,
}
Copy

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

datasets

Um valor ARRAY que especifica os dados a serem gerados. Cada elemento da matriz é um valor OBJECT que descreve informações sobre um único par de tabelas de origem/gerada. É possível especificar até cinco pares de tabelas. A solicitação falhará se você fornecer mais de cinco objetos datasets.

Cada valor OBJECT 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 OBJECT especificando 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 OBJECT que contém o seguinte par chave-valor:

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

Padrão: FALSE

Para obter mais informações, consulte Filtragem dos dados sintéticos.

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

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

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 |
+---------------------------+-------------------+--------------+----------------+------------------------+-------------------+---------------------+-----------------------+------------------------+------------------------------------+----------------+