GENERATE_SYNTHETIC_DATA¶
该过程将根据输入表中的数据,从一个或多个表生成合成数据,并返回一个表,其中包含有关生成数据的指标,例如源数据和生成的数据之间的差异系数(相似度)。
此存储过程使用 调用者的权限 生成输出表。
请阅读运行此过程的 要求。如果不符合任何要求,请求将在开始生成数据前失败。
语法¶
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
:ref:` 数组 <label-data_type_array>`,指定要生成的数据。数组中的每个元素都是定义单个输入/输出表对的 OBJECT 值。您最多可以指定五个表对。
表示单个输入/输出表对的子 OBJECT 值具有以下属性:
input_table
从中生成合成数据的输入表的完全限定名称。如果该表不存在或无法访问,Snowflake 会返回一条错误消息。有关更多输入表的要求,请参阅 在 Snowflake 中使用合成数据。
如果标识符包含空格或特殊字符,则整个字符串必须放在双引号内。放在双引号内的标识符也区分大小写。
有关更多信息,请参阅 标识符要求。
output_table
用于存储从
input_table
生成的合成数据的输出表的完全限定名称。生成的表将具有与用户使用默认值调用 CREATE TABLE 时相同的权限和策略。如果表已经存在且replace_output_tables=TRUE
,现有表将被覆盖。此外,标识符必须以字母字符开头,且不能包含空格或特殊字符,除非整个标识符字符串放在双引号内(例如,
"My object"
)。放在双引号内的标识符也区分大小写。有关更多信息,请参阅 标识符要求。
columns
(可选)OBJECT 值指定特定列的其他属性。OBJECT 中的每个字段都定义了单列的属性。您不需要为所有列或任何列定义属性。对于每个字段:
键是列名称。值中的属性应适用于此列。
该值是包含以下任意键/值对的 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,则输出表的行数可能少于输入表。
默认: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,表的所有权将被静默覆盖,也就是说,
GRANT OWNERSHIP ON FUTURE TABLES IN SCHEMA db.my_schema TO ROLE some_role
会自动将 OWNERSHIP 授予在架构my_schema
中创建的任何新表的some_role
。)
所有用户都可以访问 SNOWFLAKE.DATA_PRIVACY.GENERATE_SYNTHETIC_DATA 存储过程。访问是通过使用 SNOWFLAKE.CORE_VIEWER 数据库角色实现的,其被授予 PUBLIC 角色。
使用说明¶
JSON 键值必须为小写。
您必须在 Snowflake 账户中 接受 Anaconda 条款和条件 才能启用此功能。
有关其他要求,请参阅 要求。
示例¶
此示例从包含医疗信息(血型、性别、年龄和种族)的输入表中生成合成数据。响应显示了源表和生成表之间数据的接近程度。未显示生成的合成数据表。
指定两列作为联接键
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 |
+---------------------------+-------------------+--------------+----------------+------------------------+-------------------+---------------------+-----------------------+------------------------+------------------------------------+----------------+