GENERATE_SYNTHETIC_DATA¶
プロシージャは、入力テーブルのデータに基づいて、1つ以上のテーブルから合成データを生成し、ソースデータと生成データの差(類似度)係数など、生成データに関するメトリックを含むテーブルを返します。
このストアドプロシージャは、 呼び出し元の権限 を使用して出力テーブルを生成します。
このプロシージャの実行については、 要件 をご参照ください。いずれかの要件が満たされない場合、リクエストはデータの生成を開始する前に失敗します。
構文¶
SNOWFLAKE.DATA_PRIVACY.GENERATE_SYNTHETIC_DATA(<configuration_object>)
引数¶
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> }
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
列で使用できる値は、uuid
とemail
のみです。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 結合キーの一貫した値を生成します。存在しない場合、結合キーは同じ実行内のテーブル間では一貫性がありますが、実行間では一貫性がありません。 詳細はこちら。デフォルト: 一貫性なし
出力¶
列名 |
データ型 |
説明 |
---|---|---|
|
TIMESTAMP |
合成データが生成された時刻。 |
|
VARCHAR |
合成テーブルの名前。 |
|
VARCHAR |
合成テーブルのスキーマ名。 |
|
VARCHAR |
合成テーブルのデータベース名。 |
|
VARCHAR |
合成テーブルの列のペア。 |
|
NUMBER |
入力テーブルの内部/システム生成識別子。 |
|
VARCHAR |
入力テーブルの名前。 |
|
VARCHAR |
入力テーブルのスキーマ名。 |
|
VARCHAR |
入力テーブルのデータベース名。 |
|
VARCHAR |
ソース列の名前。 |
|
ENUM |
現在、 |
|
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}}
}
]
});
結合キーとして指定された列なし
CALL SNOWFLAKE.DATA_PRIVACY.GENERATE_SYNTHETIC_DATA({
'datasets':[
{
'input_table': 'syndata_db.sch.faker_source_t',
'output_table': 'syndata_db.sch.faker_synthetic_t'
}
]
});
一貫性キーを使用して、複数の実行間で一貫した値を生成します
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
});
関数呼び出しによる出力
+---------------------------+-------------------+--------------+----------------+------------------------+-------------------+---------------------+-----------------------+------------------------+------------------------------------+----------------+
| 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 |
+---------------------------+-------------------+--------------+----------------+------------------------+-------------------+---------------------+-----------------------+------------------------+------------------------------------+----------------+