📢 转载信息
原文作者:Rachel Kuznetsov
构建声明式数据管道与 Snowflake 动态表:研讨会深度解析
声明式编程与数据工程的结合持续重塑着组织构建和维护数据基础设施的方式。最近,Snowflake 提供的一次实践研讨会,让参与者亲身体验了使用动态表创建声明式数据管道,展示了现代数据平台如何简化复杂的数据提取、转换和加载 (ETL) 工作流。该研讨会吸引了从学生到经验丰富的工程师等各种数据从业者,他们都希望了解声明式方法如何能够简化他们的数据转换工作流。
传统的 data pipeline 开发通常需要大量的过程化代码来定义数据如何在各个阶段之间进行转换和移动。声明式方法颠覆了这一模式,它允许数据工程师指定最终期望的结果,而不是规定实现目标的每一步。Snowflake 中的动态表体现了这一理念,它们自动管理刷新逻辑、依赖跟踪和增量更新,这些都是开发者通常需要手动编写的代码。这一转变减轻了开发者的认知负担,并最大限度地减少了易于导致错误的潜在区域,而这些错误在传统的 ETL 实现中很常见。
映射研讨会架构和学习路径
该研讨会引导参与者经历了一个循序渐进的过程,从基本设置到高级管道监控,共分为六个全面的模块。每个模块都建立在前一个模块的基础上,创造了一个与真实世界管道开发进展相呼应的连贯学习体验。
建立数据基础
参与者首先设置了一个 Snowflake 试用账户,并执行了一个创建基础架构的设置脚本。这包括两个数据仓库——一个用于原始数据,另一个用于分析——以及代表客户、产品和订单的合成数据集。使用 Python 用户定义表函数 (UDTF) 来使用 Faker 库生成逼真的假数据,展示了 Snowflake 的可扩展性,并消除了在学习过程中对外部数据源的需求。这种方法允许参与者专注于管道机制,而不是花费时间在数据获取和准备上。
生成的数据集包括 1,000 条带有支出限额的客户记录、100 条带有库存量的产品记录以及跨越过去 10 天的 10,000 条订单交易记录。这些真实的数据量允许参与者观察实际的性能特征和刷新行为。研讨会特意选择了足够大的数据量以展示实际处理能力,但又足够小以便在动手练习中快速完成刷新。
创建第一个动态表
第二个模块通过动手创建暂存表,介绍了动态表的核心概念。参与者使用封装在动态表定义中的结构化查询语言 (SQL) SELECT 语句,通过重命名列和转换数据类型来转换原始客户数据。target_lag=downstream 参数演示了自动刷新协调,即表根据下游依赖表的需求进行刷新,而不是基于固定计划。这消除了对需要外部编排工具的复杂调度逻辑的需求。
对于订单表,参与者学习使用 Snowflake 的变体数据类型和路径表示法解析嵌套的 JSON 结构。这个实际示例展示了动态表如何在同一声明式框架中声明式地处理半结构化数据转换,将 JSON 购买对象中的产品 ID、数量、价格和日期提取到表格列中。在处理现代应用程序编程接口 (API) 驱动的数据源时,能够在此声明式框架内展平半结构化数据,该框架也处理传统的关系型转换,这一点对参与者尤其有价值。
链接表以构建数据管道
第三个模块通过演示表链接来提高复杂性。参与者创建了一个事实表,该表连接了之前创建的两个暂存动态表。这个客户订单的事实表通过左连接操作将客户信息与其购买历史结合起来。由此产生的模式遵循维度建模原则——创建适合分析查询和商业智能 (BI) 工具的结构。
声明式特性在这里变得尤为明显。与其编写复杂的编排代码来确保暂存表在事实表之前刷新,不如动态表框架自动管理这些依赖关系。当源数据发生更改时,Snowflake 的优化器会确定最佳刷新顺序并执行,无需手动干预。参与者可以立即看到其价值主张:以前需要数十行编排代码的多表管道,现在可以通过 SQL 表定义纯粹地实现。
可视化数据血缘
研讨会的亮点之一是内置的血缘可视化功能。通过导航到 Catalog 界面并选择事实表的 Graph 视图,参与者可以看到其管道的图形化表示,就像一个定向无环图 (DAG)。
此视图显示了从原始表到暂存动态表再到最终事实表的流程,从而立即了解数据依赖关系和转换层。血缘文档的自动生成解决了传统管道中的一个常见痛点,即血缘通常需要单独的工具或手动文档,而这些文档很快就会过时。
管理高级管道
监控和调整性能
第四个模块解决了数据管道的运营方面。参与者学习查询 information_schema.dynamic_table_refresh_history() 函数来检查刷新执行时间、数据更改量和潜在错误。这些元数据为生产管道管理提供了所需的可见性。能够使用标准的 SQL 查询刷新历史记录意味着参与者可以将监控集成到现有的仪表板和警报系统中,而无需学习新工具。
该研讨会通过将 target_lag 参数从默认的下游模式更改为特定的时间间隔(5 分钟),演示了新鲜度调整。这种灵活性允许数据工程师平衡数据新鲜度要求与计算成本,根据业务需求调整刷新频率。参与者尝试了不同的滞后设置,以观察系统的响应方式,从而获得了关于实时数据可用性与资源消耗之间权衡的直观认识。
实现数据质量检查
数据质量集成代表了一个关键的生产就绪模式。参与者修改了事实表定义,使用 WHERE 子句过滤掉空产品 ID。这种声明式质量强制执行确保只有有效的订单在每次刷新周期中都应用过滤逻辑。研讨会强调,直接嵌入在表定义中的质量规则成为管道合同的一部分,使数据验证透明且易于维护。
扩展至人工智能能力
第五个模块介绍了 Snowflake Intelligence 和 Cortex 功能,展示了人工智能 (AI) 功能如何与数据工程工作流集成。参与者探索了 Cortex Playground,将其连接到他们的订单表,并启用了对购买数据的自然语言查询。这展示了数据工程和 AI 的融合,其中结构良好的管道可以通过对话式界面立即进行查询。工程数据资产与 AI 工具之间的无缝集成,说明了现代平台如何消除数据准备和分析消费之间的障碍。
验证和认证技能
该研讨会以自动评分系统结束,该系统验证了参与者的实现。这种自动验证确保学习者成功完成了所有管道组件,并满足了获得 Snowflake 徽章的要求,为他们的新技能提供了有形的认可。自动评分器检查了正确的表结构、正确的转换和适当的配置设置,让参与者对他们的实现符合专业标准充满信心。
总结对数据工程从业者的关键要点
从研讨会的结构中出现了几个重要的模式:
- 声明式简洁性优于过程式复杂性。通过描述期望的最终状态而不是转换步骤,动态表减少了代码量并消除了常见的编排错误。这种方法使管道更易读、更易于维护,特别是对于需要多个工程师理解和修改数据流的团队而言。
- 自动依赖管理。该框架在没有显式开发者配置的情况下处理刷新顺序、增量更新和故障恢复。这种自动化扩展到复杂的场景,如菱形依赖图,其中源表和目标表之间存在多条路径。
- 集成血缘和监控。内置的可视化和元数据访问提供了操作可见性,而无需单独的工具。组织可以避免部署和维护独立的数据目录或血缘跟踪系统的开销。
- 灵活的新鲜度控制。在表级别指定新鲜度要求的能力,允许跨不同管道组件优化成本与延迟的权衡。关键表可以频繁刷新,而不太重要的聚合可以按较长间隔刷新,所有这些都自动协调。
- 原生质量集成。嵌入在表定义中的数据质量规则确保在所有管道刷新中强制执行一致性。这种方法可以防止质量检查在开发中存在但在生产中因编排复杂性而被绕过的常见问题。
评估更广泛的影响
这种研讨会模式代表了数据平台功能的一个更广泛的转变。随着云数据仓库集成越来越多的声明式功能,对数据工程师的技能要求正在不断发展。从业者可以更多地关注数据建模、质量设计和业务逻辑实现,而不是主要关注编排框架和刷新调度。对基础设施专业知识需求的减少,降低了分析专业人士转向数据工程角色的门槛。
使用 Python UDTF 进行合成数据生成的方法也突显了用于培训和开发环境的新兴模式。通过在平台本身内嵌入逼真的数据生成,组织可以创建隔离的学习环境,而无需暴露生产数据或需要复杂的数据集管理。对于受数据隐私法规限制在非生产环境中使用真实客户数据的组织来说,这种模式尤其有价值。
对于评估现代数据工程方法的组织来说,动态表模式提供了几个优势:新管道的开发时间缩短,现有工作流的维护负担减轻,以及内置的依赖管理和增量处理最佳实践。声明式模型也使 SQL 熟练的分析师更容易访问管道,而这些分析师可能缺乏丰富的编程背景。成本效益也得到提高,因为系统只处理更改过的数据而不是执行完全刷新,并且计算资源会根据工作负载自动扩展。
该研讨会的流程从简单的转换到多表管道,包括监控和质量控制,为在生产环境中采用这些模式提供了一个实际模板。从暂存转换开始,添加增量连接和聚合,然后添加可观察性和质量检查,这代表了探索声明式管道开发的团队的一个合理采用路径。组织可以在迁移关键工作流之前,使用非关键管道试点该方法,逐步建立信心和专业知识。
随着数据量的持续增长和管道复杂性的增加,自动化数据工程机械方面的声明式框架可能会成为标准做法,从而使从业者能够专注于数据架构和业务价值交付的战略方面。该研讨会表明,该技术已经超越了早期采用者阶段,并已准备好在各行业和用例中获得主流企业采用。
Rachel Kuznetsov 拥有工商分析硕士学位,热衷于解决复杂的数据难题,并寻找新的挑战。她致力于使复杂的科学概念更易于理解,并正在探索 AI 对我们生活产生影响的各种方式。在她不断学习和成长的过程中,她记录了自己的旅程,以便其他人也能与她一起学习。你可以在 LinkedIn 上找到她。
🚀 想要体验更好更全面的AI调用?
欢迎使用青云聚合API,约为官网价格的十分之一,支持300+全球最新模型,以及全球各种生图生视频模型,无需翻墙高速稳定,文档丰富,小白也可以简单操作。
评论区