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
Une valeur OBJECT qui précise 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> } , ... } } , ... ] 'privacy_filter': <boolean>, 'replace_output_tables': <boolean>, }
La valeur OBJECT contient les paires clé-valeur suivantes :
datasets
Une valeur ARRAY spécifiant les données à générer. Chaque élément du tableau est une valeur OBJECT qui décrit les informations relatives à une seule paire de tables source/générée. Vous pouvez spécifier jusqu’à cinq paires de tables. La requête échouera si vous fournissez plus de cinq objets
datasets
.Chaque valeur OBJECT 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) Un 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 un OBJECT contenant la paire clé/valeur suivante :
join_key
: le paramètre est TRUE ou FALSE, où TRUE indique qu’il s’agit d’une colonne de clé de jointure. En savoir plus sur les clés de jointurePar défaut : FALSE.
privacy_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.
Par défaut : FALSE
Pour plus d’informations, voir Filtrer les données synthétiques.
replace_output_tables
(Facultatif) Indique 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
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',
}
]
});
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 |
+---------------------------+-------------------+--------------+----------------+------------------------+-------------------+---------------------+-----------------------+------------------------+------------------------------------+----------------+