数据建模
概述
数据建模是一种分析与设计方法,用于定义分析数据需求,设计满足需求的数据结构,是反应数据需求和设计的数据说明与相关模型图的集合。大数据的数仓建模正是通过建模的方法,更好的组织、存储数据,以便在性能、成本、效率和数据质量之间找到最佳平衡点。
数据建模的好处:
- 企业业务庞大,数据结构复杂,事前规划可以使数据管理更加规范、有序,便于后期进行问题定位;
- 强化事前治理,为数据标准落地提供抓手,保证平台的建表和数据的产出,符合数据标准和数据质量的要求。
功能介绍
数据建模支持数仓规划设计,通过维度建模(维度表、事实表、汇总表、应用表),构建出业务的数据模型,通过数据标准和指标对模型结构进行统一的描述和约束。根据不同的存储引擎与模型定义生成DDL,对建模进行物化生成实际的物理表,利用模型之间的关系以及指标定义自动生成DML用于数据生产,并且根据数据标准生成数据质量作业对物理表的数据进行质量监控。
除此之外,还将建模数据同步给数据资产和数据血缘用于生成相关的统计信息。
数据建模各部分模块功能介绍如表1所示:
表1 数据建模模块功能介绍
名称 | 描述 |
---|---|
数仓规划 | 数仓规划支持根据业务场景或业务数据设计数据的分层,使得数据的整个生命周期层次清晰,依赖直观。综合考虑当前应用广泛的数仓分层策略,EDAP默认将数仓划分为以下五层: · 数据引入层 ODS (Operational Data Store) · 数据关系层DWR(Data Warehouse Relationship) · 明细数据层 DWD (Data Warehouse Detail · 汇总数据层 DWS (Data Warehouse Summary) · 应用数据层 ADS (Application Data Service) |
关系建模 | 关系建模支持将各个系统中的数据以整个企业角度按主题进行相似性组合和合并,并进行一致性处理,为数据分析决策服务。采用范式,降低数据冗余,保证数据的一致性。 · 第一范式:属性不可切割; · 第二范式:不能存在部分函数依赖; · 第三范式:不能存在传递函数依赖。 |
维度建模 | 第一范式:属性不可切割; 第二范式:不能存在部分函数依赖; 第三范式:不能存在传递函数依赖。维度建模支持根据数仓分层建立对应的数据模型,通过简单易上手的界面设计,对数据进行精确建模逻辑模型,通过物化与作业开发落地物理模型。根据数仓分层设计,EDAP将维度建模分为以下四种表: · 维度表 (Dimension Table) · 事实表 (Fact Table) · 汇总表 (Summary Table) · 应用表 (Application Table) |
模型审核 | 模型审核支持通过审核流程,提升数据模型、数据指标创建、变更、废弃的严肃性。数据模型的发布状态分为以下三种: · 未发布 · 已发布 · 已废弃 |
核心概念
数据模型:数据模型是数据特征的抽象,它从抽象层次上描述了系统的静态特征、动态行为和约束条件,为数据库系统的信息表示与操作提供一个抽象的框架。数据模型是指现实世界数据特征的抽象,用于描述一组数据的概念和定义。数据模型管理是指在信息系统设计时,参考逻辑模型,使用标准化用语、单词等数据要素设计数据模型,并在信息系统建设和运行维护过程中,严格按照数据模型管理制度,审核和管理新建和存量的数据模型。数据模型所描述的内容有三部分,分别是数据操作、数据约束和数据结构。
数据操作:数据模型中数据操作主要描述在相应的数据结构上的操作类型和操作方式。
数据约束:数据模型中的数据约束主要描述数据结构内数据间的语法、词义联系、它们之间的制约和依存关系,以及数据动态变化的规则,以保证数据的正确、有效和相容。
数据结构:数据模型中的数据结构主要描述数据的类型、内容、性质以及数据间的联系等。数据结构是数据模型的基础,数据操作和约束都建立在数据结构上。
数仓分层:数仓分层是根据业务数据的场景,结合现有应用广泛的数仓理论,将数据按照层次进行划分,使得数据之间的依赖关系更加清晰,数据的生产与加工有迹可循。
关系建模:关系建模用实体加关系描述的数据模型描述企业业务架构,在范式理论上符合3NF,是站在企业角度,而不是针对某个具体业务流程,它更多是面向数据的整合和一致性治理。建模过程先设计概念模型,再进一步细化设计出逻辑模型,最后设计物理模型。
维度建模:维度建模以分析决策的需求为出发点构建模型,一般有较好的大规模复杂查询的响应性能,更直接面向业务。因此,它重点解决用户如何更快速完成分析需求,同时还有较好的大规模复杂查询的响应性能。
数仓规划
随着数据的增长,数据治理的难度不断增大。大多数情况下,数据体系是依赖复杂、层级混乱的。如何使得数据能够有秩序地流转,数据的整个生命周期能够清晰明确被感知到。数仓规划是其中重要的一环,通过数仓进行合理科学分层,能够较为有效地梳理数据之间的依赖关系,使得数据清晰明了。EDAP中数仓分层详细信息如表2所示。
表2 数仓分层详细信息
分层类型 | 中文名称 | 英文名称 | 分层描述 | 模型类型 | 命名前缀 |
---|---|---|---|---|---|
ODS | 数据引入层 | ODS | 存放未经处理的原始数据,表结构与源系统保持一致。 | 贴源表 | ods_ |
DWR | 数据关系层 | DWR | 对ODS层的数据进行清洗,可以采用关系建模的方式维护数据关联关系。 | 逻辑实体表 | dwr_ |
DWD | 明细数据层 | DWD | 对ods层的数据进行清洗,采用维度退化的方式对数据重新建模。 | 维度表 | dim_ |
事实表 | fact_ | ||||
DWS | 汇总数据层 | DWS | 按照业务划分和指标需求,对dwd层的数据进行汇总。 | 汇总表 | dws_ |
ADS | 数据应用层 | ADS | 存放个性化的统计指标,用于报表输出。 | 应用表 | ads_ |
ODS:保存最原始的数据,起到数据备份的作用,可以采用parquet等压缩格式;
DWR:维护原始数据间的关联关系,可以使用关系建模的方法重新建模;
DWD:代表的是业务的最小粒度层,对业务数据采用维度模型的方式重新建模(维度退化),为后续的层做准备;
DWS:关于各个主题的加工和使用,是事实表的聚合值,例如统计各个主题对象7天、30天、90天的行为,例如把主题对象单日的行为聚合起来组成一张多列宽表,关联维度信息后,从不同角度进行统计分析;
ADS:为各种统计报表提供数据;
数仓分层
1、点击导航栏中的规范设计-数据建模-数仓规划,进入数仓规划界面,如下图所示。
数仓规划分为五层,分别是数据引入层、数据关系层、明细数据层、汇总数据层以及数据应用层。图1左侧每一层中都拥有三个统计属性。统计属性介绍如下:
- 数据表:当前分层下所有表的数量
- 字段:当前分层下所有表的字段数量总和
- 落标率:引用了数据标准的字段/字段总数(枚举维度落标率为100%)
图1 数仓规划界面
2、点击图1右侧的编辑按钮,可以对数仓分层信息进行修改,如下图所示。
图2 数仓分层信息修改界面
数仓分层的参数信息如表3所示。
表3 数仓分层参数信息
参数 | 描述 |
---|---|
*中文名称 | 数仓分层的中文名称,仅支持中文、数字、下划线、中划线,长度不能超过64个字符 |
*英文名称 | 数仓分层的英文名称,仅支持英文、数字、下划线、中划线,长度不能超过64个字符 |
描述 | 数仓分层的描述,长度不能超过500个字符 |
模型定义 | 每个数仓分层都有对应的数据模型,支持对模型的命名前缀进行修改 |
3、点击图1右侧的新建表按钮,可以跳转到对应的维度建模界面创建模型。
ODS层暂不支持跳转
关系建模
新建逻辑实体
1、点击导航栏中的规范设计-数据建模-关系建模。
2、选择对应的主题域以及主题。
3、点击左上角的“新建逻辑实体”按钮进入新建页。
图3 关系建模界面
4、填写基本信息部分:“逻辑实体名称”、“表中文名称”和“模型责任人”为必填项,也可根据实际需求选填“描述”项填写框。
图4 新建逻辑实体界面
5、填写属性定义部分,“字段定义”中除“描述”外所有项均为必填项。填写“字段名称”、“中文名称”,选择“字段类型”后,可点击蓝色关联按钮以关联标准,可在勾选框选择是否将该字段设为主键和是否允许为空,选择密级别并选填“描述”项。
若将某字段设为主键,则该字段不可勾选“允许为空”。
6、可在“分区定义”部分,点击蓝色按钮添加分区定义,必填项内容与“字段定义”中相同。
图5 新建逻辑实体定义填写界面
7、在关系定义部分中,点击“+ 添加关系”蓝字按钮,打开添加逻辑关系弹窗页。在弹窗页内先选择“关联逻辑实体”,若选中的关联逻辑实体没有主键字段,则无法完成关联,需重新选择关联逻辑实体。选中合适的关联逻辑实体后,其主键字段回自动匹配至下方。随后,在弹窗页下拉选框选择“关联关系”,选中的关联关系与关联逻辑实体的主键字段一一对应。
注:子逻辑实体和父逻辑实体相同的关系不可重复填报。
图6 添加逻辑关系界面
图7 添加逻辑关系自动匹配界面
8、添加关联关系后,可在“关系定义”部分查看到示意的关联图标。
图8 关系定义示意图
9、点击页面左下角确认按钮,完成逻辑实体的新建操作。
维度建模
创建维度表
1、点击导航栏中的规范设计-数据建模-维度建模-维度表。
2、选择对应的主题域以及主题。
3、点击左上角的“新建表”按钮创建维度表。
图9 维度表新建界面
4、根据新建维度表界面的提示填写参数,点击确认完成维度表的创建,如下图所示。维度表参数如表4所示。
图10 新建维度表基本信息填写界面
图11 新建维度表元数据定义填写界面
表4 维度表参数
参数 | 描述 |
---|---|
*表英文名称 | 维度表英文名称,支持英文、数字、下划线,长度不能超过128个字符 |
*表中文名称 | 维度表中文名称,支持中文、英文、数字、特殊字符等,长度不能超过128个字符 |
*维度类型 | 维度类型,支持普通维度和枚举维度 |
*模型责任人 | 模型责任人名称 |
描述 | 维度表的描述,长度不能超过500个字符 |
*字段定义 | 维度表字段参数定义,详见表5 |
分区定义 | 维度表分区参数定义,详见表5 |
表5 维度表字段定义与分区定义参数
参数 | 描述 |
---|---|
字段名称 | 字段的名称,以英文开头,支持英文、数字、下划线,以字母开头,长度不能超过128个字符 |
中文名称 | 字段的中文名称,支持中文、英文、数字、常见的特殊字符等,不超过128个字符 |
数据类型 | 字段的数据类型,支持TINY、SMALLINT、VARCHAR、CHAR、ARRAY、MAP、STRING、INT、BIGINT、DOUBLE、DECIMAL、FLOAT、BOOLEAN、BYTES、DATE、TIMESTAMP |
类型设置 | 当数据类型为DECIMAL时,需要填写类型设置,用于精度确认 |
关联标准 | 字段支持关联数据标准,用于规范字段 |
代理键 | 表示维度的唯一键,作用是连接维度表和事实表,为避免数据库结构发生变化带来影响 |
允许空 | 是否允许为空 |
密级 | 字段保密程度等级,支持L0-L4 |
描述 | 字段描述,长度不能超过64个字符 |
创建事实表
1、点击导航栏中的规范设计-数据建模-维度建模-事实表。
2、选择对应的主题域以及主题。
3、点击左上角的“新建表”按钮创建事实表。
4、根据新建事实表界面的提示填写参数,点击确认完成事实表的创建,如下图所示。事实表参数如表6所示。
图12 新建事实表信息填写界面
表6 事实表参数
参数 | 描述 |
---|---|
*表英文名称 | 表英文名称,支持英文、数字、下划线,长度不能超过128个字符 |
*表中文名称 | 表中文名称,支持中文、英文、数字、特殊字符等,长度不能超过128个字符 |
*模型责任人 | 模型责任人名称 |
描述 | 表的描述,长度不能超过500个字符 |
*字段定义 | 表字段参数定义,详见表5 |
分区定义 | 表分区参数定义,详见表5 |
表7 事实表字段定义与分区定义参数
参数 | 描述 |
---|---|
字段类型 | 字段的类型,支持维度、度量 |
字段名称 | 字段的英文名称,以英文开头,支持英文、数字、下划线,长度不能超过128个字符 |
中文名称 | 字段的中文名称,支持中文、英文、数字、常见的特殊字符等,不超过128个字符 |
数据类型 | 字段的数据类型,支持TINY、SMALLINT、VARCHAR、CHAR、ARRAY、MAP、STRING、INT、BIGINT、DOUBLE、DECIMAL、FLOAT、BOOLEAN、BYTES、DATE、TIMESTAMP |
类型设置 | 当数据类型为DECIMAL时,需要填写类型设置,用于精度确认 |
关联标准 | 字段支持关联数据标准,用于规范字段 |
关联维度 | 字段支持关联维度,维度表的代理键字段与当前字段进行关联 |
代理键 | 表示维度的唯一键,作用是连接维度表和事实表,为避免数据库结构发生变化带来影响 |
允许空 | 是否允许为空 |
密级 | 字段保密程度等级,支持L0-L4 |
描述 | 字段描述,长度不能超过64个字符 |
创建汇总表
1、点击导航栏中的规范设计-数据建模-维度建模-汇总表。
2、选择对应的主题域以及主题。
3、点击左上角的“新建表”按钮创建汇总表。
4、根据新建汇总表界面的提示填写参数,如图13所示。汇总表参数如表8所示。
5、点击元数据定义右上角的“从指标导入”,通过导入的方式填写字段定义与分区定义。
6、最后点击确认完成汇总表的创建。
图13 新建汇总表信息填写界面
表8 汇总表参数
参数 | 描述 |
---|---|
*表英文名称 | 表英文名称,支持英文、数字、下划线,长度不能超过128个字符 |
*表中文名称 | 表中文名称,支持中文、英文、数字、特殊字符等,长度不能超过128个字符 |
*统计维度 | 所有“已发布”的衍生指标的所有维度组合,例如:员工维度、公司维度、员工和公司维度 |
*模型责任人 | 模型责任人名称 |
描述 | 表的描述,长度不能超过500个字符 |
*字段定义 | 表字段参数定义,详见表9 |
分区定义 | 表分区参数定义,详见表9 |
表9 汇总表字段定义与分区定义参数
参数 | 描述 |
---|---|
字段名称 | 字段的英文名称,以英文开头,支持英文、数字、下划线,长度不能超过128个字符 |
中文名称 | 字段的中文名称,支持中文、英文、数字、常见的特殊字符等,不超过128个字符 |
数据类型 | 字段的数据类型,支持TINY、SMALLINT、VARCHAR、CHAR、ARRAY、MAP、STRING、INT、BIGINT、DOUBLE、DECIMAL、FLOAT、BOOLEAN、BYTES、DATE、TIMESTAMP |
类型设置 | 当数据类型为DECIMAL时,需要填写类型设置,用于精度确认 |
关联标准 | 字段支持关联数据标准,用于规范字段 |
关联维度/指标 | 字段若是维度,则关联维度;字段若是度量指标,则关联指标 |
代理键 | 表示维度的唯一键,作用是连接维度表和事实表,为避免数据库结构发生变化带来影响 |
允许空 | 是否允许为空 |
密级 | 字段保密程度等级,支持L0-L4 |
描述 | 字段描述,长度不能超过64个字符 |
创建应用表
1、点击导航栏中的规范设计-数据建模-维度建模-应用表。
2、选择对应的主题域以及主题。
3、点击左上角的“新建表”按钮创建应用表。
4、根据新建应用表界面的提示填写参数。应用表参数与汇总表保持一致,详见表8。
5、点击元数据定义右上角的从指标导入,通过导入的方式填写字段定义与分区定义。
6、最后点击确认完成汇总表的创建。具体过程可参考创建汇总表,本节不进行赘述。
通用操作
发布与管理表
数据模型生命周期分为三个状态,分别是未发布、已发布、已废弃。
- 未发布:表示数据模型处于草稿状态,未发布的数据模型无法被使用,用户可以对模型进行编辑、发布、删除操作。
- 已发布:表示数据模型处于已发布状态,已发布的数据模型可以被使用,用户可以对模型进行编辑、物化、废弃操作。
- 已废弃:表示数据模型处于已废弃状态,已废弃的数据模型无法被使用,用户可以对模型进行删除操作。
发布
新建的数据模型处于草稿状态,需要发布之后才可以被正式使用。在右侧的操作栏点击“发布”按钮,即可进行发布操作。发布后,数据模型变更为已发布状态。
废弃
对于已发布的数据模型,如果不再使用,则可以进行废弃。点击右侧操作栏中的“废弃”按钮,可以对指标进行废弃操作。
当模型被其他模型或指标引用时,不支持废弃操作。
编辑
1、当数据模型处于“未发布”状态时,点击“编辑”按钮,可以对数据模型的信息进行编辑修改,点击确认之后,保存用户修改之后的模型。
2、当数据模型处于“已发布”状态时,点击“编辑”按钮,可以对数据模型的信息进行编辑修改,点击确认之后,会创建当前模型的子版本。子版本存储用户修改之后的模型,并处于“未发布”状态,支持发布、编辑、发布操作。当前父版本的信息不会改变,且父版本不支持任何操作。如下所示:
图14 编辑操作示意图
当子版本发布之后,会覆盖父版本的模型,并处于“已发布”状态。
删除
当模型处于“未发布”或“已废弃”状态时,点击“删除”按钮,可以对模型进行删除。
模型物化
当模型处于“已发布”状态时,支持对模型进行物化操作,为数据模型创建同名物理表。
批量物化
1、选中“已发布”状态的一个或多个模型,点击“批量物化”按钮展开下拉选项,选择“批量物化”,并配置物化参数,可对模型进行批量物化。如图15所示。
如果初次物化,所选库中已有同名的数据表,则物化失败。
图15 模型物化参数配置
用户可根据需要配置物化信息,物化信息详细介绍如表10所示。
表10 物化配置信息介绍
参数 | 描述 |
---|---|
*表类型 | 物理表的类型,支持管理表、外部表 |
*数据源类型 | 数据源的类型,支持EDAP与Hive |
*发布数据源 | 1、当数据源类型为EDAP时,仅可选择EDAPDatalake 2、当数据源类型为Hive时,可选择平台已创建的Hive数据源连接 |
*数据库 | 物化的数据库名称 |
*物化类型 | 物化的类型,支持增量发布、删除重建 增量发布:仅将新增内容或此次变更的内容发布至对应数据源链接 删除重建:将之前发布的表删除,重新创建此次发布的表 首次物化时,可任意选择一个类型 |
2、完成物化配置之后,点击下一步,可展示物化结果,如图16所示。
图16 物化结果配置
3、当发布状态为“成功”时,表示物化成功。当发布状态为“失败”时,可点击“重试”按钮或者修改相关配置重新物化;支持右下角点击全部重试按钮对“失败”模型批量重试。右下角点击确定按钮结束物化操作。
4、物化完成后,“同步状态”会更新为“同步成功”,鼠标焦点放在“同步成功”后面的眼睛图标上时,可点击气泡中“查看元数据”蓝字按钮,跳转至元数据管理页面查看详情。
图17 同步成功后元数据查看
5、点击“逻辑实体名称”蓝字按钮,跳转至模型详情页,详情页内展示逻辑实体相关信息,包括:基本信息、元数据信息、物化表信息、关系定义信息、发布历史、审核历史。
图18 模型详情页界面
上次物化结果
1、选中“已发布”状态的一个或多个模型,点击“批量物化”按钮展开下拉选项,选择“上次物化结果”,可查看上次物化结果,如下图所示。
图19 上次物化结果查看
逆向数据库
1、选中任意主题,鼠标悬浮“逆向操作”按钮,展开“逆向数据库”和“上次逆向结果”选项。点击“逆向数据库”按钮,打开操作弹窗页。
图20 逆向数据库操作弹窗页
2、点击“逆向数据库”按钮,打开操作弹窗页。首先选择数据源:选择“所属主题域”、“所属主题”、“资源类型”和“数据源链接”。
图21 逆向数据库操作参数填写
表11 当前支持的数据源类型和版本
数据库类型 | 版本 | 对应客户的业务域 |
---|---|---|
MySQL | 8.0.26 | 标准规范 |
MySQL | 5.7.38-log | 知识产权、供应链 |
MySQL | 8.0.25 | 主数据 |
Oracle | 11.2.0.1.0 | 海外营销、市场域 |
Oracle | 11.2.0.4.0 | 合约域 |
3、选择完成后可点击“立即测试”按钮,测试其连通性。测试结果无论通过与否都不影响提交。点击“下一步”按钮完成数据源的选择。
图22 逆向数据库连通性测试界面
4、在数据表目录中勾选需要逆向操作的数据表,选择完成后点击“下一步”按钮。
图23 勾选数据表
5、进入“逆向建模”流程后,等待自动建模完成即可。完成后自动流转进入“建模结果”,可在表单中查看建模结果总览,点击“查看”蓝字按钮可跳转至逻辑实体详情页。
图24 建模结果总览界面
6、在“逆向操作”中点击“上次逆向结果”按钮,查看“上次逆向数据库”的主题及实体等。
图25 查看上次逆向结果
模型开发
汇总表、应用表支持对“已发布”状态且已成功物化的模型进行作业开发,创建脚本开发作业,通过脚本作业导入数据,提高开发效率。
1、选择“已发布”的汇总表或应用表,点击“开发”按钮,进入模型开发-作业配置界面,如图26所示。
图26 模型开发-作业配置界面
作业开发配置信息详细介绍如表12所示。
表12 作业开发配置信息介绍
参数 | 描述 |
---|---|
*作业开发类型 | 作业开发的类型,支持HiveSQL、SparkSQL |
*存在项目 | 选择平台已创建的项目,用于作业开发 |
*存放文件夹 | 选择作业开发项目下的文件夹 |
2、完成作业配置之后,点击下一步,可展示作业开发结果,如图27所示。
图27 作业开发结果
3、当创建状态为“SUCCESS”时,表示脚本作业创建成功,点击确定完成创建作业开发任务。用户可根据作业的名称到对应的作业开发任务查看详情。当发布状态为“FAIL”时,可点击“重试”按钮或者修改相关配置重新创建作业。
模型审核
在模型审核 Tab 下,共有三个子页面,分别是「待审核」、「我的审核」、「我的提交」。根据用户的权限不同,每个页面的展示情况也不同。
- 待审核:只有当用户具有审核模型的权限时才展示该页面,显示所有待审核的单据,可以对这些单据进行审核
- 我的审核:只有当用户具有审核模型的权限时才展示该页面,展示该用户所有审核过的单据
- 我的提交:对所有用户都展示,展示该用户提交的单据
提交审核
在「关系建模」或者「维度建模」中,所有的「发布」、「修订」、「废弃」操作都会生成一个审核单据,可以在「我的提交」中查看该用户提交的单据及其审核状态:
处理审核
如果用户具有审核模型的权限,在「待审核」页面中查看所有待审核的单据,点击右侧的「审核」操作,可以对其它用户提交的申请单据进行审核:
审核结果可以是「通过」或者「驳回」:
查看审核
如果用户具有审核模型的权限,在「我的审核」页面中查看所有审核过的单据:
点击右侧的「查看」,可以查看审核详情: