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>
        }
        , ...
      }
    }
    , ...
  ]
  'privacy_filter': <boolean>,
  'replace_output_tables': <boolean>,
}
Copy

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

datasets

生成するデータを指定する ARRAY 値。配列の各要素は、1つのソース/生成テーブルペアに関する情報を説明する OBJECT 値です。 最大5つのテーブルペアを指定できます。 datasets オブジェクトを5つよりも多く指定すると、リクエストは失敗します。

OBJECT の各値には、以下のプロパティがあります。

input_table

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

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

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

output_table

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

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

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

columns

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

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

  • 値は、以下のキー/値のペアを含む OBJECT です。

    • join_key: TRUE または FALSE に設定します。 TRUE は結合キー列であることを示します。 結合キーについての詳細

      デフォルト: FALSE。

privacy_filter

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

デフォルト: FALSE

詳細については、 合成データのフィルタリング をご参照ください。

replace_output_tables

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

デフォルト: FALSE

出力

列名

データ型

説明

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

関数呼び出しによる出力

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