GENERATE_SYNTHETIC_DATA

プロシージャは、入力テーブルのデータに基づいて、1つ以上のテーブルから合成データを生成し、ソースデータと生成データの差(類似度)係数など、生成データに関するメトリックを含むテーブルを返します。

このストアドプロシージャは、 呼び出し元の権限 を使用して出力テーブルを生成します。

このプロシージャの実行については、 要件 をご参照ください。いずれかの要件が満たされない場合、リクエストはデータの生成を開始する前に失敗します。

合成データの使用についての詳細

構文

SNOWFLAKE.DATA_PRIVACY.GENERATE_SYNTHETIC_DATA(<configuration_object>)
Copy

引数

configuration_object

リクエストの詳細を指定する OBJECT。このオブジェクトを指定するには、 OBJECT 定数 を使用します。

OBJECT 値は以下のような構造になっています。

{
  '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

OBJECT 値には、以下のキーと値のペアが含まれています。

datasets

生成するデータを指定する 配列。配列の各要素は、1つの入出力テーブルペアを定義する OBJECT 値です。 最大5つのテーブルペアを指定できます。

1つの入出力テーブルペアを表す子 OBJECT 値には、以下のプロパティがあります。

input_table

合成データを生成する入力テーブルの完全修飾名。テーブルが存在しないか、テーブルにアクセスできない場合、Snowflakeはエラーメッセージを返します。入力テーブルの要件については、 Snowflakeでの合成データの使用 をご参照ください。

識別子にスペースまたは特殊文字が含まれる場合は、文字列全体を二重引用符で囲む必要があります。二重引用符で囲まれた識別子も大文字と小文字が区別されます。

詳細については、 識別子の要件 をご参照ください。

output_table

input_table から生成された合成データを格納する出力テーブルの完全修飾名。生成されたテーブルには、ユーザーがデフォルト値で CREATE TABLE を呼び出した場合と同じ権限とポリシーがあります。テーブルがすでに存在し、 replace_output_tables=TRUE の場合は、既存のテーブルが上書きされます。

また、識別子はアルファベット文字で始まる必要があり、識別子文字列全体が二重引用符で囲まれていない限り、スペースや特殊文字を含めることはできません(例: "My object")。二重引用符で囲まれた識別子も大文字と小文字が区別されます。

詳細については、 識別子の要件 をご参照ください。

columns

オプション)特定の列に対する追加プロパティを指定する OBJECT 値。OBJECT の各フィールドは、1つの列のプロパティを定義します。一部の列、またはすべての列にプロパティ定義をなしにすることができます。フィールドごとに、

  • キーは列名です。値のプロパティは、この列に適用する必要があります。

  • 値は、以下のキーと値のペアのいずれかを含む OBJECT 値。

    • join_key: BOOLEAN。 TRUE はこれが結合キー列であることを示します。これは、 categorical というラベルの付いた列では使用できません。列は文字列、数値、またはブール値でなければなりません。 結合キーについてはこちらをご覧ください。

      デフォルト: FALSE。

    • categorical: BOOLEAN 列がカテゴリ文字列であるかどうかを指定するために使用されます。TRUE に設定すると、出力でデータを非機密データとして使用できるようになります。FALSE に設定すると、出力から値が削除されます。指定がない場合は、データを調べて決定されます。STRING 列にのみ指定できます。TRUE に設定した場合、この列に replace または join_key フィールドを指定することはできません。

      デフォルト: 列データに基づいて推測。

    • replace: STRING の値の出力形式を指定します。カテゴリ文字列列にのみ使用できます。 join_key 列で使用できる値は、 uuidemail のみです。 categorical が TRUE の場合は使用できません。指定する場合は、 consistency_secret に値を指定する必要があります。次の値がサポートされています。

      replace

      説明

      uuid

      UUID。例: 88d99a35-c4be-4022-b06a-41fb4629b46d

      name

      US ロケール形式の姓と名。例: George Washington

      first_name

      US ロケール形式の名。例: George

      last_name

      US ロケール形式の姓。例: Washington

      address

      US ロケール形式の省略された住所。例: 1600 Pennsylvania Ave

      full_address

      US ロケール形式の詳細な住所。例: 1600 Pennsylvania Ave NW, Washington DC 20500

      email

      メールアドレス。例: bdbQ6OPBS5ScOdJx8bVpFw@example.com

      phone

      US ロケール形式の US 形式の10桁の電話番号。例: 212-555-1234

      ssn

      US 形式の社会保障番号。例: 123-45-6789

      デフォルト:

      • join_key 列の場合、 uuid

      • 結合キーでない列の場合、値は編集されます。

similarity_filter

(オプション)合成データの作成時に類似度フィルターを使用するかどうかを指定します。これを TRUE に設定すると、組み込みのプライバシーフィルターを使用して、入力テーブルの行と類似しすぎている行をターゲットテーブルから削除します。FALSE の場合、各出力テーブルは入力テーブルと同じ行数になります。 TRUE の場合、出力テーブルは入力テーブルよりも行数が少なくなる可能性があります。TRUE の場合、文字列以外の列に NULL の値があると、合成データ生成に失敗します。

デフォルト: FALSE

詳細については、 プライバシーの強化 をご参照ください。

replace_output_tables

オプション)合成データの作成時に出力合成データテーブルを上書きするかどうかを指定します。出力テーブルを上書きするには、 TRUE に設定します。

デフォルト: FALSE

consistency_secret

対称キー SECRET に対するセッションスコープの参照 STRING。 replace が指定されている場合は必須、そうでない場合はオプションです。存在する場合、プロシージャは、同じ一貫性シークレットを再利用する複数の実行にわたって、 STRING 結合キーの一貫した値を生成します。存在しない場合、結合キーは同じ実行内のテーブル間では一貫性がありますが、実行間では一貫性がありません。 詳細はこちら。

デフォルト: 一貫性なし

出力

列名

データ型

説明

created_on

TIMESTAMP

合成データが生成された時刻。

table_name

VARCHAR

合成テーブルの名前。

table_schema

VARCHAR

合成テーブルのスキーマ名。

table_database

VARCHAR

合成テーブルのデータベース名。

columns

VARCHAR

合成テーブルの列のペア。

source_table_id

NUMBER

入力テーブルの内部/システム生成識別子。

source_table_name

VARCHAR

入力テーブルの名前。

source_table_schema

VARCHAR

入力テーブルのスキーマ名。

source_table_database

VARCHAR

入力テーブルのデータベース名。

source_columns

VARCHAR

ソース列の名前。

metric_type

ENUM

correlation_coefficient_difference - ソーステーブルの2つの非結合列と、生成されたデータの同じ2つの列の間にある相関係数の絶対値として計算されます。

現在、 correlation_coefficient_difference は唯一サポートされているメトリックです。これは、入力テーブルの各列の組み合わせの相関係数と、生成されたデータの同じ係数の差です。各行は、列の組み合わせの相関係数の差を表します。列名のペアは columnssource_columns 列にあります。

metric_value

NUMBER

メトリックの値。

アクセス制御の要件

合成データを生成するには、以下の各付与を持つロールを使用する必要があります。

  • クエリに使用するウェアハウスに対する USAGE。

  • 合成データの生成元の入力テーブルに対する SELECT。

  • 入力テーブルを含むデータベースとスキーマ、また出力テーブルを含むデータベースに対する USAGE。

  • 出力テーブルを含むスキーマに対する CREATE TABLE。

  • 出力テーブルに対する OWNERSHIP。最も簡単な方法は、出力テーブルが生成されるスキーマに OWNERSHIP を付与することです。(ただし、誰かがこのスキーマに FUTURE GRANT を適用した場合、テーブルの所有権は警告なしに上書きされます。つまり、スキーマ my_schema で作成された新しいテーブルに対して、 GRANT OWNERSHIP ON FUTURE TABLES IN SCHEMA db.my_schema TO ROLE some_role は自動的に OWNERSHIP を some_role に付与します。)

すべてのユーザーは、 SNOWFLAKE.DATA_PRIVACY.GENERATE_SYNTHETIC_DATA ストアドプロシージャにアクセスできます。アクセスは、 PUBLIC ロールに付与された SNOWFLAKE.CORE_VIEWER データベースロールを使用すると利用可能になります。

使用上の注意

  • JSON キー値は小文字にする必要があります。

  • この機能を有効にするには、Snowflakeアカウントで Anaconda利用規約 に同意する必要があります。

  • その他の要件については、 要件 をご参照ください。

この例では、医療情報(血液タイプ、性別、年齢、民族性)を含む入力テーブルから合成データを生成します。この応答は、ソーステーブルと生成されたテーブルの間のデータの近さを示しています。生成された合成データテーブルは表示されません。

結合キーとして指定された2つの列

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

結合キーとして指定された列なし

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

一貫性キーを使用して、複数の実行間で一貫した値を生成します

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

関数呼び出しによる出力

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