数据开发/数仓工程师上手指南(五)CDM-DIM层搭建规范及流程

news2024/11/14 20:36:38

前言

在上篇文章的进度和基础之上,我们已经算是构建好了ODS数据引入层,ODS这一层构建的比较简单,没有很多限制规范,但是CDM数据公共层可以算得上是数据仓库的主题,之前我们也将DWD数据明细层、DIM数据维度层和DWS公共汇总层都归纳为这一层层级结构。所有在构建这一层中需要注意的规范和事项比较多,当然对以后数据仓库的维护和优化也会起到很大的帮助,需要细心耐心的搭建规划。那么我们将在本章完成DWD/DIM/DWS这三层的具体搭建和设计规范。

CDM概述及构成

CDM层,即Common Data Model层,是数据仓库中的核心层次,它定义了数据仓库中使用的共同数据结构和业务规则。CDM层提供了一个统一的视图,将不同的数据源和数据格式映射到一个通用的模型中,使得数据分析人员可以更容易地进行数据整合和分析。

  • 公共维度层(DIM):基于维度建模理念思想,建立整个企业的一致性维度。降低数据计算口径和算法不统一风险。公共维度层的表通常也被称为逻辑维度表,维度和维度逻辑表通常一一对应。

  • 公共汇总粒度事实层(DWS):以分析的主题对象作为建模驱动,基于上层的应用和产品的指标需求,构建公共粒度的汇总指标事实表,以宽表化手段物理化模型。构建命名规范、口径一致的统计指标,为上层提供公共指标,建立汇总宽表、明细事实表。公共汇总粒度事实层的表通常也被称为汇总逻辑表,用于存放派生指标数据。

  • 明细粒度事实层(DWD):以业务过程作为建模驱动,基于每个具体的业务过程特点,构建最细粒度的明细层事实表。可以结合企业的数据使用特点,将明细事实表的某些重要维度属性字段做适当冗余,即宽表化处理。明细粒度事实层的表通常也被称为逻辑事实表。

CDM层的目的是为了建立一个一致性的维度和可复用的面向分析和统计的明细事实表及汇总公共粒度的指标,从而降低数据计算口径和算法不统一的风险,提高数据的复用性和查询效率。这一方面可以参考一名博主CDM层在整体架构中,实际构建的表作业:

DIM层构建

DIM层是基于维度建模理念,建立整个企业的一致性维度。维度是逻辑概念,是衡量和观察业务的角度。维表是根据维度及其属性将数据平台上构建的物理化的表,采用宽表设计的原则。因此,公共维度汇总层(DIM)首先需要定义维度。

 

定义维度

在划分数据域、构建总线矩阵时,需要结合对业务过程的分析定义维度。在招标业务过程中,供应商和投标是两个关键维度,它们对分析招标活动的各个方面至关重要。构建这两个维度的DIM层,需要系统化的步骤和清晰的业务逻辑。

1.确定业务需求和数据来源

供应商维度(Dim_Supplier)

  • 业务需求:需要记录和分析每个供应商的基本信息、资质、历史表现等。

  • 数据来源:供应商管理系统、资质认证系统、历史交易记录等。

投标维度(Dim_Bid)

  • 业务需求:需要记录和分析每个投标的具体信息、投标时间、金额、供应商等。

  • 数据来源:投标管理系统、项目管理系统、评标系统等。

2. 设计维度表结构

完成维度定义后,可以对维度进行补充,进而生成维表。DIM 层表是用于维度关联的,要通过主键去获取相关维度信息,这种场景下 K-V 类型数据库的效率较高。常见的 K-V 类型数据库有 Redis、HBase,而 Redis 的数据常驻内存,会给内存造成较大压力,因而选用 HBase 存储维度数据。

  • 建议维表单表信息不超过1000万条。

  • 维表与其他表进行Join时,建议使用Map Join。

  • 避免过于频繁的更新维表的数据。

在设计维表时,需要考虑有以下几点:

1.维表中数据的稳定性

例如,A公司电商会员通常不会出现消亡,但会员数据可能在任何时候更新,此时要考虑创建单个分区存储全量数据。如果存在不会更新的记录,您可能需要分别创建历史表与日常表。日常表用于存放当前有效的记录,保持表的数据量不会膨胀;历史表根据消亡时间插入对应分区,使用单个分区存放分区对应时间的消亡记录。

2.维表是否需要垂直拆分

如果一个维表存在大量属性不被使用,或由于承载过多属性字段导致查询变慢,则需要考虑对字段进行拆分,创建多个维表。

3.维表是否需要水平拆分

如果记录之间有明显的界限,可以考虑拆成多个表或设计成多级分区。

