GENERATE_SYNTHETIC_DATA¶
La procédure génère des données synthétiques à partir d’une ou plusieurs tables, sur la base des données des tables d’entrée, et renvoie une table qui contient des métriques sur les données générées, comme le coefficient de différence (similarité) entre les données sources et les données générées.
Cette procédure stockée utilise les droits de l’appelant pour générer la table de sortie.
Lisez les exigences relatives à l’exécution de cette procédure. Si l’une des exigences n’est pas satisfaite, la requête échouera avant de commencer à générer des données.
En savoir plus sur l’utilisation des données synthétiques.
Syntaxe¶
SNOWFLAKE.DATA_PRIVACY.GENERATE_SYNTHETIC_DATA(<configuration_object>)
Arguments¶
configuration_object
OBJECT qui spécifie les détails de la requête. Vous pouvez utiliser une constante OBJECT pour spécifier cet objet.
La valeur OBJECT a la structure suivante :
{ '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> }
La valeur OBJECT contient les paires clé-valeur suivantes :
datasets
Tableau spécifiant les données à générer. Chaque élément du tableau est une valeur OBJECT qui définit une seule paire de tables entrée-sortie. Vous pouvez spécifier un maximum de cinq paires de tables.
Une valeur OBJECT enfant représentant une seule paire de tables entrée-sortie possède les propriétés suivantes :
input_table
Nom complet de la table d’entrée à partir de laquelle les données synthétiques sont générées. Si la table n’existe pas ou n’est pas accessible, Snowflake renvoie un message d’erreur. Voir Utiliser des données synthétiques dans Snowflake pour plus d’exigences concernant les tables d’entrée.
Si l’identificateur contient des espaces ou des caractères spéciaux, toute la chaîne doit être délimitée par des guillemets doubles. Les identificateurs entre guillemets doubles sont également sensibles à la casse.
Pour plus d’informations, voir Exigences relatives à l’identificateur.
output_table
Nom complet de la table de sortie pour stocker les données synthétiques générées à partir de
input_table
. La table générée aura les mêmes autorisations et politiques que si l’utilisateur avait appelé CREATE TABLE avec les valeurs par défaut. Si la table existe déjà et que la valeur estreplace_output_tables=TRUE
, la table existante sera écrasée.De plus, l’identificateur doit commencer par un caractère alphabétique et ne peut pas contenir d’espaces ou de caractères spéciaux à moins que toute la chaîne d’identificateur soit délimitée par des guillemets doubles (par exemple,
"My object"
). Les identificateurs entre guillemets doubles sont également sensibles à la casse.Pour plus d’informations, voir Exigences relatives à l’identificateur.
columns
(Facultatif) Valeur OBJECT spécifiant des propriétés supplémentaires pour des colonnes spécifiques. Chaque champ de l’OBJECT définit les propriétés d’une seule colonne. Il n’est pas nécessaire de définir des propriétés pour toutes les colonnes, ni pour aucune colonne. Pour chaque champ :
La clé est le nom de la colonne. Les propriétés de la valeur doivent être appliquées à cette colonne.
La valeur est une valeur OBJECT contenant l’une des paires clé-valeur suivantes :
join_key
: BOOLEAN, où TRUE indique qu’il s’agit d’une colonne de clé de jointure. Cela ne peut pas être utilisé dans une colonne intituléecategorical
. La colonne doit être une valeur de type chaîne, numérique ou booléen. En savoir plus sur les clés de jointure.Par défaut : FALSE.
categorical
: BOOLEAN, utilisé pour spécifier si la colonne est une chaîne catégorique. Définissez cette valeur sur TRUE pour permettre à la sortie de marquer les données comme non sensibles et pouvant être utilisées dans la sortie. Définissez cette valeur sur FALSE pour expurger des valeurs de la sortie. Si cette valeur n’est pas spécifiée, elle sera déterminée par l’examen des données. Peut être spécifié uniquement pour les colonnes STRING. Si cette valeur est définie sur TRUE, vous ne pouvez pas spécifier les champsreplace
oujoin_key
pour cette colonne.Valeur par défaut : déduite des données de la colonne.
replace
: spécifie un format de sortie pour les valeurs STRING. Peut être utilisé uniquement pour les colonnes de chaînes catégoriques. Les seules valeurs qui peuvent être utilisées avec les colonnesjoin_key
sontuuid
etemail
. Ne peut pas être utilisé lorsquecategorical
est défini sur TRUE. Si cela est spécifié, vous devez fournir une valeur pourconsistency_secret
. Les valeurs suivantes sont prises en charge :Valeurs replace
¶Valeur
Description
uuid
Un UUID. Exemple :
88d99a35-c4be-4022-b06a-41fb4629b46d
name
Prénom et nom de famille dans le style des paramètres régionaux US. Exemple :
George Washington
first_name
Prénom dans le style des paramètres régionaux US. Exemple :
George
last_name
Nom de famille dans le style des paramètres régionaux US. Exemple :
Washington
address
Adresse abrégée dans le style des paramètres régionaux US. Exemple :
1600 Pennsylvania Ave
full_address
Adresse postale détaillée dans le style des paramètres régionaux US. Exemple :
1600 Pennsylvania Ave NW, Washington DC 20500
email
Adresse e-mail. Exemple :
bdbQ6OPBS5ScOdJx8bVpFw@example.com
phone
Numéro de téléphone à 10 chiffres de style US dans le style des paramètres régionaux US. Exemple :
212-555-1234
ssn
Numéro de sécurité sociale dans le style US. Exemple :
123-45-6789
Par défaut :
Pour les colonnes
join_key
,uuid
Pour les colonnes sans clé de jointure, la valeur sera expurgée.
similarity_filter
(Facultatif) Indique s’il faut utiliser un filtre de similarité lors de la création des données synthétiques. Attribuez la valeur TRUE à ce paramètre pour utiliser le filtre de confidentialité intégré afin de supprimer les lignes de la table cible qui sont trop similaires aux lignes de la table d’entrée. Si défini sur FALSE, chaque table de sortie aura le même nombre de lignes que sa table d’entrée ; si défini sur TRUE, une table de sortie peut avoir moins de lignes que sa table d’entrée. Si cette valeur est définie sur TRUE, la génération de données synthétiques échouera si vous avez des valeurs NULL dans des colonnes autres que des chaînes.
Par défaut : FALSE
Pour plus d’informations, voir Améliorer la protection de la vie privée.
replace_output_tables
(Facultatif) Spécifie s’il faut écraser la table de données synthétiques de sortie lors de la création des données synthétiques. Définissez ceci sur TRUE pour écraser la table de sortie.
Par défaut : FALSE
consistency_secret
STRING de référence à l’échelle de la session pour un SECRET de clé symétrique. Obligatoire si
replace
est spécifié ; sinon, facultatif. Si cette valeur est présente, la procédure génère des valeurs cohérentes pour les clés de jointure STRING sur plusieurs exécutions qui réutilisent le même secret de cohérence. Si cette valeur n’est pas présente, les clés de jointure seront cohérentes entre les tables d’une même exécution, mais pas entre les exécutions. Pour en savoir plus.Par défaut : pas de cohérence
Sortie¶
Nom de la colonne |
Type de données |
Description |
---|---|---|
|
TIMESTAMP |
Heure à laquelle les données synthétiques ont été générées. |
|
VARCHAR |
Nom de la table synthétique. |
|
VARCHAR |
Nom du schéma de la table synthétique. |
|
VARCHAR |
Nom de la base données de la table synthétique. |
|
VARCHAR |
Une paire de colonnes dans la table synthétique. |
|
NUMBER |
Identificateur interne/généré par le système de la table d’entrée. |
|
VARCHAR |
Nom de la table d’entrée. |
|
VARCHAR |
Nom du schéma de la table d’entrée. |
|
VARCHAR |
Nom de la base de données de la table d’entrée. |
|
VARCHAR |
Noms des colonnes sources. |
|
ENUM |
Actuellement, |
|
NUMBER |
Valeur de la métrique. |
Exigences en matière de contrôle d’accès¶
Pour générer des données synthétiques, vous devez utiliser un rôle doté de chacune des autorisations suivantes :
USAGE sur l’entrepôt que vous souhaitez utiliser pour les requêtes.
SELECT sur la table d’entrée à partir de laquelle vous souhaitez générer des données synthétiques.
USAGE sur la base de données et le schéma qui contiennent la table d’entrée, et sur la base de données qui contient la table de sortie.
CREATE TABLE sur le schéma qui contient la table de sortie.
OWNERSHIP sur les tables de sortie. La façon la plus simple de procéder est d’accorder l’autorisation OWNERSHIP au schéma dans lequel la table de sortie est générée. (Toutefois, si quelqu’un a appliqué un FUTURE GRANT sur ce schéma, la propriété de la table sera remplacée en silence, c’est-à-dire que
GRANT OWNERSHIP ON FUTURE TABLES IN SCHEMA db.my_schema TO ROLE some_role
accordera automatiquement OWNERSHIP àsome_role
sur toutes les nouvelles tables créées dans le schémamy_schema
)
Tous les utilisateurs peuvent accéder à la procédure stockée SNOWFLAKE.DATA_PRIVACY.GENERATE_SYNTHETIC_DATA. L’accès est possible en utilisant le rôle de base de données SNOWFLAKE.CORE_VIEWER, qui est accordé au rôle PUBLIC.
Notes sur l’utilisation¶
Les valeurs de clé JSON doivent être en minuscules.
Vous devez accepter les termes et conditions d’Anaconda dans votre compte Snowflake afin d’activer cette fonction.
Pour les exigences supplémentaires, voir Exigences.
Exemples¶
Cet exemple génère des données synthétiques à partir d’une table d’entrée contenant des informations médicales (groupe sanguin, sexe, âge et origine ethnique). La réponse montre la proximité des données entre les tables sources et générées. La table des données synthétiques générées n’est pas affichée.
Deux colonnes désignées comme clés de jointure
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}}
}
]
});
Aucune colonne n’est désignée comme clé de jointure
CALL SNOWFLAKE.DATA_PRIVACY.GENERATE_SYNTHETIC_DATA({
'datasets':[
{
'input_table': 'syndata_db.sch.faker_source_t',
'output_table': 'syndata_db.sch.faker_synthetic_t'
}
]
});
Utiliser une clé de cohérence pour générer des valeurs cohérentes sur plusieurs exécutions
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
});
Sortie de l’appel de la fonction
+---------------------------+-------------------+--------------+----------------+------------------------+-------------------+---------------------+-----------------------+------------------------+------------------------------------+----------------+
| 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 |
+---------------------------+-------------------+--------------+----------------+------------------------+-------------------+---------------------+-----------------------+------------------------+------------------------------------+----------------+