GENERATE_SYNTHETIC_DATA

该过程将根据输入表中的数据,从一个或多个表生成合成数据,并返回一个表,其中包含有关生成数据的指标,例如源数据和生成的数据之间的差异系数(相似度)。

此存储过程使用 调用者的权限 生成输出表。

请阅读运行此过程的 要求。如果不符合任何要求,请求将在开始生成数据前失败。

了解有关合成数据使用情况的更多信息

语法

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 值,指定要生成的数据。数组中的每个元素都是 OBJECT 值,描述单个源/生成表对的信息。您最多可以指定五个表对。`如果提供的 :code:`datasets 对象超过 5 个,请求将失败。

每个 OBJECT 值都具有以下属性:

input_table

从中生成合成数据的输入表的完全限定名称。如果该表不存在或无法访问,Snowflake 会返回一条错误消息。有关输入表的更多要求,请参阅 在 Snowflake 中使用合成数据

如果标识符包含空格或特殊字符,则整个字符串必须放在双引号内。放在双引号内的标识符也区分大小写。

有关更多信息,请参阅 标识符要求

output_table

用于存储从 input_table 生成的合成数据的输出表的完全限定名称。生成的表将具有与用户使用默认值调用 CREATE TABLE 时相同的权限和策略。如果该表已经存在而且 replace_output_tables=TRUE,现有表将被覆盖。

此外,标识符必须以字母字符开头,且不能包含空格或特殊字符,除非整个标识符字符串放在双引号内(例如,"My object")。放在双引号内的标识符也区分大小写。

有关更多信息,请参阅 标识符要求

columns

(可选)OBJECT 指定特定列的其他属性。OBJECT 中的每个字段都定义了单列的属性。您不需要为所有列或任何列定义属性。对于每个字段:

  • 键是列名称。值中的属性应适用于此列。

  • 该值是一个 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 – 计算为源表中两个非联接列与生成数据中相同两列之间的相关系数的绝对值。

目前,correlation_coefficient_difference 是唯一支持的指标。这是输入表中每个列组合的相关系数与生成数据中相同系数之间的差值。每行代表一个列组合之间的相关系数差。列名对可在以下列中找到:columnssource_columns

metric_value

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 角色。

使用说明

示例

此示例从包含医疗信息(血型、性别、年龄和种族)的输入表中生成合成数据。响应显示了源表和生成表之间数据的接近程度。未显示生成的合成数据表。

指定两列作为联接键

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 |
+---------------------------+-------------------+--------------+----------------+------------------------+-------------------+---------------------+-----------------------+------------------------+------------------------------------+----------------+
语言: 中文