程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

Snowflake数据工程实战 十一、设计数据管道(2)

balukai 2025-02-11 10:55:38 文章精选 6 ℃

11.1.3 选择数据转换层

当数据通过管道流动时,它会产生中间输出,这些输出可以物理存储在数据库表、物化视图或动态表等对象中。数据也可以通过将中间输出保存为数据库视图来虚拟转换。将管道步骤的输出按层组织是一种最佳实践。

最常见的数据转换层包括提取层、暂存层、数据仓库层和展示层。每一层都遵循前一层,从从源系统摄入数据开始,最终产生适合下游消费者的干净转换数据。这种分层的数据仓库转换方法确保了对管道中数据流的更好可见性和控制。

没有任何层是强制性的。例如,如果你在展示层构建数据集市而不使用数据仓库,你可以跳过数据仓库层。如果你使用数据集成工具从源系统提取数据并执行转换(如ETL模式),你可以跳过提取层。你也可以根据需要添加额外的层。

以下各节将更详细地描述最常见的数据转换层。

提取层

提取层通常是数据管道的起点。它可以托管外部或内部的Snowflake阶段,源数据文件在此准备摄入。如果使用,它可以托管外部表。它还可以存储来自各种源的原始数据,格式可以是结构化或半结构化的。

暂存层

暂存层通常用于在数据存储到数据仓库之前组织和整合数据。在这个层中只实施轻量级的数据转换,如过滤、添加技术列(如摄入时间戳)、计算替代键(如果使用)、识别变更数据等。这一层的转换中通常不包含业务逻辑。

数据仓库层

数据仓库层是所有业务数据的公共区域,这些数据从各种源收集并建模在一个一致的数据模型中,该模型可以有多种形式,例如:

使用选定的数据建模方法设计的自定义数据模型——例如,规范化(Inmon方法)、集成(锚定建模或数据仓库)等。

适合组织(银行、保险、零售、制造等)的标准行业数据模型,并根据需要进行定制

理想情况下,存储在数据仓库数据模型中的数据可以用于多个用例并服务于多个业务部门。

展示层

展示层是下游报告和分析解决方案以自助方式访问其数据的地方。此层中的表结构旨在优化查询性能,通常使用事实表和维度表(Kimball方法)在一个维度数据模型中。

图11.3显示了最常见的数据转换层的图形表示。

11.1.4 组织数据仓库层次结构

前一节描述的层次结构代表了数据管道中的逻辑层次。每个层次包含可以作为对象存储的数据输出,例如表、视图、物化视图、动态表或其他在Snowflake中的对象类型。

代表数据管道层次结构输出的对象可以以多种方式在容器中按层次结构组织——例如:

? 数据管道可以将所有对象存储在一个数据库中,层次结构表现为模式。

? 数据管道的每个层次是一个单独的数据库。

? 数据管道的一些层次——例如,提取层——是单独的数据库,而其余层次是另一个数据库中的模式。

? 表现层是一个单独的数据库,每个访问数据的业务单元都有一个模式,而其余层次是另一个数据库中的模式。

由于数据仓库层是逻辑单元,它们可以根据您的独特需求实现为物理对象。在设计层的物理结构时,安全性是一个必须考虑的因素,因为我们通常希望限制消费者仅访问他们被授权的对象。

在决定数据转换层的数据库和模式的物理组织时,以下是一些指导原则:

- 当各种工具或开发人员团队访问多个数据源时,您可以将提取层组织为每个源系统的单独数据库。这确保了每个源系统中对象的分离,特别是当源系统包含许多已经按模式组织的表时(例如一些流行的企业资源规划系统)。在这种情况下,您可以将数据提取到一个根据源系统模式组织的数据库中。

- 阶段层可以实现为提取层数据库中的额外模式,或者作为数据仓库层数据库中的一个模式。仓库层通常会合并来自所有源的数据,而阶段层是数据从提取层汇集在一起的中间步骤。

- 表现层可以实现为包含数据仓库层的数据库中的一个模式。然而,如果许多业务单元有截然不同的报告和分析需求,您可以将报告层组织在具有为每个业务单元设置的单独模式的单独数据库中。如果需要更多的分离——例如,用于分析沙箱——每个业务单元可以拥有为其报告需求服务的自己的数据库。

在本章的示例中,我们将使用一个名为BAKERY_DB的单一数据库来表示所有数据转换层,每个层都表示为一个模式。提取层模式名为EXT,将托管阶段数据文件。阶段层模式STG将存储扁平化的半结构化数据和从面包店的运营IT系统中提取的数据。数据仓库层模式DWH将存储来自阶段层的合并数据。表现层模式MGMT将存储面包店经理通过报告工具或Snowflake仪表板使用的聚合数据。

本章示例中使用的数据库和模式如图11.4所示。

为了开始实施数据管道,我们将按照第10章描述的角色基础访问控制(RBAC)方法创建带有管理访问权限的模式和相应的访问角色。

注意:本章的练习假设您已经完成了第10章的RBAC练习。如果您还没有完成,请在继续本章练习之前,先在Git仓库的Chapter_10文件夹中执行
Chapter_10_Part1_role_based_access_control.sql脚本。

11.1.5 创建带有访问控制的模式

我们将在BAKERY_DB数据库中创建模式。第一步是使用SYSADMIN角色创建新的EXT、STG、DWH和MGMT模式,并带有管理访问权限(如果需要更多信息,请参考第10章):

然后我们将使用SECURITYADMIN角色(因为此角色具有MANAGE GRANTS权限)来授予BAKERY_FULL访问角色在EXT、STG、DWH和MGMT模式上的全部权限:

我们将授予BAKERY_READ角色对MGMT模式中当前和未来表和视图的只读权限:

我们不需要给DATA_ENGINEER和DATA_ANALYST功能角色授予任何额外的权限,因为这些角色在第10章创建时已经分别被授予了BAKERY_FULL和BAKERY_READ访问角色,并将自动继承新的访问权限。

最近发表
标签列表