设计维表的主要步骤如下:

  1. 初步定义维度。

    保证维度的一致性。

  2. 确定主维表(中心事实表,本教程中采用星型模型)。

    此处的主维表通常是数据引入层(ODS)表,直接与业务系统同步。例如,s_auction是与前台商品中心系统同步的商品表,此表即是主维表。

  3. 确定相关维表。

    数据仓库是业务源系统的数据整合,不同业务系统或者同一业务系统中的表之间存在关联性。根据对业务的梳理,确定哪些表和主维表存在关联关系,并选择其中的某些表用于生成维度属性。以商品维度为例,根据对业务逻辑的梳理,可以得到商品与类目、卖家和店铺等维度存在关联关系。

  4. 确定维度属性。

    主要包括两个阶段。第一个阶段是从主维表中选择维度属性或生成新的维度属性;第二个阶段是从相关维表中选择维度属性或生成新的维度属性。以商品维度为例,从主维表(s_auction)、类目、卖家和店铺等相关维表中选择维度属性或生成新的维度属性。维度属性的设计需要注意:

    • 尽可能生成丰富的维度属性。

    • 尽可能多地给出富有意义的文字性描述。

    • 区分数值型属性和事实。

    • 尽量沉淀出通用的维度属性。

设计招标业务维表,可以参考:

供应商维度表(Dim_Supplier)

  • 供应商ID(Supplier_ID)

  • 供应商名称(Supplier_Name)

  • 行业(Industry)

  • 资质(Qualification)

  • 评级(Rating)

  • 国家(Country)

  • 城市(City)

  • 注册日期(Registration_Date)

投标维度表(Dim_Bid)

  • 投标ID(Bid_ID)

  • 供应商ID(Supplier_ID)

  • 项目ID(Project_ID)

  • 投标金额(Bid_Amount)

  • 投标日期(Bid_Date)

  • 投标状态(Bid_Status)

3.DIM表命名规范

公共维度汇总层(DIM)维表命名规范:

模型层次表命名规范实例表明实例表说明
odsdim_通用维度相关描述_加工频率+抽取方式dim_brand_dfdwm为模型层次、brand为通用维度表描述、d代表加工频率、f代表全量抽取方式

4.创建SQL DLL建表语句

供应商维度表(Dim_Supplier):

CREATE TABLE Dim_Supplier_da (
    Supplier_ID INT PRIMARY KEY,
    Supplier_Name VARCHAR(100) NOT NULL,
    Industry VARCHAR(50),
    Qualification VARCHAR(50),
    Rating VARCHAR(10),
    Country VARCHAR(50),
    City VARCHAR(50),
    Registration_Date DATE
);

投标维度表(Dim_Bid):

CREATE TABLE Dim_Bid_da(
	Bid_ID INT PRIMARY KEY,
	Supplier_ID INT NOT NULL,
	Project_ID INT NOT NULL,
	Bid_Amount DECIMAL(10,2) NOT NULL,
	Bid_Date DATE NOT NULL,
	Bid_Status VARCHAR(20),
	FOREIGN KEY (Supplier_ID) REFERENCES Dim_Supplier(Supplier_ID),
	FOREIGN KEY (Project_ID) REFERENCES Dim_Project(Project_ID)
);

在具体实现上,DIM层通常通过使用‌Flink等流处理框架从源系统中消费数据,并进行必要的转换和处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1966486.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++标准库】模拟实现string类(深浅拷贝问题)

模拟实现string类 一.命名空间与类成员变量二.构造函数1.无参(默认)构造2.有参构造3.兼容无参和有参构造4.拷贝构造1.传统写法2.现代写法 三.析构函数四.string类对象的容量操作1.size2.capacity3.clear4.empty5.reserve6.resize 五.string类对象的访问及…

Redis学习[4] ——Redis集群

五、Redis 集群 5.1 什么是Redis集群? 如何提供一个高可用的Redis服务? —— 构建Redis集群 单服务器Redis由于数据都是存储在一台服务器,如果这台服务器出现宕机或者故障,可能会导致服务不可用甚至数据丢失。 要避免这种单点…

C#使用NPOI进行Excel和Word文件处理(一)

文章目录 前言文件大小性能NPOI 的优势示例代码性能优化建议总结Github 地址链接导出效果 前言 NPOI 是一个非常流行的用于在 .NET 环境中操作 Office 文件(包括 Excel 文件)的开源库。它的功能非常强大,但性能和文件大小问题可能因具体的使…

“八股文”面试题:是招聘程序员的金科玉律?

引言 随着互联网的发展,现代企业对程序员的需求日益增加。在招聘过程中,许多公司采用了“八股文”式的面试题目来筛选候选人。这些题目往往涵盖了算法、数据结构、系统设计等方面的基础知识。然而,对于“八股文”在实际工作中的作用&#xf…

安泰高压放大器在材料极化中的应用有哪些

高压放大器在材料极化中具有重要的应用,这方面是通过在材料中施加高电压来实现的。下面我们将探讨高压放大器在材料极化领域的具体应用,以及其在材料科学和工程中的重要性。 首先,让我们了解一下材料极化的基本概念。材料的极化是指在外加电场…

气象水文耦合模式WRF-Hydro安装、数据制备、代码编译、离线在线运行

