解锁Snowflake合成数据生成器的超强功能 —— 第一部分

2024/12/2 21:03:03

本文主要是介绍解锁Snowflake合成数据生成器的超强功能 —— 第一部分,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

最近,Snowflake 推出了一项变革性的功能:合成数据生成。我在多个组织工作过,我可以肯定地说,这是许多团队都在期待的解决方案。

为什么合成数据很重要?

作为一名数据工程师,无论是单元测试性能测试还是其他验证活动,测试数据集的有效性至关重要。然而,实际上开发环境往往不尽如人意。通常,测试数据要么是模拟数据,要么是不完整,这使得准确模拟生产环境的场景变得困难。

即使Snowflake拥有强大的克隆功能,可以几乎免费复制数据,仍然存在一些挑战。例如,敏感的生产数据有时由于数据分类政策的原因无法克隆到开发环境。安全性和数据治理的限制常常使得团队难以在非生产环境中获取使用真实数据的必要批准。

进入合成数据生成环节:
这时,Snowflake的合成数据生成器就发挥作用了。它允许你在开发环境中创建像生产环境一样的真实测试数据,避免使用敏感或受限数据所带来的任何风险。

这怎么帮到我们呢?

有了合成数据,你可以:

  1. 模拟生产场景以进行健壮的测试。
  2. 避免对安全和治理审批的依赖。
  3. 确保遵守数据隐私和分类政策。
  4. 直接在Snowflake中生成准确的测试数据,节省时间和精力。

何时使用? 此功能非常适合于生产数据不可获取或使用但又需要高质量的测试数据的场景。例如,你可能需要使用真实的测试数据来测试查询的性能或验证新组件的输出,同时又不会泄露敏感信息。

Snowflake合成数据生成器的好处

传统上,创建合成数据需要使用具备大量编程知识的编程语言和工具,还需要一个兼容的平台,并且需要花费大量时间。尽管付出了这么多努力,生成的合成数据经常未能很好地模仿真实的数据,给开发人员带来了不少难题。

有了Snowflake的合成数据生成器,这些限制都不再是问题了。

什么是Snowflake中的合成数据(Synthetic Data)?

Snowflake中的合成数据是真正的数据替代品。该功能以真实数据为输入,生成合成数据作为输出。生成的合成数据保留了原始数据的统计特性和规律,同时确保不暴露任何敏感或机密信息。

使用 Snowflake 是否复杂?

完全不是这样!Snowflake 设计了这一功能,使其简单明了。与传统方法不同,你不需要具备高级编程技能或使用外部工具来生成合成数据。整个过程在 Snowflake 平台内无缝集成,让数据工程师和数据科学家都能轻松访问。

通过简化真实数据的创建,Snowflake 让开发人员能够专注于构建并测试稳定的数据解决方案,而不受通常限制。

Snowflake的合成数据生成器工具是由一个内置的过程驱动的,用户只需调用内置的过程,并传入输入表和一些参数即可生成合成数据。这省去了复杂的配置和外部工具的麻烦,使整个过程变得简单高效。

语法:

以下是一些基本语法说明。

