DBT核心、雪花和GitHub Actions:数据工程师的宠项目

用DBT核心、雪花和GitHub Actions,打造数据工程师的热门项目

数据/分析工程师的宠物项目:探索现代数据堆栈工具 — dbt Core、Snowflake、Fivetran、GitHub Actions。

Gaining Visuals 提供的图片

这是一个简单快速的宠物项目,适用于希望尝试现代数据堆栈工具的数据/分析工程师,包括dbt Core、Snowflake、Fivetran和GitHub Actions。这个实践经验将允许您开发一个端到端的数据生命周期,从从Google日历中提取数据到在Snowflake分析仪表板中呈现数据。在本文中,我将带您走过整个项目,分享洞见和技巧。查看Github存储库。

技术概述

项目架构如下所示:Google日历 -> Fivetran -> Snowflake -> dbt -> Snowflake仪表板,使用GitHub Actions进行部署编排。

架构图

参考Joe Reis的“数据工程基础”,让我们按照定义的数据生命周期阶段来审视我们的项目:

数据工程生命周期 [1]
  • 数据生成 — Google日历、Fivetran如果您是Google日历用户,您可能在那里积累了大量数据。现在,您可以通过使用Fivetran等“数据移动平台”轻松从您的帐户中检索数据。该工具自动化了ELT(抽取、加载、转换)过程,将您的数据从Google日历的源系统集成到我们的Snowflake数据仓库中。目前,Fivetran提供14天的免费试用 — 链接。注册非常简单。
  • 存储 — SnowflakeSnowflake是一个为分析需求量身定制的基于云的数据仓库,将作为我们的数据存储解决方案。我们要处理的数据量很小,因此我们不会尝试过度使用数据分区、时间旅行、Snowpark和其他Snowflake高级功能。但是,我们将特别注意访问控制(这将用于dbt访问)。您需要设置一个试用帐户,该帐户可提供30天的免费使用和400美元的企业版限额。
  • 摄入 — Fivetran数据摄入可以通过Fivetran和Snowflake的合作伙伴连接功能进行配置。选择您偏好的方法并设置Google日历连接器。在初始同步之后,您可以从Snowflake UI访问数据。您可以访问连接器网页以查看此处的模式图。将为Fivetran同步创建一个新的数据库,并创建相应的仓库来运行SQL工作负载。正如您所知,Snowflake构建了解耦的存储和计算,因此成本也是分开的。作为最佳实践,您应该为不同的工作负载(自由式、同步、商业智能分析)或不同的环境(开发、生产)使用不同的仓库。
转到Partner Connect连接Fivetran
在Fivetran中设置Google日历连接器
同步的数据将出现在Snowflake中
  • 转换 – dbt Core将数据存在Snowflake中(默认每6小时自动同步),我们使用dbt Core进行转换阶段。dbt(数据构建工具)可以实现SQL查询的模块化,使得SQL工作流的重用和版本控制成为可能,就像通常管理软件代码一样。可以通过两种方式访问dbt:dbt Cloud和dbt Core。dbt Cloud是付费的基于云的服务版本,而dbt Core是一个提供免费使用的Python软件包。在您的计算机上安装dbt Core,使用CLI中的“dbt init”命令初始化项目,并设置Snowflake连接。参见我的profiles.yml文件示例。为了能够连接到Snowflake,我们还需要运行一系列的DCL(数据控制语言)SQL命令,可以在此处找到它们。按照最低权限原则,我们将为dbt创建一个单独的用户,并且只允许其访问源数据库(Fivetran同步数据的地方)、开发数据库和生产数据库(用于存储转换后的数据)。
  • 按照最佳实践结构化方法,您需要创建三个代表数据转换的中间层、中间层和Marts层的文件夹。在这里,您可以尝试自己的模型,也可以复制我的示例以用于Google日历数据。在存储库中,您将找到列出Google日历模式中所有表的“sources.yml”文件。创建了3个暂存模型(event.sql、attendee.sql和recurrence.sql),1个转换模型(utc_event.sql)和1个mart模型(event_attendee_summary.sql)。dbt的重要功能是您可以将Jinja和宏嵌入到SQL中,从而增强其影响力和可重用性。
选择不同类型的模型材质化
  • 使用dbt中的通用或单一测试来设置数据期望,以确保数据质量。一些数据质量规则放在“source.yml”文件中,也放在“/tests”文件夹中。在执行“dbt build”命令时,这些数据质量检查将与模型构建一起运行,以防止数据损坏。
您可以使用“dbt test”来运行测试
  • 探索dbt的快照功能,用于变更数据捕获和类型2的慢变化维度。在我们的示例中,我们捕获“recurrence”表中的变更。
将快照存储在一个单独的架构中
  • 使用“dbt docs generate”命令生成dbt文档需要一些时间。您将看到数据血缘图和元数据,这些元数据是从您的项目中自动创建的。您可以通过在.yml文件中为数据实体添加描述来进一步完善它。良好的文档提供更好的数据可发现性和治理性。
运行“dbt docs serve”在浏览器中打开
  • 服务-雪花仪表盘最后,使用Snowflake仪表盘可视化您转换后的数据。在Snowflake UI中创建一个仪表板,并根据您的SQL查询试验瓷砖(绘图)。
仪表板示例
  • 部署-GitHub Actions虽然dbt Cloud提供了一种简单的部署选项,但我们将为dbt Core项目使用GitHub Actions工作流程。您需要创建一个. yml文件,每当更改推送到GitHub dbt仓库时,将启动该文件,并运行指定的操作。在我的示例工作流程中,您可以看到一个两步部署流程:开发环境中的dbt build和(如果成功)生产环境中的dbt build。注意:使用GitHub secrets替换Snowflake帐户和密码等秘密信息。为此,请在repo网页中转到Settings->Secrets and Variables->Actions。每次“master”分支更新时,您可以在repo的Actions选项卡中看到启动的工作流程:
查看Actions结果

在这个项目中,我们只是浅尝了现代数据工程堆栈中的各种技术。这不仅是一项实际成就,也是一个深入探索的绝佳起点。感谢您的阅读,祝您编码愉快!

如果您读到了文章的末尾,也许您觉得它有价值,并且可能希望与我取得联系,我的LinkedIn上有开放的交流机会!

除非另有注明,所有的图片都来自作者。

参考文献:

[1] Reis, J. (2022). Fundamentals of Data Engineering: Plan and Build Robust Data Systems. O’Reilly Media.