目录 专题一 WRF-Hydro模型功能及运行流程、依赖库准备 专题二 WRF-Hydro模式编译、离线运行及案例实践 专题三 结合多案例进行模式数据制备及实践应用 专题四 WRF-Hydro模式耦合编译及运行、总结 更多应用 WRF-Hydro模型是一个分布式水文模型,‌它基于WRF‌陆…

视角 | 麻省理工学院提出出温度计校准法,专治AI大模型过度自信

在数字化浪潮的推动下,人工智能(AI)正成为塑造未来的关键力量。硅纪元视角栏目紧跟AI科技的最新发展,捕捉行业动态;提供深入的新闻解读,助您洞悉技术背后的逻辑;汇聚行业专家的见解,…

使用Python自动将照片文件夹转换为PowerPoint幻灯片

在这个数字时代,我们经常需要快速创建照片幻灯片来展示我们的回忆或工作成果。今天,我们将探讨如何使用Python来自动化这个过程,将一个文件夹中的所有照片转换为一个精美的PowerPoint演示文稿,每张照片占据一页,并以文件名作为标题。 C:\pythoncode\new\jpeginsertppt.py 全部…

【Python 逆向滑块】(实战二)逆向滑块,并实现用Python+Node.js 生成滑块、识别滑块、验证滑块、发送短信

逆向日期:2024.07.31 使用工具:Node.js、油猴 本章知识:逆向网易易盾【fp】参数 文章难度:中等(没耐心的请离开) 文章全程已做去敏处理!!! 【需要做的可联系我】 AES解…

配电盘emc测试技术咨询

申请配电盘 EMC 测试技术咨询的费用因机构、测试项目和服务内容的不同而有所差异。一般来说,测试机构会根据测试项目的复杂程度、测试时间和场地等因素来确定费用。 影响配电盘 EMC 测试技术咨询办理费用的因素有很多,其中主要的因素有: 1、检…

windows 环境测试使用 Visual Studio 2022 MSVC 自带的 cl + nmake 版本的 Makefile 编译代码

前言: windows 环境的 cl 和 nmake 就相当于 Linux 环境的 gcc、g 和 make;linux 中可以在 Makefile 中写 gcc、g 语句,然后执行 make;同样的,在 windows中也可以新建 Makefile 文件,在里面写 cl 语句&…

基于springboot+vue+uniapp的养老院管理系统小程序

开发语言:Java框架:springbootuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包&#…

45.二维数组练习:计算季度营业额和年总营业额

/* 某商场每个季度营业额如下,单位:万元 第一季度:22,66,44 第二季度:77,33,88 第三季度:25,45,65 第四季度:11,66,99 要求…

贵州桐梓影像大赛启动 百名摄影师齐聚桐梓采风创作

夏季的桐梓,山水秀美,天空湛蓝。近日,贵州桐梓首届旅游影像大赛启动,来自全省各地的100余名摄影师共聚一堂,开展一场别具一格的采风创作活动。他们带着镜头,追寻着光影的脚步,捕捉桐梓的自然风光…

使用WebSocket实现log日志流的实时展示-从轮询到通知

场景介绍 最近开发一个系统,其中一个模块需要展示实时的执行过程,过程日志可能比较多。以前的方案都是前端定时轮询,比如每秒查一次后端接口,将拉取回来的日志重新展示。轮询方案简单容易实现,但是比较消耗资源&#…

ctfhub-SQL注入-1-基础题目详解

1.打开题目在url上判断是数字型注入还是字符型注入 1 //无回显,说明是报错了,‘和后面的‘冲突了 1’ -- //有回显,是因为--把后面的‘注释掉了 2.使用命令判断列数 1order by 1-- //有回显 1order by 2 -- //有回显 1order by …

推荐Nodejs下高效存储树到数据库工具库-FlexTree

官网 | English FlexTree是Nodejs下一个基于左右值算法的树结构库,它提供了一种简单的方式来存储和操作树形结构数据。 FlexTree提供了简单而丰富的API让你可以轻松的操作树,如增删改查、遍历、移动、查询等。 主要特性: 基于左右值算法&a…

AMEYA360:纳芯微高集成单芯片SoC如何高效智能控制车载步进电机?

随着现代汽车电子技术的快速发展,步进电机作为一种精确且可靠的执行元件,在汽车电子系统中的应用日益广泛。为了实现车载步进电机应用的精确控制,纳芯微推出了集成LIN和MOSFET功率级的单芯片车用小电机驱动SoC——NSUC1610,可以帮…

全面掌握VS Code:提升开发效率的终极指南

Visual SCode Visual Studio Code(简称VS Code)是一款由微软开发的免费、开源且跨平台的代码编辑器。它支持多种编程语言,通过其强大的扩展库,可以满足各种开发需求。本教程将详细介绍如何从安装到高级使用,帮助你充分…

降低Anki对C盘空间占用的四种方法

Anki安装后,笔记中所用到的各种媒体和资源文件默认保存在C盘,例如我的电脑上是保存在“C:\Users\asus\AppData\Roaming\Anki2”,其中asus是我电脑的登录用户名。随着笔记收集越来越多,对C盘的占用也越来越大,因此&…