SNOWFLAKE.DATA_PRIVACY.GENERATE_SYNTHETIC_DATA(  
      {  
        'datasets': [  
            {  
              'input_table': '<输入表名>', // 输入表名:指定输入数据表的名称
              'output_table' : '<输出表名>', // 输出表名:指定输出数据表的名称
              [ 'columns': { '<列名>': {join_key:[TRUE | FALSE]} [, '<列名>': {join_key:[TRUE | FALSE]} , ... ]] // 列名:指定需要处理的列及其连接键设置
            }  
            [ ,  
              'input_table': '<输入表名>',  
              'output_table' : '<输出表名>',  
              [ 'columns': { '<列名>': {join_key:[TRUE | FALSE]} [, '<列名>': {join_key:[TRUE | FALSE]} , ... ]]  
              , ... ]  
          ]  
          [ , 'privacy_filter': <布尔值>] // 隐私过滤器:指定是否需要对生成的数据进行隐私过滤(TRUE | FALSE)
          [ , 'replace_output_tables': <布尔值>] // 替换输出表:指定是否替换现有的输出表(TRUE | FALSE)
      }  
    )

在使用Snowflake的合成数据生成器时,该过程,(**SNOWFLAKE.DATA_PRIVAC.GENERATE_SYNTHETIC_DATA**)需要以下关键输入字段:

  1. 输入表:指定包含要合成的真实数据的源表。
  2. 输出表:指定生成的合成数据将存储的输出表名称。
  3. 连接键:这些列在合成数据中被唯一编码标识以保持参照完整性以确保表之间的关系在合成数据中得以保持,使其可用于连接和其他相关操作。
  4. 隐私过滤器:一个配置选项,增加了额外的隐私保护层。如果输出表中的行与原始输入数据集过于相似,则会从输出表中移除这些行,有助于缓解潜在的隐私泄露风险。
  5. 替换输出表:如果输出表已经存在,则

**'replace_output_tables': True** 设置为 True,以用新的合成数据替换现有的表。如果不设置此选项,当表已存在时将引发错误。

这种配置的灵活性让使用者能够创建符合其特定的测试和开发需求的合成数据集,同时保证数据的安全性和一致性。

示例一:生成合成数据的简单情况。

让我们通过一个简单的例子来展示如何使用Snowflake的存储过程生成合成的数据。这个例子会带你一步步完成脚本,并解释脚本的各个部分。

表1:客户信息
    -- 客户信息表

    CREATE OR REPLACE DATABASE SYNTHETIC_DATA_DB;

    CREATE OR REPLACE SCHEMA SYNTHETIC_DATA_SCH;

    CREATE OR REPLACE TABLE CUSTOMER_INFO (
        CUSTOMER_ID INTEGER,
        名字 STRING,
        姓 STRING,
        年龄 INTEGER,
        是否活跃 BOOLEAN,
        加入日期 DATE
    );

    INSERT INTO CUSTOMER_INFO (CUSTOMER_ID, 名字, 姓, 年龄, 是否活跃, 加入日期) VALUES
    (1, 'JOHN', 'DOE', 32, TRUE, '2022-01-10'),
    (2, 'JANE', 'SMITH', 28, FALSE, '2023-04-20'),
    (3, 'EMILY', 'JOHNSON', 45, TRUE, '2021-05-15'),
    (4, 'MICHAEL', 'WILLIAMS', 29, FALSE, '2023-07-18'),
    (5, 'SARAH', 'BROWN', 37, TRUE, '2022-09-11'),
    (6, 'DAVID', 'JONES', 41, TRUE, '2022-03-25'),
    (7, 'LAURA', 'GARCIA', 30, FALSE, '2023-11-14'),
    (8, 'ROBERT', 'MARTINEZ', 34, TRUE, '2022-10-06'),
    (9, 'LINDA', 'RODRIGUEZ', 47, TRUE, '2023-12-22'),
    (10, 'JAMES', 'WILSON', 52, FALSE, '2021-08-19'),
    (11, 'LISA', 'ANDERSON', 27, TRUE, '2023-02-12'),
    (12, 'JOSEPH', 'TAYLOR', 43, TRUE, '2021-06-21'),
    (13, 'PATRICIA', 'THOMAS', 36, FALSE, '2024-04-28'),
    (14, 'CHRISTOPHER', 'HERNANDEZ', 39, TRUE, '2023-03-02'),
    (15, 'BARBARA', 'MOORE', 33, TRUE, '2024-01-15'),
    (16, 'KEVIN', 'JACKSON', 46, FALSE, '2022-07-09'),
    (17, 'SUSAN', 'WHITE', 42, TRUE, '2023-05-24'),
    (18, 'DANIEL', 'HARRIS', 35, FALSE, '2022-08-30'),
    (19, 'ELIZABETH', 'MARTIN', 40, TRUE, '2023-10-11'),
    (20, 'MATTHEW', 'BROWN', 36, TRUE, '2024-07-30');

雪花合成数据生成过程:

CALL SNOWFLAKE.DATA_PRIVACY.GENERATE_SYNTHETIC_DATA({  
    'datasets':[  
        {  
          'input_table': 'SYNTHETIC_DATA_DB.SYNTHETIC_DATA_SCH.CUSTOMER_INFO',  
          'output_table': 'SYNTHETIC_DATA_DB.SYNTHETIC_DATA_SCH.CUSTOMER_INFO_SYNTHETIC_COMBINED_TABLES',  
          'columns': {'CUSTOMER_ID': {'join_key': True}}  
        }  
      ],  
      'replace_output_tables':True  
  });

比如这里:

  • 输入表CUSTOMER_INFO
  • 输出表CUSTOMER_INFO_合成组合表

在这里,我使用 CUSTOMER_ID 作为关联列来维护参照完整性和便于合成数据与其他相关表之间的连接操作。

图2 — 执行 Generate_Synthetic_Data 过程后生成的输出

完成上述步骤后,输出将包括以下列:

  • 创建日期
  • 表名
  • 表模式
  • 数据库名
  • 字段
  • 源表名称
  • 源表模式
  • 源数据库名
  • 源字段
  • 指标类型
  • 指标数值

输出中的关键细节是 **Metric_Value**,它表示源表中两个未参与关联的列与生成数据中对应的两列之间皮尔逊相关系数的绝对值。

你可以通过查看输出中的 **Columns****Source_Columns** 来分析这些信息,以确保合成数据紧密模仿源数据中存在的统计关联。**correlation_coefficient_difference** 是 Snowflake 的合成数据生成过程中的一个参数值,用于评估并确保输入数据集和生成的合成数据集之间的列统计相关性保持一致。

相关系数差异是什么?
  • 目的:它衡量输入数据和合成数据中列对之间相关系数的差异
  • 为什么重要:保持相似的相关性有助于保留合成数据与原始数据之间列之间的关系,这使得合成数据更接近原始数据,更具分析价值。

显示: CUSTOMER_INFO_SYNTHETIC_COMBINED_TABLES

图3:输出表格

客户ID — 参照完整性说明

需要注意的关键点:

  • 输出表的行数:输出表中的行数与输入表直接成正比。例如,如果输入表中有20条记录,输出表也会包含20条记录。但是,带有空值的行在合成的数据输出中会被排除。这是当前的表现。
  • 被遮蔽的列:某些列在合成的数据中被标记为遮蔽。虽然这种情况在实际中可能不太方便数据工程师,但目前还不支持生成这些列的合成数据。
下一步是什么?

接下来,我们来探讨Snowflake合成数据生成器的更高级的功能。

如果你遇到过其他与合成数据生成相关的有用或具有挑战性的场景,请随时在评论区分享。如果你想讨论Snowflake或有任何问题的话,欢迎通过我的 [**LinkedIn**](https://www.linkedin.com/in/alexander-murugesan-17472295/) 与我联系。

参考:-

雪flake官网:《https://www.snowflake.com/》

关于我:

我是一名云数据架构师,在新西兰安永曾担任高级顾问。在我的职业生涯中,我参与了许多涉及传统数据仓库、大数据应用、云平台搭建及迁移的项目。如果您需要关于认证、数据解决方案或实施的帮助,请随时联系我通过 LinkedIn 与我联系。



这篇关于解锁Snowflake合成数据生成器的超强功能 —— 第一部分的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程