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>)
Copy

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>,
}
Copy

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 est replace_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 :

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

created_on

TIMESTAMP

Heure à laquelle les données synthétiques ont été générées.

table_name

VARCHAR

Nom de la table synthétique.

table_schema

VARCHAR

Nom du schéma de la table synthétique.

table_database

VARCHAR

Nom de la base données de la table synthétique.

columns

VARCHAR

Une paire de colonnes dans la table synthétique.

source_table_id

NUMBER

Identificateur interne/généré par le système de la table d’entrée.

source_table_name

VARCHAR

Nom de la table d’entrée.

source_table_schema

VARCHAR

Nom du schéma de la table d’entrée.

source_table_database

VARCHAR

Nom de la base de données de la table d’entrée.

source_columns

VARCHAR

Noms des colonnes sources.

metric_type

ENUM

correlation_coefficient_difference - Calculé comme la valeur absolue du coefficient de corrélation entre deux colonnes non jointes dans la table source et les deux mêmes colonnes dans les données générées.

Actuellement, correlation_coefficient_difference est la seule métrique prise en charge. Il s’agit de la différence entre le coefficient de corrélation de chaque combinaison de colonnes dans la table d’entrée et le même coefficient dans les données générées. Chaque ligne représente la différence de coefficient de corrélation entre une combinaison de colonnes. La paire de noms de colonnes se trouve dans les colonnes suivantes : columns et source_columns.

metric_value

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éma my_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

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}}
        }
      ]
  });
Copy

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',
      }
    ]
});
Copy

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