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>)
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> }
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 ereplace_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 comocategorical
. 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 camposreplace
oujoin_key
para essa colunaPadrã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 colunasjoin_key
sãouuid
eemail
. Não pode ser usado quandocategorical
é TRUE. Se especificado, você deve fornecer um valor paraconsistency_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 |
---|---|---|
|
TIMESTAMP |
Hora em que os dados sintéticos foram gerados. |
|
VARCHAR |
Nome da tabela sintética. |
|
VARCHAR |
Nome do esquema da tabela sintética. |
|
VARCHAR |
Nome do banco de dados da tabela sintética. |
|
VARCHAR |
Um par de colunas na tabela sintética. |
|
NUMBER |
Identificador interno/gerado pelo sistema da tabela de entrada. |
|
VARCHAR |
Nome da tabela de entrada. |
|
VARCHAR |
Nome do esquema da tabela de entrada. |
|
VARCHAR |
Nome do banco de dados da tabela de entrada. |
|
VARCHAR |
Nomes das colunas de origem. |
|
ENUM |
Atualmente, |
|
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 asome_role
em todas as novas tabelas criadas no esquemamy_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¶
Os valores da chave JSON devem estar em letras minúsculas.
É necessário aceitar os termos e condições do Anaconda em sua conta Snowflake para ativar esse recurso.
Para obter requisitos adicionais, consulte Requisitos.
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}}
}
]
});
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'
}
]
});
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
});
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 |
+---------------------------+-------------------+--------------+----------------+------------------------+-------------------+---------------------+-----------------------+------------------------+------------------------------------+----------------+