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

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

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 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) 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ée categorical. 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 champs replace ou join_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 colonnes join_key sont uuid et email. Ne peut pas être utilisé lorsque categorical est défini sur TRUE. Si cela est spécifié, vous devez fournir une valeur pour consistency_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

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

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
});
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 |
+---------------------------+-------------------+--------------+----------------+------------------------+-------------------+---------------------+-----------------------+------------------------+------------------------------------+----------------+