从这里开启建模之旅
按照学习路径循序渐进,也可以直接跳转到需要的章节。
数据建模简介
概述
本章简要介绍了数据建模这一用于构建数据模型的工具。
云智算的数据建模系统是专门为数据仓库建模,所以在详细介绍数据建模之首先简单介绍为什么创建数据仓库。在介绍了数据仓库的作用及其要做的工作之后,本文再开始介绍数据建模模块包含哪些功能、数据模型是什么、数据模型包含什么、有哪些数据模型、以及数据模型在整个数据链管理系统的作用。紧接着介绍了模块的基本功能界面,以让您对系统的功能应用有具体的了解。
本章最后部分介绍了云智算的数仓建模方法论及建模原则,以及基于方法论的基础上如何创建数据模型以及数据模型的开发过程,最后指出了谁来负责数据建模,建模师应该拥有哪些技能。
为什么要建设数据仓库
建设数据仓库的目标
建设数据仓库的目标就两个:
更容易理解业务;
更好的查询性能。
要达到上述目标,数据仓库的数据模型采用维度建模(也叫星座建模)是最可行的技术,云智算的数据建模基础也是维度建模。
数据仓库存放什么数据?
数据仓库的ODS层存放最原始的基本不经过处理的业务数据,就类似采购到货单,供应商的货物已运到仓库了,准备入库;如果某些货物还需要经过一系列的复杂处理,则需要将这些货物放到STG层,由STG层处理再入库。
数据仓库DWD、DWS层、IDX层(面向应用)存的是从来源过来的数据,和工厂的仓库来类比的话,数据仓库是就经过分门别类的原材料仓,每个表就是一个库位,DWD、DWS、IDX等是库位的分组。
当前端应用(一个报表)过来取数时,就类似一张领料单,可能从多个仓位(表)取。如果你的前端BI应用程序支多星座的取数并能自动合并,那你就不需为这个前端应用做一个库位,而是由前端应用程序从各表(或连接多个表)查询数据返回给前端,并且从多个表查询数据可以并发作业,以使查询时间最短。如果你的前端应用程序不支持多星座模型,那就需要为这个前端应用(领料单)再设计一个表(库位),将需要从多个表取的数预先存这个表(库位),而这些根据前端应用而设计的表就需要数据仓库再加一层:ADS层。
因为前端应用(领料单)会跟前管理工作的分析而有很多的变化,而业务系统的数据(原料)确是不变的(有新的模块或系统则是新增,不会打乱原有的数据。所以我们强烈建议选用支持多星座模型的BI应用程序。假设你选择的BI应用程序不支持多星座,那我们也强烈建议你创建的ODS、Staging、DWD、DWS及IDX是基于来源的数据设计,仅ADS层面向前端应用,这样至少保证了数据仓库除ADS层之外的简洁及健壮。
建设数据仓库的主要工作
建设数据仓库,本质上就是转换,即把业务系统的数据,转换成适合分析使用的形态。这个过程可以拆解为库、表、字体等三个层次。
一、从源到数据仓库:库层面的转换
源数据可能来自业务库(MySQL、Oracle等)、数据文件(CSV、Parquet等)或API接口,在云智算中,我们把它们都视为一个“数据来源库”。
但业务库通常是行式存储,面向事务处理(OLTP),直接用于分析查询性能很差。数据仓库的目标是让查询更快,所以需要将数据迁移到更适合查询的数据库载体上,例如列式存储的PostgreSQL数据库等。
从数据来源至数据仓库,因为所选的库类型不同,那首先就需要维护两者之间的数据类型映射,在本文后面“维护建模基础”一章将提供相关详细描述。
二、从源表到数据仓库的表:表层面的转换
源系统的表结构是面向业务操作设计的,而数据仓库的表结构是面向分析查询设计的,两者完全不同。
举三个制造型企业ERP系统最常见的表转换例子。
ERP中的销售订单,业务上分为表头(订单编号、供应商、日期、总金额)和表体(物料编码、数量、单价、行金额)两张表,这是因为业务上“一张订单对应多行商品”的关系需要分开维护。但数据分析时,用户经常需要同时查看订单级信息和明细行信息,两张表关联查询既慢又麻烦。所以在数据仓库中,我们会把表头和表体合并为一张订单明细事实表,每一行就是订单的一行商品,同时带上订单头的信息。但这张合并后的表不是大宽表——它只包含订单实体本身的属性(订单号、日期、供应商、物料、数量、金额等)。不把客户信息、物料分类等维度属性都塞进来。维度属性通过日期维表、客户维表、物料维表等单独存放,查询时通过外键关联,更不因为报表的需求其它的业务信息信息放进来(比如出货信息、收款信息)等放进来,以保持实体的相对独立。
ERP系统一般不存储库龄信息,但在数据分析中又经常需要库龄的信息,在报表查询中再来计算库龄显然不适合因为那需要等待太长时间,所以在数据仓库建设过程中,就需要根据库存期初、入库单及出库单等根据先进先出的算法提前计算并存储到库存余额表中。
ERP系统中很多分类的基础档表,比如物料分类表,一般具有“parent_id”的自连接,但在数据分析时,需要显式让用户使用“一级物料”、“二级物料”等多层的业务对象,这时就需要将业务库的这种表结构转换为具有“XX级物料”等多个字段的物料分类表,以让用户使用BI工具快速进行分析。
本文后面的章节,将详细描述各种模型中如何使用向导式功能根据上一层的表来创建目标表,在向导式配置过程中将确定哪些源表参与、哪些逻辑需要配置以及哪些字段需要增加等等,从而来完成表层面的设计及转换。
三、从源字段到目标字段:字段层面的转换
源表的有些字段往往不能直接用于分析,需要进行清洗和标准化,比如下面的场景。
空值处理:将 NULL 值填充为业务含义明确的默认值(如 0 或“未知”);
枚举值转义:将代码值(如性别字段的 0/1)转换为可读的分析维度值(如“男”/“女”);
字段计算:基于源字段计算出新字段,例如由订单行数量 × 单价计算出行金额,或按客户ID分组统计出订单数;
数据类型标准化:将字符串日期转为标准的日期类型,确保时间序列分析准确;
码值统一:不同源系统中同一实体的编码规则不同,需映射为统一的维度值。
在本文后面关于核心功能的描述一章,详细描述了如何配置目标字段的来源以及转换规则,从而完成字段层面的转换。
上面三层转换小结
| 转换层面 | 要做什么 | 为什么 | 系统实现 |
|---|---|---|---|
| 库层面 | 从行式存储的业务库、文件及API等,转换到查询性能更快的数据库 | 提升查询性能 | 数据建模基础之 数据类型及映射 |
| 表层面 | 表头+表体合并为事实表、 增加事实快照表、扁平化自连接表、 增加日期维表等 |
更好理解, 提升性能 |
模型提供的各种设计向导 |
| 字段层面 | 空值填充、枚举转义、 派生字段计算、类型标准化等 |
数据干净、 口径统一 |
通过字段表达式来映射、清洗及转换 |
三层转换环环相扣,每一层都在为“更容易理解业务、更好的查询性能”这个目标服务。而云智算的模型驱动机制,让您只需在这三层完成配置,系统就会自动生成从源到目标表的完整数据集成程序,无需手工编码。
数据建模的基本原理
云智算数据建模与PowerDesigner等其它数据建模工具不同,云智算的数据建模专门为数据仓库创建数据模型。除了基本模型及表设计之外,云智算数据建模创造性地将数据仓库的维度模型设计过程抽象为系统的功能,将数据仓库的设计工作标准化及产品化。另外,云智算数据模型创建的表除了包含表的字段、索引及键等属性,还包含了表字段与来源数据的映射关系,从而可以自动生成相应的数据集成转换程序。上述描述的各种专为数据仓库建模而设计的系统功能,极大程度缩短数据仓库设计及数据集成开发的时间成本。
在设计数据模型之前,您需要创建数据源,数据源包括数据库连接、数据文件及Web应用。关于数据源的创建,请参考《云智算数据源管理用户指南》。
在创建数据模型之后,如何基于模型驱动而自动生成数据集成的转换,请参考《云智算数据集成用户指南》。
数据模型概述
数据模型是联合业务及数据的综合角度来描述一组相关的数据库表与及这些表关系的集合。数据模型包含:
一个数据库连接,其确定在哪个数据库创建设计的表。
多个数据来源,业源包括数据源和数据模型。数据源包括数据库连接、数据文件或Web应用,数据模型则按照ODS、STG、DWD、DWS、IDX及ADS顺序,每类模型可将上层的模型作为来源,也可将自身模型作为数据来源。
实体(Entity Relation)关系图、星座关系(Star Relation)图和聚合关系图(Aggregate Relation)。数据仓库的ODS模型的表关系使用实体关系图来描述,DWD模型则用星座模型(也叫维度模型)来描述(星座模型实际上是特殊的关系模型),DWS模型则使用聚合关系图来描述聚合表从哪个表聚合的来源关系,IDX模型则是标准的星座模型;而STG和ADS模型也是星关系模型或星座模型,但一般以单个表的数据处理为主,关系图可以为一个表。
表的集合,业务系统产生的数据抽取到数据仓库需要以表的形式存储。
从源数据到目标表的设计过程的元数据集合。
云智算将组织的数据仓库划分下面6层:
ODS(operational data store),操作数据层;
STG(Staging),数据准备层;
DWD(data warehouse detail),数据仓明细层;
DWS(data warehouse summary),数仓库汇总层
IDX(index),指标层,以及;
ADS(application data service),应用服务层
云智算数据模型亦根据数据仓库的层次做类似的划分:
ODS模型 ODS模型对应的数据仓库的ODS层,ODS层存储从业务系统直接抽取过来的数据,其数据基本不经过任何逻辑的转换,ODS模型以关系图来设计表之间的关系。
DWD模型 DWD模型对应数据仓库的DWD层,数据从ODS层抽取后经过清洗转换后存储到DWD层,DWD模型的表以多星座雪花模型来设计表之间的关系。星座模型已被证明是数据仓库最好的数据结构化模式,它对业务用户来说很直观,并且能够提供较快的查询性能。
DWS模型 DWS模型对应数据仓库的DWS层,DWS层存储的是明细事实表的聚合表,以提升用户查询的效率。DWS模型的表以“原子事实表—聚合事实表”的连接样式来反映表之间的关系。
IDX模型,IDX模型对应数据仓库的IDX层,IDX层存储指标相关的维表及指标事实表,IDX模型使用到的分组及及计算周期等维表,使用DWD层的维表。
数据模型作用
云智算的数据模型的作用概括描述如下:
帮助用户从层次、模型、表、字段逐步理解数据并掌握数据;
基于数据模型快速创建物理表,提升数据仓库的维护效率;
基于数据库自带的功能强大的函数及运算符实现字段的清洗转换;
数据模型的设计过程元数据可自动生成数据集成的转换,不需要创建及维护;
数据模型的设计过程元数据可以自动展示数据资产、数据血缘及影响分析等
数据模型的DWD模型、DWS模型、IDX模型以及ADS模型可以快速生成业务模型的关系图。
数据模型如何推导出数据集成的转换
数据模型是如何推导出数据集成的转换呢?其主要逻辑如下:
从数据源添加表到ODS模型,或者从上一层模型引入生成目标表时,系统记录了来源数据和目标表的映射,通过来源表达式及模型关系就可以生成输入的步骤及对应的设置。如果来源是数据库连接,则生成查询SQL语句;如果来源是数据文件,则直接从数据文件查询数据;如果来源是Web应用,则从API查询数据。在生成表输入或数据文件输入或Web API输入时,以目标表的字段名作为输入数据集的列名,所以表输出的映射也可以根据名称一一对应。
表的抽取过滤分为全量和增量,云智算的转换分为全量和增量,云智算的作业也分为全量和增量,当作业设置为全量时,就根据表抽取过滤的全量来创建云智算的全量转换,当作业设置为增量时,就根据表抽取过滤的增量来创建云智算的增量转换。
数据模型的设计功能:日期及时段表生成、表扁平化、表行转列、表列转行及事实快照表生成等,在数据集成有对应的步骤组件,所以上述设计功能的设置都会自动推导出相应的步骤设置。
数据模型的而合并表设计功能则推导出目标表有多个表输入。
聚合模型根据聚合关系可以推导出表输入的分组语句及汇总字段。
指标模型及指标定义根据每一个项推导出一个表输入,根据指标公式则可推导出各个表输入的关联并使用数据集成的“数据集连接”步骤进行连接,再根据指标定义使用“增加字段”步骤完成指标的计算。
通过云智算系统创建数据模型,不但消除了创建数据转换的成本,并且也消除了数据转换变更的成本。困扰在数据仓库/商业智能项目的占整个项目70%的ETL时间将大幅降低。
数据模型如何自动创建数据资产
数据模型在设计过程中包含了表及字段的元数据,所以数据资产关于表及字段部分的资产数据就可以根据数据模型元数据自动获得。由于数据集成的转换程序就是基于数据模型的过程设计元数据生成,所以数据血缘和影响分析的数据也全部根据数据模型的元数据生成,而不需采集数据转换程序的元数据再解释才能生成数据血缘和影响的分析报告。
对于数据资产的数据记录及业务日期范围部分,数据模型在维护时自动生成了任务来统计上述资产。
数据建模功能概览
在云智算系统,点击“数据建模”模块,即打开了数据建模模块的菜单,以及缺省打开ODS模型的列表页面。
数据建模包括的菜单与数据模型的层级一一对应,包括的菜单如下:
ODS模型
STG模型
DWD模型
DWS模型
IDX模型
ADS模型
上述每个菜单维护对应的数据模型,每种模型的工具栏完全相同,如下图:

| 按钮 | 功能描述 |
|---|---|
| 文件夹 | 维护文件夹,包括新增文件夹、修改文件夹属性以及删除文件夹。 |
| 新增 | 打开新增模型对话框,完成新增后,将自动打开新页签来编辑数据模型。 |
| 编辑 | 打开一个新页签编辑模型 |
| 属性 | 打开模型属性对话框。 |
| 刷新 | 向服务重新获取当前模型并装载到列表。 |
数据建模方法论
云智算的数据仓库建模基于云智算首创的DSCM(Data Supply Chain Management)数据供应链建模方法论,该方法论以维度建模作为基础,以供应链形式进行创建。维度建模是数据仓库泰斗Inmon和Kimbll支持持的方法论,也称之为星座建模。维度将客观世界分为度量和维度,度量一般以数值形并出现在事实表,对应于业务源系统的单据表或快照表,而维度则是度量的上下文(谁、什么、何时、何地、何原因)信息并出现在维表对应于业务源系统的基础档案表。数据供应链建模,顾名思义,建模好象供应链系统一般,即每层模型都来源于上一层模型,但每一层又有自身的属性和变化。
数据供应链建模基于以下基本原则:
由源系统数据结构驱动建模,在此基础上根据数据仓库标准进行加工;
ODS层则为ER模型设计,而DWD、DWS及IDX层都基于维度模型设计,当将理解性和性能作为数据仓库的最高目标时,维度模型是首选;
DWD、DWS及IDX层都面向商业智能应用程序,我们强烈建议您不要在这些层级根据报表而创建数据集市和大宽表,包括跨单据域的报表或数据访问应该由支持多星座语义层BI程序自动整合数据;当使用的BI程序不支多星座语义层时,可以在ADS层创建大宽表以为前端的BI程序提供数据。
当从ODS层向DWD层的转换非常复杂并且难于一次性转换清洗而得到最终的结果时,需要在整个数据仓库增加STG层,通过STG模型对表进行多次清洗转换以达到可以直接或简单转换输送到DWD层;
云智算为数据仓库设计专门开发了特定的程序功能,使用设计程序可以保存设计元数据,而保存的设计元数据可以自动生成转换换程序以及创建数据资产,所以我们强烈建议所有的数据集成的转换程序都由数据模型自动生成,而不是人工创建,这样当修改数据模型时的表或字段后不需要对数据集成的转换程序作任何变更;
通过数据库自带的函数和运算表达式处理字段的清洗和转换,数据库函数库足够强大并且一般都有开窗函数,能够处理所有字段级的清洗转换需求。
数据供应链建模方法的最大优点在于快速的数据模型创建速度,并且根据上述原则进行的设计暗含了源表及目标表之间的映射逻辑关系,这是自动生成数据集成转换的基础。数据供应链建模方法将消除数据仓库建设中最繁重的ETL设计和开发工作,也消除了繁重的数据资产管理工作。
如何创建数据模型
如何创建数据模型,可以划分为三大步骤,如下:
首先,您需要为数据模型指定一个数据库连接及数据来源,这是创建数据模型的基础,数据库连接将为创建目标表指定数据库。
其次,您要指定数据模型的数据来源,来源可以是数据源也可以是上一步骤的数据模型,数据源包括数据库链接、数据文件及Web应用。
然后,您进入数据模型的详细设计阶。
首先要设计关系图,关系图既可以通过上一步骤的数据模型生成,也可以通过手动添加表及表连接生成,关系图是模型的骨骼架构,表关系反映业务的逻辑,表的关系创建支持自动多表联合查询。为了让系统自动识别表关系的基数,可以先根据表自动创建数据转换程序并将在装载了数据之后,再创建表关系。
然后需要设计表的结构,比如在DWD数据模型,您需要将层级表进行扁平化,或者您需要将单据的表头和明细连接成一个事实表等等,表的结构决定了数据查询的易用性及性能。
最后您需要设计表的字段及索引,字段的的清洗及转换基于您编写数据库的函数及表达式,这决定了数据查询字段级的质量和性能。
最后,根据详细的数据模型设计,生成目标表,完成数据模型的创建。
数据模型构建过程
数据模型设计包括三个阶段:
需求分析:分析用户数据分析需求及当前运营报表,确定源系统的领域范围,分析源系统对应的业务流程及对应的系统功能;
准备阶段:定义数据源,维护来源数据类型与数据仓库数据类型的映射关系;
规划和设计模型:规划模型层次,设计模型细节,创建物理表。各类数据模型的设计顺序为:ODS模型 → DWD模型 → DWS模型 → IDX模型,其中DWS模型及IDX模型根据实际项目实际情况可选。
需求分析
当前用户的数据分析以及当前运营报表的需求,将确定数据建模的数据来源及领域范围。领域范围将确定数据来源于源系统哪些模块,虽然模块的数据可能远远超出用户当前的需求,但我们建议数据建模的范围应该包含这些模块所有的业务过程对应的单据以及相关的基础档案。
假设当前项目仅对销售收入提出了相关的报表及销售多维分析,其数据仅来源于销售订单,假设业务系统的销售模块除了销售订单,还有销售发货单、销售发票及销售出库等单据,那么我们需要把销售发货单、销售发票及销售出库单加入到模型中吗?是的,我们建议您这么做。我们需要记住一点,我们创建的数据模型不仅仅是满足当前的报表查询需求,也需要满足业务领域内未来报表的需求。
在需求分析阶段,我们不需要去深入了解分析和报表的字段级细节,因为数据模型的关系图和表根据源系统的表数据结构及数据仓库的标准建设方法驱动创建,这个与报表没有直接关系。只有在维护表的字段目标和来源映射逻辑时才需要去考虑业务问题和报表需求。
定义数据源
需求分析完成后,您需要定义来源数据源以及数据仓库连接的数据源。关于如何定义数据源,请参考《云智算数据源管理用户指南》。
维护数据建模基础
如果你系统启用了数据资产模块,那你需要维护业务域的基础信息,以方便通过业务域查询数据资产。
跟着您需要检查您所定义的数据源和数据仓库是否已维护了数据类型的映射,如果没有,则需维护数据源的数据类型与数据仓库数据类型的数据映射。
云智算采用自动化的方式来设计数据仓库的表,在设计ODS模型时,ODS层的表将根据数据源的数据结构及数据类型自动创建,所以需要预先维护数据源的数据类型与ODS层表的数据类型的映射关系,以在创建ODS层的表时,使用映射关系对应来设计表字段的数据类型,这样您就无需花费时间去修改ODS表字段的数据类型。
如何维护业务域、数据类型及数据类型映射,将在第2章描述。
规划及设计数据模型
由于云智算的数据仓库模型的设计基于数据结构驱动,所以创建表通过拖拉拽或者引入的方式即可迅速完成,并且系统为数据模型设计功能同时包含数据勘探功能,所以数据模型的规划及设计可以同步进行。
数据仓库是否需要Saging、DWS、IDX或ADS等层?如果有多个业务系统,建一个整合的ODS模型还是为每一个业务系统建一个ODS模型?这些都是模型规划要解决的问题,由于数据驱动建设模型,这些规划的问题在未能明确回答时,您可以继续设计数据模型,随着模型的深入设计,上述的规划答案也随之浮出水面。
云智算的数据模型的设计由源系统的数据结构的元数据驱动,所以创建非常快,根据我们的经验,一个包含1百多个源表(业务数据相关的表)的ODS模型、DWD和DWS模型,通过上层数据的驱动在一周内就可以创建完成。
ODS模型的规划及设计
ODS模型将源系统的表添加到模型,并根据基础档案及业务单据划分维表及事实表关系图,建立关系图表与表的表连接,ODS层的表及字段一般不需要转换。
DWD模型的规划及设计
DWD模型在ODS模型的基础上,增加日期、时段等时间维表,使用表扁平化、表行列、表列转行、派生表、连接表、合并表、事实快照表等功能对ODS的表进行转换,使用数据库自带的函数对字段进行清洗及转换,以完成DWD模型星座关系图的设计。
DWS模型的规划及设计
DWS模型基于DWD创建,其从DWD模型选择需要进行聚合的事实表,通过聚合关系图,选择聚合的维度就可以快速创建DWS模型。
IDX模型的规则及设计
如果你的指标计算复杂或需要对指标值进行预警时(比如通过邮件或IM发送告警内容给相关管理用户),就需要在数据仓库模型增加IDX模型,以在使用指标值进行分析时直接从数据仓库读取数据。从基础数据IDX模型的设计也非常简单,云智算将所有的组织指标抽象为三类:业务指标、财务报表(三大财务报表,资产负债表、利润表及现金流流量表)以及财务指标,根据指标表的创建向导可以快速创建IDX模型。
STG模型的规划及设计
对于STG模型,则需要看数据清洗转换的复杂程度而来决定是否要这一层。比如,一个复杂的公交车数据系统,因为要将其上下车的记录合并为一个行程(即一条记录包含上车和下车的字段及行程的时间和里程信息),就需要创建STG模型层,以对原表进行上车、下车的分类以及对齐车次等流程处理,以最终生成一个包含行程字段的passenger_trip表,这个表就可以通过非常简单的转换过程输送到DWD层。
ADS模型的规划及设计
如果您的BI系统不具备支持多星座语义查询的能力,你就要使用ADS模型来为查询需求创建大宽表,ADS模型的使用和STG模型类似,比如因为报表需要将销售数据和财务相关的事实表以及相关的维表合并到一起创建满足报表查询的大宽表。
每一层的数据模型设计好之后,就可以将设计的表一键生成到指定的数据仓库,然后根据模型创建数据集成的转换并创建作业运行将数据由上一层装载到当前层。在当前层的数据成功装载之后,就可以由此层驱动生成下一层的数据模型。
规划和设计数据模型将在第3章~第9章进行详细描述。
ODS模型、STG模型、DWD模型、DWS模型及ADS模型的表都可以自动创建数据集成的转换,而IDX模型则需要联合指标的定义元数据才能一起自动创建数据集成的转换。关于如何定义指标,则请参见《云智算指标管理用户指南》,关于如何根据数据模型或指标自动创建转换,请参见《云智算数据集成用户指南》。
谁是数据模型的设计者
数据模型的设计者应当是数据仓库/商业智能项目的成员之一,可以是数据库管理员、源系统实施顾问、开发人员或者项目经理。数据模型模型的设计团队可以是一个人,也可以多个人,根据企业BI项目的规模来决定。
数据模型的设计员(或设计团队)具备下个所列的技能或知识将大有脾益。
| 技能和知识 | 说明 |
|---|---|
| 业务知识和源系统 | 数据模型在于更好理解业务并抽象业务为实体表及其之间的关系。实际上,ODS模型就是反映了源系统的实体关系。所以您需要熟悉相关的业务知识及源系统,将有助于您设计的数据模型正确反映反映业务和源系统。 |
| 数据库知识 | 您需要数据库管理系统(或者数据仓库管理系统)、数据库连接方式、逻辑数据库结构,以及掌握数据库的表、字段、数据类型等知识。 |
| SQL语句编写技能 | 基本SQL语句编写经验,以及数据库的函数应用经验。 |
创建第一个数据仓库
概述
在理解DSCM方法论的基本原理及数据建模的基本知识之后,本章将以一个景区服务销售的实际场景为例,从业务系统的原始表出发,引导您完成以下完整流程:
创建逻辑ODS模型,理解原始表,并为DWD模型创建来源;
创建DWD模型,完成表的转换、清洗和维度,并为DWS模型创建来源;
创建DWS模型,生成聚合表以加速查询
通过本章的学习,您将:
理解ODS→DWD→DWS的完整建模链路
掌握从数据源添加表、建立表连接的基本操作;
体验“设计即开发”——模型设计完成后,数据集成的转换程序及数据资产即自动生成,无需编写任何代码
本章所有操作均使用默认设置,无需额外配置,全程约15分钟即可完成。
示例场景
某景区销售系统的SQL Server数据库包括以下的业务表(共12个表):
departments(部门表,自连接结构)
employees(职员表)
provinces(省份表)
cities(城市表)
age_groups(年龄段表)
customers(客户表)
serivce_classes(服务分类表)
serices(服务表)
sale_orders(销售订单表)
sale_order_items(销售订单表体表)
reservations(销售预定表)
reservation_items(销售预定表体表)
业务用户需要按日期、月份、客户及服务等维度分析销售及预定业务。
现在需要将业务库的业务数据抽取转换加载到数据仓库,数据仓库使用PostgreSQL数据库,数据仓库的数据库sales_dw及架构dwd、dws已创建。
您需要通过系统完成以下工作:
将业务库所有表通过逻辑模型网贴源到ODS层;
构建DWD层,包括如下的表转换以及字段转换:
创建日期、月份等相关维表;
将部门表扁平化;
将销售订单、销售预定各自连接为一个事实表;
在销售订单、销售预定单各自增加一个表示金额的字段。
构建DWS层,根据维度粒度逐层构建聚合表,提升查询速度。
上述全部操作在10分钟内完成。
创建数据仓库
创建示例场景的数据仓库需要如下步骤:
创建业务库的数据库连接,创建数据仓库的数据库连接;
创建建ODS模型;
创建DWD模型;
创建DWS模型。
创建数据库连接非常简单,直接在系统的数据源管理模块新增相应的数据库连接即可。创建业务库的数据连接,命名为“Sales”,创建数据仓库的数据库连接,命名为“sales_dw”,所用时间不到1分钟,本章不作详细描述,关于数据源管理的操作详情请参见《云智算数据源管理用户指南.docx》。
我们下面具体描述如何创建ODS模型、DWD模型及DWS模型。
创建逻辑ODS模型
根据下面的流程我们一步步创建逻辑ODS模型:
在系统主界面的ODS模型列表,新建ODS模型,命名为“景区销售ODS模型”,保留“逻辑模型”的勾选状态,数据库连接选择“sales_dw”;
在ODS模型的编辑界面,单击模型上方的工具栏按钮【来源设置】,新增来源并绑定数据数据连接“Sales”;
在ODS模型的编辑界面分别创建5个关系图、添加表以及建立连接:
“职员”维表关系图
在右边关系窗格,单击关系图的【新增】按钮新增维表关系图“职员”;
为职员维表关系图添加departments及employees两个表;
按下鼠标左键从表departments的字段department_id拖向employees表的字段department_id,创建连接。
“客户”维表关系图
在右边关系窗格,单击关系图的【新增】按钮新增维表关系图“客户”;
为客户维表关系图添加provinces、cities、age_groups、及customers等四个表;
按下鼠标左键拖动分别创建provinces和cities的表连接、cities和customers的表连接、age_groups和customers的表连接;
双击age_groups和customers的表连接,将缺省的表连接修改为:
customers.age between age_groups.age_min AND age_groups.age_max
“服务”维表关系图
在右边关系窗格,单击关系图的【新增】按钮新增维表关系图“服务”;
为职员维表关系图添加serivce_classes及serices两个表;
按下鼠标左键分别创建serivce_classes和serices的表连接。
“销售订单”事实表关系图
在右边关系窗格,单击关系图的【新增】按钮新增维表关系图“销售订单”;
为销售订单维表关系图添加sale_orders、sale_order_items、employees、customers及serices等五个表;
按下鼠标左键拖动分别创建上述各个表的连接。
“销售预定”事实表关系图
在右边关系窗格,单击关系图的【新增】按钮新增维表关系图“销售预定”;
为销售订单维表关系图添加reservations、reservation_items、employees、customers及serices等五个表;
按下鼠标左键拖动分别创建上述各个表的连接。。
在ODS模型的编辑界面上面单击【保存】按钮保存ODS模型。
注:由于创建的ODS模型为逻辑模型,所以不需要创建物理表,也不需要运行作业来装载数据。
完成上述步骤后,您的ODS模型(当前显示销售订单关系图)应如下所示:
说明:模型右边是刚刚创建的5个关系图的列表,中间画布是关系图(可以通过右边关系图切换显示),左边是添加到模型的表。
创建DWD模型
根据下面的流程我们一步步创建逻辑DWD模型:
在系统主界面的DWD模型列表,新建DWD模型,命名为“景区销售DWD模型”,数据库连接选择“sales_dw”;
在DWD模型的编辑界面,单击模型上方的工具栏按钮【来源设置】,新增来源并绑定来源为“景区ODS模型”;
单击模型工具栏上方的【参照ODS模型】按钮,在弹出的向导式对话框选择所有的关系图和表来自动生成DWD模型(供应链模式快速生成);
单击模型工具栏上方的【智能工具】按钮,选择“创建日期表及关系图”创建日期维表关系图及相关表;
单击职员维表关系图,选择单击模型工具栏上方的【层级表扁平化】按钮,根据向导式对话框提示选择或输入设置项,完成配置后系统将自动创建扁平化的部门表;
单击销售订单事实表关系图,选择单击模型工具栏上方的【连接表】按钮,根据向导式对话框提示选择或输入设置项,完成配置后系统将自动将sale_orders及sale_order_items两个表连接为一个事实表sale_orders;
单击销售预定事实表关系图,选择单击模型工具栏上方的【连接表】按钮,根据向导式对话框提示选择或输入设置项,完成配置后系统将自动将reservations及reservation_items两个表连接为一个事实表reservations;
双击刚刚连接后的sale_orders表,打开表属性对话框,选择“字段”页签,单击【新增】按钮,增加字段“amount”,数据类型为decimal,来源表达式为:[sale_order_lines].[guests] * [sale_order_lines].[days] * [services].[price];
双击刚刚连接后的sreservations表,打开表属性对话框,选择“字段”页签,单击【新增】按钮,增加字段“amount”,数据类型为decimal,来源表达式为:[reservation_lines].[reservation_days] * [reservation_lines].[reservation_guests] * [services].[price];
双击连接后的sale_orders表,打开表属性对话框,选择“字段”页签,编辑字段guests、days及amount,勾选“数值汇总字段”选项;
双击连接后的sreservations表,打开表属性对话框,选择“字段”页签,编辑字段guests、days及amount,勾选“数值汇总字段”选项;
创建DWS模型
小结与后续指引
数据标准
建模基础
概述
如果你要创建模型的数量众多需要分门别类,则需要创建模型的文件夹,系统支持为每类模型创建不同的文件夹。
在数据建模之前,您还需要维护业务领域、以及数据仓库的数据类型,以及数据仓库和数据源的数据类型映射。
维护业务领域的资料是为了对数据资产进行业务领域分类。
数据类型则是为创建表字段时提供数据类型的选择。数据类型映射是指数据仓库的数据库类型与业务系统的数据库类型不同时预先做好映射,以让系统自动根据源表生成目标表时为目标表设置数据类型。
为模型创建文件夹分类
由于ODS模型、DWD模型、DWS模型及IDX模型都包含维护文件夹的功能,其功能及操作界面完全相同。所以我们下面以ODS模型为例描述如何为模型创建分类文件夹。如下图,在每类模型的列表上面的工具最左边的按钮就是维护模型的文件夹。
新增文件夹
在云智算主程序,单击数据建模模块,并单击任一个数据模型菜单,在弹出的模型列表的上方的工具栏,单击“文件夹”按钮,弹出文件夹下接菜单,如下图。
单击“新增文件夹”菜单,弹出新增文件夹对话框,如下图。在对话框输入文件夹名称及所属的父文件夹,点击确定即完成新增文件夹。

修改文件夹属性
在云智算主程序,单击数据建模模块,并单击任一个数据模型菜单,在弹出的模型列表里选中文件夹,并在上方的工具栏里单击“文件夹”按钮,弹出文件夹下拉菜单,单击“文件夹属性”菜单,弹出文件夹属性对话框,在对话框修改文件夹名称及所属的父文件夹,点击确定即完成修改文件夹。
删除文件夹
在云智算主程序,单击数据建模模块,并单击任一个数据模型菜单,在弹出的模型列表里选中文件夹,并在上方的工具栏里单击“文件夹”按钮,弹出文件夹下接菜单,如下图。单击“删除文件夹“菜单,选中的文件夹将被删除。
请注意,如果文件夹已包含子文件夹或者数据模型,文件夹不能被删除。
维护业务域
数据资产需要对表和字段进行业务领域的分类,所以需要维护业务域的资料,以在维护表时提供业务域的选择。在系统的主程序界面,点击 数据治理 子系统,依次点击模块菜单 数据建模 >建模基础 > 业务领域,打开了业务领域列表。业务领域表上方有维护业务领域的工具栏,可新增、修改以及删除业务领域。
业务领域表上方有维护业务领域的工具栏,可新增、修改以及删除业务领域。
在此维护的业务领域,将在数据建模维护表的属性“业务领域”时可选择已维护的业务领域,如下图。

在数据资产模块的资产看板、资产查询、血缘查询以及影响分析都可以按照选择的业务领域来查询。
以资产查询为例,可以选择业务领域来查询数据资产,如下图。
维护数据类型
在进行数据建模之前需要检查数据仓库的数据类型是否已维护。在系统的主程序界面,点击 数据治理 子系统,依次点击模块菜单 数据建模 >建模基础 > 数据类型,打开了数据类型列表。
每种数据库类型都包含了其自身标准的数据类型。我们不建议您在数据仓库中使用用户自定义的数据类型,因为其会增加更多的维护及沟通成本。但当源系统的数据库具有自定义的数据类型时,为了从源数据库添加表时自动转换为目标库的数据类型,您需要在此维护用户自定义的数据类型。
您可以点击【添加行】或【插入行】按钮增加数据类型,完成信息输入后,需要点击【保存】按钮来保存操作。
您可以直接在列表上修改数据类型的属性,也可以删除数据类型,以及上移或下移数据类型的位置。请记住,上述操作都需要点击【保存】进行保存才能生效。
数据类型的属性描述如下表。
| 属性 | 描述 |
|---|---|
| 数据类型 | 系统已包含了数据库的标准数据库类型,您也可以增加用户自定义的类型。 |
| 分类 | 系统将数据类型分为:字符串、日期、数字及其它等种分类,分类的意义在于数据建模时对字段的值进行勘探,“其它”分类的字段不能进行列值勘探,并且在设置抽取过滤时,也只能选择字符串、日期及数字类型的字段进行过滤。 |
| 设置长度 | 选择了设置长度的数据类型,在设计表字段时必须为该字段设置长度,比如char、numeric等数据类型 |
| 设置精度 | 选择了设置精度的数据类型,在设计表字段时必须为该字段设置精度,比如SQL Server的decimal及numeric两个数字类型就要设置精度。 |
维护数据类型映射
如果不是同一个类型,需要检查系统是否已维护了两个数据库的数据类型映射。上述信息都维护好后,当从源系统添加表时,就自动生成目标表的字段的数据类型,以提高建表效率。如果源系统和数据仓库都使用同一种数据库类型,您可以不维护数据类型映射。
在系统的主程序界面,点击 数据治理 子系统,依次点击模块菜单 数据建模 > 建模基础 > 数据类型映射,打开列表。
为什么要维护两个数据库的数据类型映射呢?假设业务系统的数据源是SQL Server,数据仓库是PostgreSQL。对于整数型,SQL Server具有int类型,而PostgreSQL有int、int4及int8等多种整数的数据类型,您可能需要统一以int4作为数据仓库设计的整数类型,所以需要在此维护数据类型的映射,以在通过源系统的表自动创建数据仓库的表字段时将int类型自动设置为int4类型。
在列表上方右边两个下拉框,可以切换来源数据库类型及目标数据库类型,如下图:

来源数据库类型包括云智算支持各种数据源:
各种云智算已支持的数据库,包括关系型和非关系型数据库;
DataFile,数据文件;
WebApplication,Web应用。
目标数据库类型则仅包括关系型数据库,因为目标数据库就是数据仓库,需要支持ANSI SQL92标准,以用于数据服务及报表分析。
不管切换来源数据库类型还是切换目标数据库类型,都根据所选的来源及目标内容,重新刷新数据类型映射列表。
列表各列描述如下表。
| 分类 | 列名 | 功能描述 |
|---|---|---|
| 来源 | 数据库类型 | 来源数据库,由列表上方的来源数据库类型决定,不能修改。 (来源数据库类型可以数据库,也可以是数据文件或Web应用) |
| 数据类型 | 如果来源为数据库,则为来源数据库支持的数据类型,如果为数据文件,则为文件支持的字符串、日期、整数及小数等5种,如果为Web应用,则为Java支持的数据类型。 | |
| 目标 | 数据库类型 | 目标数据库,由列表上方的来源数据库类型决定,不能修改。 |
| 数据类型 | 目标数据库的数据类型 | |
| 表达式数据类型转换模板 | ||
增加新的数据类型映射
假设您现在需要维护源为SQL Server目标为Oralce的数据类型的映射关系。您首先在数据类型映射的列表的工具栏右边,在来源下拉框选择“SQLServer”,在目标选择“Oracle”(如果已存在两个数据库的数据类型映射,则列表将显示已有的映射)。
添加数据类型映射流程如下:
在工具栏里点击“添加行”或“插入行”,则在列表里增加一行新的数据映射,如下图:
将光标移到来源/数据类型单元格,在单元格的右侧将显示悬浮按钮,如下图:
点击悬浮按钮,弹出来源数据库类型的数据类型(在元数据库预置),如下图:选择数据类型并点击确定按钮返回。
将光标移目标/数据类型单元格,在单元格的右侧将显示悬浮按钮,如下图:
点击悬浮按钮,弹出目标数据库类型的数据类型(在元数据库预置),如下图:选择数据类型并点击确定按钮返回。
将光标移动到BI数据类型下方,选择对应的数据类型,BI的数据类型即业务建模时业务对象的数据类型。如下图:如果目标的数据类型是浮点数据,您需要勾选“设置长度”和“设置精度”,如果是文本类型,则仅需勾选设置长度。只有在此勾选了可设置长度和设置精度,在数据模型的字段属性对话框才能编辑字段的长度和精度值。
重复上述1~9步骤,完成两个数据库数据库所有数据类型映射的维护。
在维护新记录时,您可以随时点击工具栏的“保存“按钮保存您维护的记录,只有保存了的记录才能生效。
修改数据类型映射
您可以直接在列表上修改数据类型映射的属性,然后点击保存按钮保存。请注意,只有保存后修改才生效。
删除数据映射
在列表里选中一行记录,点击“删除行”按钮,可以删除记录。请注意,只有保存后删除才生效。
调整记录的位置
在列表里选中一行记录,点击“上移”或“下移”按钮,可以调整记录的位置。请注意,只有保存后位置调整才能生效。
如果没有维护数据映射
假设ODS模型的数据仓库选择SQL Server,而源数据库是达梦,如果没有这两个数据库的数据类型,那么在维护ODS模型的来源时,将提示两个数据库未做匹配关系,不能新增数据库为达梦的来源数据源,如下图。

虽然维护了来源数据库与目标数据库的数据类型映射关系,但存在某些数据类型没有维护,并且没有维护的数据类型的名称在目标数据库没有相同的对应数据类型名称,则从源数据库添加表自动生成目标表时,该数据类型的字段列都显示为橙色,并在这段列表的下方右边提示没有维护对应的数据类型显示为橙色,如下图。
当表字段包含目标数据库不存在的数据类型时,您要么在表字段修改数据类型,要么在数据类型映射添加这些映射记录。
建模核心功能
概述
模数据模型包括ODS、STG、DWD、DWS、IDX及ADS等模型,这些模型建模时虽然的目标不一样,但建模的主要内容都是构建模型、设计关系图及表及设计表字段等,因此我们把各种模型的上述功能集中在本章描述。
在对数据模型、关系图、表及字段等进入详细的讨论之前,首先通过快速指引了解如何构建一个数据模型。
数据勘探
在传统数的数据仓库设计解决方案,数据据勘和数据建模系统一般都是相互独立的系统。数据勘探作为数据建模前的独立阶段,用户需先完成勘探、记录结果,再切换到数据建模系统进行设计,过程割裂且低效。
云智算将数据勘探能力深度嵌入建模工作区,使其成为贯穿设计全过程的即时辅助工具。您在维护关系图、定义表结构或编写字段转换表达式时,可随时对任意表或字段调用勘探功能,无需切换界面或中断思路。勘探结果即时呈现,帮助您快速验证设计假设、理解数据分布、发现异常值,从而在建模过程中持续优化设计决策。这种“边设计、边勘探、边验证”的闭环模式,是云智算大幅提升建模效率的核心原因之一。
云系统为关系图、表、记录及字段等五个维度都提供了快速的勘探智能工具。
下面分别详细描述系统提供的数据勘探功能。
表关系检测
关系图里,选中表连接,右键弹出的下拉菜单中包含“检测连接”菜单,如下图。

单击菜单并弹出检测连接对话框,对话框自动生成了检测连接的查询SQL。

各条SQL的作用描述如下:
点击【运行】,系统根据运行给出运行果及连接判断,如果勾选了“根据运行结果修改连接属性”,系统将修改连接的属性。
运行结果描述及判断逻辑如下。
整表数据勘探
整表数据采样
如果您需要通过显示表值来更好理解表的字段时,可以查看表值以及来源表值(只采样数据200条)。在关系图中选中表并右健弹出下拉菜单,如下图。
查看表值的对话框如下图。
行数统计
在查看表值的对话框,点击按钮【刷新总记录数:】,将查询并显示表的总记录数。
列值统计
单个字段列值统计
上节提到的字段属性页签,其每个字段的最右边有一个【列值】操作按钮,点击该按钮,并在打开的对话框里点击【查询】按钮,对话框将显示列值的统计信息。

列值统计包括如下信息。
总记录数
空值(Null值)记录数
空值占比
最大值
最小值
字段值分布列表
批量字段Null值统计
在数据模型编辑程序的表属性对话框,在字段列表上的工具栏包含按钮【刷新空记录字段】,点击该按钮,都为Null值的记录在“都为空记录列”里将标识“是”,那我们就可以快速找出哪些在数仓不需要创建的字段。
编写SQL自由数据查询
系统提供了编写SQL自由数据查询,一般用于前述数据勘探的功能还不能满足的对表数据的勘探。系统还提供了【添加字段】及【获取SQL查询语句】协助快速编写SQL语句。编写的SQL和注释将和模型一起存储,以备后面查看
打开SQL数据查询,有两个入口。
在模型的工具栏上点击数据查询按钮,便可弹出数据查询对话框,一般用于编写跨表的复杂的SQL来查询数据。
表属性对话框的“数据查询”页签,就是数据查询功能页面,一般用于当前表的数据查询。
以模型入口为例,在工具栏上点击按钮,弹出数据查询对话框,如下图。

数据模型
系统界面
模型列表界面
在系统主界面,单击“数据建模”子系统,单击菜单 数据建模 > ODS模型,打开模型列表界面,列表上方为模型的工具按钮。
模型编辑界面
数据建模基于图形化并且易于操作,专门面向企业数据仓库建模,下图是以ODS模型为例的模型构建界面。
编辑界面区域可以分划为三部分:
上方左边为模型名称,右边为模型的工具栏。
中间部分为模型的内容区域。
右边是关系图的目录。
中间部分为关系图及其工具栏。
左边表目录及其工具栏。
下方是状态栏,左边是模型内容的统计信息,右边是最后保存时间。
模型工具栏
ODS
模型主工具栏,如下图。
工具栏按钮功能如下表
| 按钮 | 名称 | 描述 |
|---|---|---|
![]() |
来源 | 设置模型的数据来源,可以为数据库、文件或API。 |
![]() |
智能工具 | 专门为设计ODS模型的智能工具集合。 |
![]() |
字段列表 | 打开所有表的字段列表,可查看列值及编辑 |
![]() |
创建物理表 | 向ODS模型设定的数据库创建物理表。 |
![]() |
保存 | 保存模型。 |
![]() |
另存 | 另存模型。 |
![]() |
设置 | 设置模型的属性。 |
![]() |
帮助 | 打开帮助程序。 |
关系图目录
关系图及其工具栏如下图。
关系工具栏各按钮功能如下表。
| 按钮 | 名称 | 描述 |
|---|---|---|
![]() |
新增文件夹 | 新增关系图文件夹。 |
![]() |
新增关系图 | 新增关系图。 |
![]() |
属性 | 打开选中对象(文件夹或关系图)的属性对话框。 |
![]() |
删除 | 删除选中的对象(文件夹或关系图)。 |
![]() |
上移 | 上移选中的对象。 |
![]() |
下移 | 下移选中的对象。 |
![]() |
参照 | 从其它模型参照关系图到当前模型。 |

关系图画布
关系图表达了表及表的关系。
关系图画布工具栏各按钮功能如下表
| 按钮 | 名称 | 描述 |
|---|---|---|
![]() |
添加表 | 从源处添加表。 |
![]() |
新增表关系 | 新增表关系。 |
![]() |
表关系属性 | 打开选中对象(表或表关系)的属性对话框。 |
![]() |
删除 | 删除选中的对象(表或表关系)。 |
![]() |
仅显示重要字段 | 当勾选此复选框后,仅显示重要字段,其它字段不显示。 |
![]() |
显示设置 | 设置哪些内容可见,包括表名称、表注释、字段名称、字段注释及数据类型等。 |
表目录
表目录显示了模型创建的表。
表目录工具栏按钮功能如下表。
| 按钮 | 名称 | 描述 |
|---|---|---|
![]() |
新增文件夹 | 新增表文件夹。 |
![]() |
新增表 | 新增表。 |
![]() |
属性 | 打开选中对象(文件夹或表)的属性对象对话框。 |
![]() |
删除 | 删除选中对象(文件夹或表)。 |
![]() |
上移 | 上移选中对象(文件夹或表)。 |
![]() |
下移 | 下移选中对象(文件夹或表)。 |
状态栏
状态栏显示的内容包括:
当前模型的关系图数量、表数量;
当前关系图包含的表及表关系数量;
模型保存的最新时间。
你可以通过缩放条缩放关系图的画布。
创建模型
系统包括的各种数据模型,其新增模型的步骤都完全相同。在此以ODS模为例,描述新增的过程。
在系统的主程序界面,点击 数据治理 子系统,依次点击模块菜单 数据建模 > ODS模型,打开了ODS模型列表。
在数据模型列表上方工具栏,点击【新增】按钮,弹出在新增数据模型对话框,如下图。
在对话框输入或选择信息。模型名称:模型名称可以按组织名称或业务系统加上“ ODS 模型”后缀来命名,这取决于组织的命名规范。
文件夹:选择旋转模型的文件夹,也可放在根文件夹。
描述:输入您对该模型的描述信息,可以简要描述模型包括的业务域;
数据库连接:该连接是指数据模型里的表将要存储的目标数据仓库的连接。
点击“确定”按钮,系统完成新增数据模型,并打开数据模型编辑程序。
编辑模型
设计模型
新增数据模型之后,将打开数据模型的设计页签;或者在数据模型列表,选中一个数据模型,点击列表上方工具栏的【编辑】按钮,也可以打开数据模型的设计页签。
虽然数据模型的设计目标就是设计表及字段,但由于ODS、STG、DWD、DWS、IDX以及DWS等模型的来源和设计目标都有很大的不同,其设计方法也有很大的不同。
对于ODS模型,其来源都为数据源,数据源没有关系图,只有表或文件或API,所以要创建一个ODS模型,需要完成创建维表和事实表关系图、从来源添加表、设置表连接、设置增量抽取相关的字段的索引及创建表等等的设计工作。在创建ODS模型阶段,主要的目标是通过实体关系图理解表的关系,并且将相关的表从业务系统抽取到数据仓库。
STG模型的表都来源于ODS模型,主要处理某个表或某组表及其字段的清洗转换,其关键是多步骤的处理,STG的关系图可能只是一个表,在此模型建模的重点的表的多步骤的转换,而不是实体的关系。
DWD模型面向数据应用,其是标准的雪花多星座关系图。由于DWD模型来源于ODS模型或STG模型,其可以直接参照这些模型直接生成所有的关系图。在DWD模型,主要是处理表的转换以及字段的清洗转换,并且使用维度模型的命名规范对维表和事实表进行命名,还有在DWD模型要创建表的适合的索引,以提升数据查询性能。
DWS模型都来源于DWD的事实表,因为聚合只有对事实表才有意义,DWS模型仅需逐层创建需要聚合的事实表的聚合表,其创建关系图是事实聚合关系图。
IDX模型也仅创建指标的维表及事实表,其也相对简单,IDX模型的来源为DWD模型或DWS模型,以上述各模型不同,IDX模型的来源仅提供元数据来协助设计指标事实表,IDX模型设计的表不自动创建数据集成的转换程序。指标具体的公式设置以及根据指标公式创建数据集成的转换程序,请参考《云智算指标计算用户指南.docx》。
ADS模型来源于DWD及DWS模型,主要为没有强大语义层的BI工具提供大宽表。通过连接表、合并表、派生表等生成的ADS的大宽表,可以自动创建数据集成的转换程序。
对于设计模型的来源、关系图、表及字段等公共对象的构建,我们将在在本章统一进行描述,而对各类模型的具体创建过程,请参考后面对各类模型构建的描述。
保存模型
单击模型主工具栏上“保存”按钮,系统将先检查再保存,如下图:
如果关系图存在两个路径或有环路,则提示关系图存不连通或环路的错误;如果两表之间存在多个连接,但连接类型或基数不一致,系统也会提示相应错误。
创建物理表
创建了模型的表之后,就可以模型数据库连接相应的数据库创建物理表。

单击模型主工具栏上“创建物理表”按钮,弹出创建表对话框,如下图。在生成表对话框选择需要创建的表,点击“生成表”按钮,将在新增模型时选择的数据库连接对应的数据库生成表。
修改模型属性
创建数据模型之后,您可以修改数据模型的属性。
单击任意一种数据模型列表工具栏上的“属性”按钮,在打开的数据模型属性窗口维护名称、描述及数据连接等属性。
删除模型
创建数据模型后,您可以删除数据模型。
单击任意一种数据模型列表上方工具栏上的“删除”按钮,则可删除数据模型。
来源
来源是什么?
数据建模的第一步就要维护当前数据模型的来源。
在第一章,我们阐述了云智算的数据仓库建模基于云智算首创的数据供应链建模(DSCM)方法论,即所有的数据的元数据以数据本身都有来源(除了日期或某些简单的维度分类表在DWD层由系统创建外)。所以,来源是不仅仅是指数据的来源,更是指元数据的来源。
ODS模型的来源于系统定义的数据源,包括数据库链接、数据文件以及Web应用(第三方系统的API数据);
STG模型的来源于ODS模型,但由于STG是对数据的复杂处理,其流程可能是多个节点的,所以STG模型本身也是来源;
DWD模型的来源于ODS模型和STG模型,有些不需要经多个清洗转换步骤处理的直接从ODS来,否则经过STG模型多步骤处理后再流转到DWD模型;DWD层也可以直接来源于数据源,但我们强烈建议您创建ODS模型;
DWS模型来源于DWD模型,由于DWS的聚合表逐表创建,DWS的聚合表也来源于DWS模型本身;
IDX模型的来源于DWD及DWS模型,但指标的来源元数据及计算公式需要在指标计算模块来定义,具体的指标定义请参考《云智算指标计算模用户指南V6.0》。
ADS模型来源于DWD及DWS模型,当前端的数据应用没有强大的语义层支撑时,才需要ADS模型。
一个模型可以有多个来源,数据模型也可以作为数据模型本身的来源。
设置了来源之后,如果你的来源是数据源,那你就可以通过数据源添加表;如果来源是数据模型,除了添加表之外,还可以参照引入整个模型以快速创建关系图和表。
来源的属性包括两部分:来源的常规属性以及限制来源的数据类型。
常规属性设置模型的来源,来源类型包括两类:数据源以及数据模型,数据源包括数据库连接、数据文件以及Web应用,数据源的设置请参考《云智算数据源管理用户指南.docx》,数据模型则包括从ODS至ADS等6类数据模型
来源根据数据源个数又可分为两类:单一来源,及多组织同类系统不同数据源。单一来源,就是指来源只有一个,要么是一个数据源,要么是一个数据模型。什么是多组织同类系统不同数据源呢?比如某些集团组织的公司可能部署了多套相同业务系统,其存在多个数据结构相同但数据源不同的业务系统数据库,或者某些SaaS系统为每个租户部署了数据结构相同但位置不同的数据库,上述我们称之多组织同类系统不同数据源。
设置多组织同类系统不同数据源作为一个来源,其目标就是创建一套数据模型、一个数据仓库、一套转换(自动创建),这样就可以大幅降低创建模型及维护模型的成本。要实施上述目标,我们还需要在数据仓库后台所有的表都加上组织标识字段来区分各组织的数据,并且在数据集成的作业属性里设置对应的组织标识命名参数,通过命名参数就可以循环执行转换程序实现多个组织的数据集成。对于多组织同类系统不同数据源这类来源,您可以指定使用某一个数据源作为设计数据模型的来源。
设置的来源的数据类型限制的目标是在维护ODS模型根据数据源的元数据创建目标表时,系统将自动拦截数据类型限制的字段,从而减少删除表字段的工作。
新增来源
在ODS模型编辑界面的模型工具栏上单击按钮,弹出来源设置列表框,列表的上方为操作工具栏,如下图。

单击列表上方的【新增】按钮,弹出新增来源对象的对话框,如下图。
维护常规属性
来源的属性如下描述。
来源类型
数据源
数据模型
来源对象类型:
当来源为数据源时,对象类型为数据库连接、数据文件以及Web应用。
当来源为数据模型时,对象类型为从ODS至ADS的各类数据模型。
来源的数量分类:
单一来源
来源对象,选择具体的数据源或数据模型。
当来源类型为数据库连接时,选择缺省的架构,以方便添加表。
以及多组织同类系统不同数据源
维护所有组织与数据源的对应关系。
维护组织标识对应作业的命名参数,该参数也会传递到数据集的转换,在转换运行时参数将转化为组织标识,插入到目标表的相应字段。
维护设计数据源,设计模型添加表及勘探数据时使用该数据源;
维护设计数据源的缺省架构,选择缺省的架构,以方便添加表。
根据来源属性的描述维护来源的常规属性。
由于多组织同类系统不同数据源比较复杂,下举例描述。
假设我们维护了以下的多多组织同类系统不同数据源,如下图。

多组织同类系统不同数据源的属性包括:
组织标识与其对应数据源的映射列表,可以通过列表右边的按钮来维护。
设置组织标识对应作业命名参数的名称,即使还没创建作业,也可以先输入值;
设置设计数据源及缺省来源架构,这两个属性将用于在创建关系图时添加表的数据源,在由数据模型自动生成转换时,也用于表输入的数据源。
假设如上述在维护多组织同类系统不同数据源时设置了组织标识对应作业命名参数的名称为“tenant_id”,那么在数据集成维护作业的参数时,就需要维护名称相同名称的参数以及值,并且勾选循环传递至任务,如下图。
当执行作业时,作业根据命名参数循环传递至转换,系统将根据转换参照的数据模型的来源设置找到tenant_id对应的数据源,并使用此数据源作为转换输入的数据源,从而实现作业循环各个组织将数据从源系统抽取到数据仓库。
关于作业的详细设置,请参考《云智算数据集成用户指南.docx》。
维护数据类型限制
当需要从数据源添加时自动拦截不需要的数据类型的字段,可以在维护来源时维护数据源的数据类型限制。
数据类型限制的维护界面如下图。

通过【添加】或【删除】按钮直接输入需要限制的数据类型进行维护。
维护来源
在来源列表里选择一条来源,并单击“属性”按钮,可打开来源设置对话框,在对话框修改来源的属性,并单击“确定”保存修改。
删除来源
在来源列表里选择一条来源,并单击“删除”按钮,系统弹出警告询问框,点击“是”则可删除来源。
如果已根据将要删除的来源创建了表,系统将弹出以下警告框。
点击“是”按钮将删除来源。对于要删除已创建了表的来源,删除来源将删除根据来源创建的所有表及表连接。
关系图
关系图是什么?
关系图是表示表以及表之间连接关系的图,关系图包括表和连接关系。
关系图的作用之一是让您通过表关系更好地理解业务,您只有理解业务才能确认您的设计是否正确;关系图的另外一个作用是自动推导数据集成转换程序的表输入SQL语句。比如事实表的关系图,当DWD表需要将ODS的两个表或多个表连接为一个表时,关系图将推导出表输入SQL语句的FROM子句及ON子句。比如聚合表关系图,可以根据表的来源关系推导出FROM子句(聚合表关系图的每个表聚合事实表都来源于一个事实表,或者基础事实表或上一层聚合事实表)。
事实表和维表是来自于数据仓库的术语,实际上也可以用于普通关系型数据库的表。事实表是存储业务过程中事件的绩效度量结果,对应于业务系统的单据表或者快照表,比如ERP系统的订单表、库存余额表等。维表是事实表有关的上下文环境,对应业务系统的基础档案表,用来描述“谁、什么、哪里、何时、原因”等等,是描述事件的具体信息,比如客户表、商品表等。
在ODS层、DWD层及IDX层,按照关键表是事实表还是维表,关系图可以分为维表关系图及事实表关系图两类。STG层和ADS层也可以按此划分,虽然这两层的关系图往往只是一个处理后表。对于DWS层,云智算还创建了一种新的关系图:聚合关系图,这个关系图描述了在一个明细事实表上聚合的各个聚合表的先后关系。
下面我们详细描述上述的三种关系图。
维表关系图定义
维表关系图是将一组维表连接在一起而组成的关系图,例如可以将客户、年龄段、城市及省份等表等连接在一起组成一个客户维表关系图。
下图是示例ODS模型的“客户”维表关系图。
表
事实表关系图定义
事实表关系图是以某一事实表(或描述某一“事实”的多个表)为中心,以星型模式结构将相关的维表连接在一起而组成的关系图。
下图是示例ODS模型的“销售事实表关系图”:
注意,由于已经构建了客户、职员及服务等维表关系图,在创建事实表关系图时,只需加入在事实表的字段相关的维表,其它维表无需加入。
聚合表关系图定义
聚合关系图构建了DWD层明细事实表与DWS模型聚合表的关系,一个明细事实表创建一个聚合表关系图,下图为DWS模型一个聚合表关系图的例子。

上述聚合表关系图各表的创建来源及详情描述如下表。
| 表 | 所属模型 | 来源表 |
|---|---|---|
| fact_sale_order | DWD | / |
| fact_sale_order_aa_01 | DWS | fact_sale_order |
| fact_sale_order_aa_02 | DWS | fact_sale_order_aa_01 |
| fact_sale_order_aa_03 | DWS | fact_sale_order_aa_01 |
聚合表的箭头指向表了将基于当前表创建哪些聚合表,这种关系也将决定了在关系模型创建业务对象的@Aggregate_Aware函数里表达式的顺序。
创建关系图
在创建ODS模型、DWD模型及IDX模型时的关系图时,建议您先创建维表关系图,再创建事实表关系图。正如运行业务时,先设置基础资料,再录入单据。本节以维表关系图为例举例描述如何创建关系图,事实表关系图和维表关系图的创建方法类似,请参考本节描述的创建方法。而聚合表关系图则与维表关系图和事实表关系图的创建方法不同,不过也十分简单,请参考后面的构建DWS模型的详细描述。
创建关系图分3大步骤,如下:
定义关系图名称;
为关系图添加(处理)表;
定义表连接。
下面我们对上述的3大步骤进行详细的描述。
定义关系图名称
以示例模型的“客户维表关系图”为例,可以通过如下方法创建一个关系图:
点击“关系图列表”工具栏的“新建关系图”按钮(如果您要新建事实表关系图,则请单击“新建事实表关系图”按钮),弹出“新建关系图”对话框;在“关系图”输入框输入关系图名称“客户”;
按“确定”按钮或回车完成。
在关系图列表里的“维表关系图”文件夹下会显示您刚刚创建的维表关系图的名称,并且系统中间的“关系图”区域将出一块空的画布。
为关系图处理表
从表浏览器添加表
完成创建一个空白的维表关系图后,就可以在画布里添加表。使用表浏览器可以快速根据来源的元数据插入表。
首先,在画布空白处右键弹出下拉菜单,如下图:
系统可以根据模型已设置的来源获取元数据来创建表。
选择从数据库连接添加表时,系统根据数据库表的元数据创建表。
选择从数据文件添加表时,系统根据数据文件的列信息创建表。
选择从Web应用添加表时,系统根据API的选择字段信息创建表。
选择从来源的数据模型添加表时,系统将根据数据模型的表的元数据创建表。
在添加表对话框加入的表将出现在画布上。以从数据库连接添加客户相关表为例,在添加表对话框选择了多个表并确定后,关系图画面上将出现刚刚选择的表,如下图。
此时,在模型右边的表列表里也新增了刚刚插入到画布的表。
删除表
删除表有两种方式,一是在关系图画布里选择表后右键弹出的下拉菜单中选择“删除”菜单来删除表,二是在模型最右边的表列表中选择表后右键弹出的下拉菜单中选择“删除”菜单来删除表。
但两者的删除效果并不相同。
通过关系图画布的右键菜单删除表,只删除当前关系图对该表的引用以及该表相关的表连接;
通过表列表的右键菜单删除表,该表在当前模型里将被删除,该表在所有关系图的引用及表边接也从模型里被删除。
显示表值
如果您需要通过显示表值来更好理解表的字段时,可以查看表值以及来源表值。在关系图中选中表并右健弹出下拉菜单,如下图。
查看表值的对话框如下图。
更改表的显示
从表浏览器插入到关系图里的表缺省显示所有的列,当表的数量或者表的字段数量很多时,您可以更改表的显示方式,以方便您更好地查看关系图结构。
| 模式 | 说明 |
|---|---|
| 显示所有列 | 缺省模式 |
| 显示第一列 | 双击表头,将从“缺省”模式切换到“显示第一列”模式,这时仅显示第一列,余下的列以“…”显示。 |
| 显示任意数量列 | 将鼠标放到表下边框,这时鼠标变成双箭头形状,拖动鼠标,拖动鼠标到适当的位置 |
| 仅显示重要字段 | 根据模型设置显示字段(在数据模型对话框里设置哪些字段为重要字段,重要字段可选择:键字段、表连接字段以及可汇总数值字段。) |
再次双击表头,表的显示方式将在“显示所有列”及“显示第一列”之间切换。

以示例模型“客户维表关系图”的表“Customer”为例,各种显示模式如下:
勾选关系图工上方的“仅显示重要字段”复选框后,“Customer”表显示如下图。
定义表连接
在关系图中插入表之后,就可以在表之间创建连接。在关系图中,连接和表一样重要,因为表连接描述了表对应对象的关系。
什么是表连接?
从业务来看,表连接描述了对象之间的关系,比如客户表和订单表以1对多的关系进行关联,表示一个客户可以订购多张订单。从技术来看,表连接是一种条件,连接各不相同但又相关的表中的数据。
表连接推导出查询需要组合哪些表以及这些联接的条件,即推导出SELECT语句的FROM子句以及ON条件子句。比如在DWD模型,需要对ODS模型的销售订单主表和销售订单子表合并为一个销售订单事实表时,其表输入的SQL语句中ON子句就通过两个表的表连接自动生成。
通常在一个表的主键和另外一个表的外键之间创建表连接,但这并不是一个硬性约束,您可以在两个表之间通过任意字段链接。
一个表的一个字段,可以和另外一个表的一个字段或两个字段建立连接。一个字段和两个字段这种连接关系一般是“between and”的连接关系或者同时使用“大于等于”和“小于”,这种一个字段和两个字段的连接,比在表之间建立两个连接,更能明确表达两个表之间的联系。
必须补充说明,在ODS模型系统,只要存在实际的业务意义,表和表之间可以创建任意多个连接。
在数据模型,可以通过如下两种方式创建连接:直接定义连接属性,或者在关系图里手动描画表连接。直接定义连接属性即使用关系图上方的【添加表连接】按钮,打开表连接属性对话框,在对话框维护表连接的字段及基数等属性按确定即创建了新的表连接,表连接属性对话框具体的属性请参考后面的维护表连接的详细描述。
创建表连接
可以通过图形方式在表之间创建连接,方法是使用鼠标从一个表的一列向另外一个表的一列画一条线。
以下图“销售事实表关系图”的表连接为例,操作步骤如下:
将鼠标放在表“Sales”的字段“invoice_date”上,这时鼠标从箭头符号变为手形符号;
单击并按住鼠标左键,此时该列高亮显示,鼠标从手形符号变为铅笔符号;
将鼠标拖动到表“BDADay”的字段“day”上,目标列将高亮显示;
松开鼠标按钮,两个表之间的连接即被创建。
如果需要编辑连接表达式,则双击连接打开连接属性窗口进行编辑。
这里要提醒您,即使要创建的表连接是一个表的一个字段对应另外一个表的两个字段,您也是按照上述的操作,先在两个字段之间描画连接,然后在属性编辑窗口增加连接的字段,如果修改了字段,则在关系图的连接会反映您最终的修改。
创建表连接后,可通过 3.2.1节的表关系检测功能验证连接基数及类型是否正确。
维护表连接
双击表连接,或者选中表连接右键弹出的菜单单击“属性”菜单,打开表连接属性对话框。你可以编辑表连接的表达式并进行分析。
表连接定义属性详细描述如下表。
| 属性 | 说明 |
|---|---|
| 表1 | 连接左端的表,选定表的列在下拉列表框中列出。 |
| 表2 | 连接右侧的表,选定表的列在下拉列表框中列出。 |
| 运算符 | 定义如何连接表的运算符:
注意:当您在一个表选中一列,在另外一个表选中两列,between才出现在运算符框。 |
| 表连接类型 | 定义表1和表2的连接类型,有两种:
|
| 基数 | 定义两个表的关系,可定义两种关系:
|
| 表达式 | 表1和表2联合查询时的ON条件子句 |
说明:
表1、表2、表列以及运算符的选择,除了决定在表连接的形状以及连接哪些表及列,还自动生成连接的表达式。您可以编辑表达式,但表达式不会反作用于表、表列及运算符的选择;
生成SQL语句时,ON条件子句直接来源于表达式,与选择的列和运算符无关。
基数指明一个表中将有多少行与另一个表中的行匹配,是表连接的一个属性。表连接只能有1对多(多对1也是一样)或1对1的基数关系,系统不支持多对多的表连接关系。如果确实需要在两个多对多关系的表建立连接,那么您必须让您的数据库管理员建立一个表将多对多转化成1对多的关系。
删除表连接
在关系图选中表连接,通过关系图上方的【删除】按钮,或右键弹出下拉菜单选择删除菜单,都可以删除除表连接。
维护关系图
在创建了关系图之后,您可以随时维护关系图。维护关系图的属性及内容包括:
维护关系图的名称;
在关系图列表窗格,右键单击关系图,在上下文菜单里选择“属性”;
在弹出的属性对话框里修改关系图的名称;
单击“确定”按钮。
插入或删除表
在关系图结构窗格右键单击,在下拉菜单单击“插入表…”,后在弹出的“表浏览器”对话框选择表插入到关系图结构;
在关系图结构窗格右键单击想要删除的表,在下拉菜单单击“删除”,然后在询问提示框里单击“确定”。
维护表连接
新增表连接;
维护表连接属性;
删除表连接。
删除关系图
在关系图树状列表里,右键单击要删除的关系图,单击“删除”菜单,在弹出的询问框,单击“确定”,即可删除关系图。请注意,关系图虽然被删除,但模型的表并没有被删除。
表
在表目录树里,可以查看在数据模型里创建的表,如下图。
为表分类及排序
当模型创建的表比较多时,就需要创建表的分类,以更好查找表。比如在上面的表目录图就创建了“维表”及“事实表”两个表分类。
通过表目录上方的工具栏的等按钮,或者通过在表目录里右键弹出的关于表分类的下拉菜单,你可以快速新增表分类、修改表分类属性以及删除表分类。
可以直接将表分类或表拖动到某个位置,或者选中表分类或表后,单击表目录上方的上移及下移按钮移动表分类或表到某个位置。
表从哪里来
根据云智算的数据仓库建模方法论,绝大部分表的元数据及业务数据来源于上一层的数据源或数据模型。根据表的创建方法,表的来源可分为以下三类。
根据来源元数据创建
从数据源转换而来,比如ODS模型的表。
从上一层模型直接转换,比如DWD层大部分根据ODS转换的表;
由系统功能根据上一层或前面处理步骤创建的表经复杂的转换而创建,比如使用DWD层的扁平化表、行转列表、列转行表、派生表、连接表、合并表、事实快照表等功能创建的表。
直接在模型创建
直接使用模型上工具栏创建的新表,通过表的补充记录创建数据记录
使用DWD系统的日期和维表创建的新表,通过系统的日期和时段步骤为表创建记录。
IDX模型的指标维表和指标事实表,该模型的表可根据DWD层或DWS层的表元数据来快速创建表,但指标相关的表不根据IDX模型的表自动创建数据集成的转换程序,其业务数据的来源需要在指标计算模块来定义具体的指标
上述1~2类的表,都可在数据集成模块自动由系统创建数据集成的转换程序,但第3类的指标表的数据转换程序由指标计算模块的指标定义自动生成。指标的具体定义请参考《云智算指标计算用户指南.docx》。
表的转换
数数据治理的目标非常明确,就是更容易访问数据以及更快性能访问数据,所以数据治理的首要目标就是将数据源的表(包括数据文件及API输入)转换为数据仓库的维表和事实表。
维表的转换除如果不处理缓慢变化维,大部分的维表基本上就是直接转换过来。
事实表则需要根据其本身的属性进行不同的转换,其中最常见的转换就是将业务系统的一个包含主子表(甚至为多层)单据的表连接为一个单据表。单据的主表和子表实际上都是事实表,这两个表是快速随着时间增长,所以查询单据数据时,如果还需要关联这两个大表,就可能会存在查询性能问题,而连接成为一个表,查询性能将大幅提升。在数据治理时将单据的多层表连接为一个表,也能让关系图变为更简单的一个标准星座模型,以让业务用户更容易理解。除了常规的连接表外,事实表还有很多的转换处理,包括合并、事实快照表处理、聚合等等。
综合维表的转换和事实表的转换,如下列表描述。
| 表转换方法 | 应用举例 | 备注 |
|---|---|---|
| 直接参照 | 从上层的实体元数据直接创建,可以新增、删除来字段,也可修改来源表达式。 | 可从业务库、数据文件及API输入或数据模型参照 |
| 表扁平化 | 将自连接的具有父节点的表,比如部门表、产品分类表等。 | 系统不但支持具有ParentID字段的表,也支持按编码样式区分层级的表进行扁平化。 |
| 表行转列 | 多语言表,需要由行转为列,以形成标准的星座模型; 科目余额辅助核算维表,需要由行转列以和科目余额连接为一个整体表。 |
消除笛卡尔积影响,否则和原表关联时数值被错误放大。 |
| 表列转行 | 以月份预算值为列的预算表 | 增加维度,提高分析灵活性 |
| 派生表 | 某些包含有脏数据需要去重的表;某些维度表需从冗余设计的事实表获取。 | 去重,过滤脏数据,生成新的维表等都可以使用派生表。 |
| JSON派生表 | 某些API输入的订单表,订单体以JSON字段存在。 | 将JSON字段转为基础类型以进行数据分析。 |
| 连接表 | 单据的主表或子表(可多层)连接为一个表;产品或产品分类连接为一个表。 ADS模型时可能需将不同的事实表连接为一个表以服务查询需求。 |
将单据的主子表连接为一个单据表,是创建数据仓库以提升查询性能的最常用表转换(这不是大宽表,而是使用冗余的方法将一个确定的对象的所有属性放至一个事实表)。 |
| 合并表 | 将各种类型的入(出)库单合并成一个入(出)库单; 将不同业务系统同一种维度表(或事实表)合并至一个表 |
计算库存余额表(事实快照表)时常需要提前合并出入库表。 多系统或多账套相同业务常需合并。 |
| 维表转事实表 | 等需要计算数量时的客户表、商品表等主要维度表。 | 为维表描述的对象增加一个计数字段,其值为1。 |
| 事实快照表 | 库存余额额表、应收余额表、应付余额表及职员事实表等 | 根据业务的期初表、入表或出表,按先进先出计算余额表。 |
| 聚合表 | DWS模型基于DWS明细事实表创建的聚合表。 | 减少事实表的单号或维度进行聚合,几何级提升查询性能。 |
| 指标表 | 对于需要做预警并重点管理的固定维度的指标表 | 需要通过指标计算模块来定义公式并自动生成转换的程序。 |
上述所有的表转换,系统都提供了功能进行表转换设计,其设计元数据将自动创建数据集成的转换(指标表的指标计算的转换根据指标的公式定义生成)。
对于上表描述的表转换的详细操作及功能描述,请参考下述章节或相关用户指南。
“直接参照”表转换,请参考第5章“构建ODS模型”;
从“扁平化表”至“事实快照表”等9种表转换,请参考第7章“构建DWD模型”;
“聚合表”表转换,请参考第8章“构建DWS模型”;
而指标表的表转换,请参考第9章“构建IDX模型”以及《云智算指标计算用户指南.docx》。
维护表的常规属性
表的常规属性如下图。
表的常规属性及维护如下表描述,由于大部分的表都由上一节的表转换自动创建,表的属性也是自动创建,仅需维护少量属性。
| 属性 | 描述 | 备注 |
|---|---|---|
| 表名 | 表的名称,在同一架构内唯一 | 除了DWD、DWS、IDX及ADS等应用层。 |
| 表ID | 表的唯一标识 | (用户不可修改) |
| 架构名 | 表所属的架构名 | 当创建物理表时,系统自动返写本属性,用户不需要填写。 |
| 表类型 | 选择维表或事实表 | 对应业务系统,基础档案为维表,单据等为事实表。 |
| 来源对象类型 | 参照生成表的来源的信息 | 系统自动生成,用户不可修改 |
| 来源对象 | 参照生成表的来源的信息 | 系统自动生成,用户不可修改 |
| 来源表名 | 参照生成表的来源的信息 | 系统自动生成,用户不可修改 |
| 来源架构名 | 参照生成表的来源的信息 | 系统自动生成,用户不可修改 |
| 业务领域 | 在建模基础时维护的业务领域 | 当没有维护业务领域时,可不选择。 |
| 文件夹 | 表所属的文件夹 | 对表进行分类 |
| 生成类型 | 即上一节描述的系统的转换 | 用户不可修改 |
| 日期维表类型 | 分为年、季、月、周、日、时段及假期共7种类型 | 当由系统创建日期及时段时,该属性由系统赋值。 |
| 注释 | 表的注释 | 在创建物理表时,注释也将写到数据库 |
| 描述 | 表的详细描述 |
维护表的字段
点击表属民生对话框的“字段”页签,打开表的字段列表。
由于大部分的表都由表转换生成,所以其字段也是由系统来源自动生成。即使如此,系统依然提供丰富的功能协助维护字段属性。你可以直接在在列表上维护字段的属性,也可以打开字段的属性列表进行维护。关于字段的详细属性维护请参考3.7节关于字段的相关描述。
批量添加字段注释
因为很多业务系统的表字段命名并不规范,字段注释可以帮助团队理解表的设计。虽然根据数据库连接创建表时,系统会把源表的字段的注释会带过来,但很多的业务系统的表字段没有注释,只是系统外提供HTML或Excel的数据字典。如何将数据字典的注释批量添加到表的字段呢?
将HTMl文件或Excel文件的表字段批量添加到表字段的注释流程如下。
打开HTML文件或Excel文件,并复制字段名及注释两列,如果HTML的数据字典有很多列,你需要将整个数据字段表列复制到Excel,然后再复制字段名及注释两列;
单击按钮【根据字段粘贴注释…】,弹出对话框将刚刚复制的内容粘贴到文本框内;
点击按钮【确定】,字段注释将对应字段添加到字段的注释栏。
批量删除字段
假设您的组织使用的通用业务系统,而通用业务系统为了适配众多的行业和客户,其每个表的字段者会非常多,甚至多达几百个字段,而您的组织的业务适配只使用了几十个字段,其它字段的值都为Null值。系统经过了数年的运行,假设字段的所有值都Null,就说明这个字段没有被使用。众多的没有使用的字段,不但没有使用价值,还会增加了存储的需求以及影响表的查询性能,为此需要在进入ODS之前删除这些没有值的字段。如何快速删除这些值为Null的字体呢?
可通过3.2.3节的列值统计功能(下述的步骤1就是批量字段Null值统计),批量标识那些值都为Null的字段,然后再选择删除,其操作流程如下:
单击列表上方按钮【刷新都为空记录】,字段列表里为Null值的字段将标志为“是”,非Null值的字段将标志为“否”,使用表达多的字段不被标志,如下图;单击列表上方按钮【选择所有都为空记录字段】,所有标识为的“是”的字段都被选中;
单击列表左边按钮【删除】,所有标识为“是”的记录全部被删除。
新增和添加字段
虽然大部分情况下,根据来源创建的字段已足够,甚至还要删除一些没有值或者用于业务系统控制的字段,但有时又需要新增字段,比如以下的场景。
为多套相同系统的数据接入数据仓库,需要增加一个组织(或账套)字段;
某些情况下需要拆分时间戳字段为日期和时段,就要增加时段字段;
某些单据仅有数量字段,需要增加一个金额字段等。
单击字段列表左加的【新增】按钮,弹出新增字段对话框,如下图。

与普通的建工具不同,你可以维护表字段的来源表达式。
关于如何维护字段的详细属性,请参考本章3.7节关于字段的详细描述。
添加字段和新增字段不同。添加字段是指从来源里删除的字段再添加回来。
单击字段列表左加的【添加】按钮,弹出添加字段对话框,如下图。

来源表原已被删除的字段将出现在列表里,你选择需要的字段再添加到表里。添加的字段将出现在字段列表的最后面。
为表字段排序
表的字段一般按钮主键、维度字段(或外键)、度量字段及描述性及状态字段等顺序。但有些来源表的字段排序并不合理,或者你又新增了字段在表的末尾,这时候使用字段列表右方的【上移】及【下移】按钮可对单个字段进行排序,使用【移动到】按钮可对选中的多个字段进行排序。
维护表的键及索引
系统提供主键、唯一键及普通索引的维护,也在DWD及DWS层提供智能维护索引工具。
当您的数据库需要维护分布键、分区键(比如Hologress数据库),或者需要维护分区表时,请使用自定义建表DLL来创建。
当数据库的数据量非常大时,可以考虑在全量将数据装载后再维护键及索引,以提升数据装载的性能。系统提供这个选项的设置,如下图。

下面详细描述维护表的键及索引的界面及维护流程。
维护表的键
维护表的键如下图,系统提供包括主键和唯一键的维护。
键列表右方的工具栏提供了键的维护,键的维护对话框如下图。

表主键的维护原则:
表都应该有主键,即使对于聚合表等聚合汇总而成的表,亦建议使用自增ID作为主键。
系统在参照上一层的表创建当前表时,会将主键元数据参照过来生成主键;
系统创建主键缺省以pk_{table_name}来命名,而唯一键缺省以uk_{table_name}来命名。
维护表的索引
维护表的索引如下图。
索引列表右方的工具栏提供了索引的维护,索引的维护对话框如下图。

索引的维护原则:
在ODS层,除了从ODS层到DWD层的增量过滤字段需要创建索引外,不要创建其它索引。
DWD层、DWS、IDX及ADS层都除了向下一层提供的增量过滤字段需要创建索外,还需要事实表关联和维表关联的外键设置索引,对有可能作为过滤或聚合的维表对象字段都要考虑做索引;
系统创建索引以idx_{table_name}_XX来命名,其中最后两位为顺序号。
为表补充记录
系统提供为表补充记录的功能,从而统一在数据模型里维护。
一般在DWD层需要为表补充记录,比如下述两种类型的表。
没有参照来源表而新创建的表,其数据可以通过表补充记录功能来维护其数据。这类新表常见用于库龄段表、账龄段表等需要完全的通过补充记录手工添加记录的为完善分析维护加的维表;还有一类是为事实表的状态值或分类值创建新表,或为多个状态或分类的杂项而创建的新表(也称杂项维),这些表的状态值或分类值来源于业务系统明确的值,现和名称说明等字段一起通过补充记录功能维护。
有参照来源但需要增加记录的表,可以是维表或者事实表。如果在业务系统,事实表的数据录入没有强制参照维表的记录,那事实表相关的外键有可能会是Null值,为了让事实表与维表进行内连接以提高查询性能,就需要为相关维表增加一条记录。
为表维护的补充记录,系统在自动创建生成的数据转换程序会增加一个步骤,并且这个步骤的输入方法为:输入/更新,所以不管上述的哪一种类型的表,其转换程序都可以加入到数据装载的全量或增量作业。
下面我们以一个库龄表及职员表为例补充记录功能的使用流程。
为没有来源数据的表维护全部记录
示例库龄表的补充记录,如下图。
对于在没有来源而而维护了补充记录系统创建的表,系统自动创建的数据转换程序如下图(只有一个步骤)。

打开这个步骤的属性对话框,补充记录的属性对话框具有补充记录页签(和表的属性对话框的补充记录功能完全一致),如下图。

为有来源数据的表补充记录
下表是职员维表补充一条记录的示例。

维护维表补充记录的注意事项。
维护数据记录时符合字段的数据类型,如果不输入值系统将设置为NULL值;
若表设置唯一键,取值不要和将来业务系统维护的记录产生冲突;
若表主键是是整数自增类型,取-1值,不要补充记录的值与表的自增值冲突。
其对应的全量及增量装载数据转换都会加上补充记录步骤如下图。

自定义建表DDL
系统提供了主键、唯一键及索引的创建,见前述的表护表的键及索引一节。如果表的数据量很大需要创建分区表,或者需要为一些个性化数据库的创建特殊的键(例如某些分析数据库的分布键、分区键等),则可使用系统的自定义建表DLL功能。当创建物理表时,系统将使用在此编辑的自定义建表DLL。基中【获取DLL语句】按钮可将已设置的主键、唯一键及索引的创建SQL装载到编辑框。
修改表的生成键值
在前述3.6.2表从哪里来一节,我们描述了表的各种来源。如果表为系统创建的日期或时段维表,或经车接表等复杂功能转换而创建,系统将为这些表记录其创建的键值。每种表的创建键值都不相同,你可通地键值行右边的【查看】按钮打开对话框以列可读的方式来查看。通过键值列表上方的【属性】按钮则可打开生成键值的属性并修改保存。
为表批量添加公共字段
系统提供为表批量添加公共字段。单击模型的智能菜单按钮,弹出的下拉菜单包括添加公共字段的菜单,如下图。

添加ETL时间字段(需要补充如何增加这个字段)
为表的增加一个字段以保存当前记录的插入或更新时间,是开发ETL系统的良好习惯。单击“添加ETL时间字段”下拉菜凌晨,弹出对话框,如下图。系统已生成了ETL时间字段,你可以选择要添加ETL时间字段的表,点击【确定】按钮完成。
添加其它公共字段(举例说明如何增加${tenant_id})
你也可以为表添加除ETL时间字段之外的公工字段,比如账套号等。添加公共字段与添加ETL时间字段完全一致,只是你要首先维护这个被添加的公共字段。维护字段的属性请参考3.6.5维护表的字段一节。
维护表的统一规范
统一表的前缀
对于从ODS至ADS各层的表,首先我们建议为每一层的表都创建不同的架构,各层模型建议对应的架构如下表。
| 模型 | 架构名 | 表名的前缀 |
|---|---|---|
| ODS模型 | ods | 不需要(和业务系统的表名一致) |
| STG模型 | stg | 不需要(根据实际对象命名) |
| DWD模型 | dwd | 维表dim,事实表fact |
| DWS模型 | dws | 维表dim,事实表fact |
| IDX模型 | idx | 维表dim,事实表fact |
| ADS模型 | ads | 维表dim,事实表fact |
| 注意:前缀的大写还是小写需要根据数据库本身的表名规范而定,比如Oracle为大写,PostgreSQL则为小写。 | ||
我们强烈建议,不要在各层的模型的表加上模型类型作为前缀,因为每一层的表都有对应的架构来识别,但在DWD、DWS、IDX及ADS等模型的表,我们建议对所有的维表加上“dim_”,所有的事实表加上“fact_”前缀,因为这些表要经常被应用程序访问。
DWD模型的智能工具提供了统一表的前缀的下拉菜单,如下图。

单击“添加维表前缀”,打开对话框,如下图。

系统缺省已加上了维表前缀“dim_”,列表已将模型的维表全部列出,全选或勾选你需要添加前缀的表,并点击【应用】按钮,新名称将出现在“更改后名称”列,点击【确定】按钮完成。
单击“添加事实表表前缀”,打开对话框,如下图。

系统缺省已加上了维表前缀“fact_”,列表已将模型的事实表全部列出,全选或勾选你需要添加前缀的表,并点击【应用】按钮,新名称将出现在“更改后名称”列,点击【确定】按钮完成。
统一表名的大小写

大部分的数据库对大小写敏感,比如PostgreSQL数据库缺省是小写,Oracle为大写,如果表名包含的字母不符合数据库的缺省,则查询SQL必须加上界定符。系统都提供了工具可以批量修改表名的在大小写。在模型工具栏,点击按钮,弹出表列表对话框。
全选或勾选需要修改大小定的表,并点击列表上的按钮【小写】或【大写】,即修改选了表的表名。
批量修改表的架构名
当ODS模型为逻辑模型时,由于逻辑模型不能创建物理表,所以不能通过创建物理表来自动修改表的架构名。
系统可批量修改表的的架构名。在上述统一表名的大小写界面包含修改架构名按钮,如下图。

全选或选中需要修改构架名的表,点击【修改架构名】按钮,弹出修改架名对话框,如下图。
单击输入框左边按钮,在弹开的对话框选择架构名,单击【确定】完成批量修改。
字段
维护字段的属性
本章前面描述了维护表的字段,在表属性对话框的字段页签,单击字段列表的右边的【新增】按钮或每个字段最右边的【编辑】按钮,便可打开字段属性的维护对话框,如下图。
字段属性描述及其作用如下表。
| 分类 | 属性 | 描述 | 建表DLL |
|---|---|---|---|
当 前 表 |
字段名称 | 需要按照数据库的字规的命名规范 | √ |
| 注释 | 一般使用业务术语描述,业务模型可引用注释作为业务对象名称 | √ | |
| 数据类型 | 从维护的数据类型中选择,如果从来源映射过来的数据没有维护映射,将以来源类型作为表的数据类型 | √ | |
| 长度 | 当数据类型为varchar或numeric等数据类型时,根据数据库的规范需要维护长度 | √ | |
| 精度 | 当数据类型为numeric等数据类型时,根据数据库的规范需要维护精度 | √ | |
| 默认值 | 当插入修改记录,若SQ没有给该字段赋值,则使用默认值 | √ | |
| 可Null | 该字段允许Null值 | √ | |
| 自增 | 自增字段,数据库赋值,作主键时可选择该属性 | √ | |
| 数值汇总字段 | 若该属性为真,基于该表创建DWS模型的聚合表时,将自动为作为来源表达式的该字段加上SUM函数 | X | |
| 业务日期字段 | 为数据资产表的记录提供业务日期的范围统计 | X | |
| 描述 | 可为该字段加上附加描述,比如每个值的意义等 | X | |
来 源 |
源字段表达式 | 描述字段如何从来源映射过来。当来源为数据库时,可使用来源数据库所有运算符及函数,包括开窗函数。 | X |
| 数据类型 | 当业源为一个字段时,即为来源字段的数据类型、长度及精度,否则为空,不需要维护,系统自动显示。 | X | |
| 长度 | X | ||
| 精度 | X |
根据上表对字段属性的描述维护属性,并单击【确定】按钮完成。
在表的上述建表DLL一栏为√的属性,将作为建表DLL的内容创建物理表。而来源分类的源字段表达式,则为表输入(或者数据文件输入、API输入)的字段。
字段的清洗及转换
源系统中的一些字段往往不能直接用于分析,需要在映射到目标表时进行清洗和转换。系统提供字段表达式及表级步骤等两种转换方式,分别应对不同复杂度的转换场景。
通过字段表达式实现字段的清洗及转换
上节我们讨论了维护字段的属性,在字段属性界面包含字段的来源表达式编辑输入框,如下图。

使用来源表达式对字段执行清洗和转换适用于单个字段,接在字段映射中编写数据库函数和运算符表达式,表达式将在系统自动创建的数据转换的表输入的SELECT子句,其中表达式为SELECT的内容,当前字段名为字段名,表输入的SQL语句如下图。
注意:表达式可使用的函数及运算符以数据库的官方文档为准。
以下是表达式转换的常见场景及示例。
| 转换场景 | 表达式示例 | 说明 |
|---|---|---|
| 类型转换 | CAST(amount AS INTEGER)或amount::numeric(18,2) | 将源字段转换为目标数据类型,并指定长度/精度 |
| 空值填充 | COALESCE(amount, 0)或IFNULL(customer_name, '未知') | 将 NULL 替换为有业务含义的默认值 |
| 条件判断 (CASE WHEN) |
CASE WHEN status = 1 THEN '已支付' WHEN status = 0 THEN '待支付' ELSE '已取消' END |
将代码值或数字值映射为可读的业务维度值 |
| 简单字段运算 | price * quantity或(income - cost) /income | 多个字段进行四则运算生成新字段,注意分母为零的处理 |
| 字符串处理 | CONCAT(first_name, '_', last_name)或 SUBSTRING(phone, 1, 3) |
字符串拼接、截取、替换、大小写转换等 |
| 日期/时间处理 | TO_DATE(order_date, 'YYYY-MM-DD')或 EXTRACT(YEAR FROM order_date) |
将不同格式的日期字符串转换为标准日期类型,或提取年/月/日等时间分量 |
| 聚合计算 | SUM(amount)或 COUNT(DISTINCT order_id) | 常用于计算客户累计消费额、订单数等,当表达式包含聚合函数时,表输入的SQL语句自动包含GROUP BY子句 |
| 开窗函数 | ROW_NUMBER() OVER(PARTITION BY cust_id ORDER BY order_date DESC) | 生成分组序号、获取排名、计算前后行差值等分析场景 |
| 行号/序号生成 | ROW_NUMBER() OVER(ORDER BY order_date) | 为每行数据生成全局唯一递增序号 |
系统步骤转换(表级)实现字段的清洗及转换
适用于表达式难以实现的复杂转换,如表扁平化、事实表快照计算、表行转列、表列转行、多表合并等等,由系统预置的转换步骤完成,您只需在构建模型时按照向导式的指引过行配置即可。下图为通过系统功能设计的库存余额表。
在上面例举的库存余额表中,stock_balnace、stat_date、age及transaction_direction等字段由系统向导式的功能自动生成,并且由系统的“事实快照表计算”步骤来计算并赋值。
本节对通过表级步骤转换则字段清洗转换只作简单描述,其详细讨论将在后续构建各种模型的章节里展开。
另外,如果单个字段的转换逻辑非常复杂,或者一张目标表的多个字段之间存在依赖关系,您可以将复杂转换拆解为多个步骤,每一步生成一个STG层中间表,下一步基于上一步的结果继续处理,这种设计既保证了复杂转换的可实现性,也让每一步的转换逻辑清晰可追溯、便于调试。
无论采用哪种方式,您只需在模型中完成配置,数据集成的转换都由系统自动生成。
统一字段的大小写

和前述统一表名的大小写类似,字段也需要统一字段的大小写。在字段列表工具栏,点击按钮弹出辽段列表对话框。
全选或勾选需要修改的字段,单击列表上方的【小写】或【大写】按钮即可批量修改字段的大小写。
批量修改字段属性
在字段列表对话框,点击菜单按钮【编辑】,弹出下拉菜单,如下图。

通过编辑的注释、数据类型、源表达式等三个子菜单可以批量修改字段的属性。
可通过过滤和条件快速批量选中需要编辑的字段。
批量修改注释
点击编辑的下拉菜单“注释”,弹出修改注释对话框,如下图。
在注释输入框输入新的值,点击【确定】按钮完成。
批量修改数据类型
点击编辑的下拉菜单“数据类型”,弹出修改数据类型对话框,如下图。
在数据类型、长度以及精度等维护元素选择或输入新的值,点击【确定】按钮完成。
批量修改源表达式
点击编辑的下拉菜单“数据类型”,弹出修改数据类型对话框,如下图。

在编辑框输入新的源表达式,点击【确定】按钮完成。
参数与动态值
在数据模型的设计和数据集成的自动生成过程中,您经常需要在字段表达式、数据装载过滤条件、API请求参数等位置使用可变的值,以实现模型的动态化和参数化,例如根据不同的组织切换数据源、按时间周期循环抽取数据、或动态获取API的分页参数。
系统支持四种类型的值引用,分为两大类:
参数:由用户定义,值来源于外部传入或前序步骤传递。
命名参数,由作业或转换的外部调用者传入,用于控制运行时的行为,如指定多组织场景下的具体组织标识;
流程变量,在转换内部由前序步骤生成并传递给后续步骤,用于在步骤间传递中间计算结果,如循环日期值或查询到的最大值。
动态值:由系统预定义并自动生成,用户仅需引用,无需定义其值来源。
时间变量,由系统时钟驱动,用于获取当前日期时间,如T+1策略中的“昨天”;
系统变量,由系统内部逻辑驱动,专用于Web API分页场景,在运行时自动递增。
了解这四种类型的区别,是正确配置动态值的前提。下面逐一详细说明。
命名参数
定义
命名参数是在作业或转换级别定义的参数,由外部调用者(如作业调度系统、手动执行时的输入)传递给转换中的步骤使用。命名参数的值在转换运行前确定,同一参数在一次运行中保持不变,但不同运行可传入不同的值。
典型场景
多组织多数据源切换:在集团化企业中,同一套数据模型需要从不同组织的源系统中抽取数据。通过在作业中设置${tenant_id}命名参数,并在来源配置中将其与具体数据源映射,系统在运行时根据参数值自动切换到对应的数据源连接,实现一套模型支撑多组织数据集成。可参考4.4节“来源”中关于“多组织同类系统不同数据源”的详细说明。
动态过滤范围:在数据装载的过滤条件中使用${start_date}和${end_date}命名参数,由外部传入日期范围,控制增量抽取的时间窗口。这一方式特别适用于需要人工指定回溯区间或补录数据的场景。
使用方式
命名参数在作业或转换的属性中定义,在步骤的属性值中使用${参数名}的格式引用。作业级别的命名参数可传递给其调用的所有子转换,实现跨转换的参数传递。而转换的参数可以传递给所有的步骤。
流程变量
定义
流程变量是在转换运行过程中,由前序步骤生成并传递给后续步骤的动态值。变量的值在转换运行过程中随数据流的变化而动态改变,用于在步骤之间传递中间计算结果或控制信息。
典型场景
循环日期传递:在按月循环抽取大数据量表时,“生成日期序列”步骤按月份生成日期范围值(如2026-01-01~2026-02-01、2026-02-01~2026-03-01),该值作为流程变量传递给后续的“表输入”步骤,用于动态构造WHERE条件。可参考4.9节“数据装载”中关于“过滤及循环表输入”的详细说明。
查询结果传递:“表输入”步骤查询源表的最大日期或最大ID值,将该查询结果作为流程变量传递给后续步骤,用于增量同步的断点续传或范围判断。
流程变量的定义方式为:##流程变量##,在SQL语句也可以直接用?占位符代替。
使用方式
流程变量通过系统内置的步骤间数据传递机制自动流转。前序步骤的输出记录集会成为后续步骤的输入数据集,在“表输入”步骤的SQL语句中可以直接使用?占位符,系统自动将其与前一步骤传递过来的字段值按顺序绑定;而在非SQL语句的设置则使用##流程变量名##来引用。流程变量仅在当前转换内有效,不能跨转换传递。
时间变量
定义
时间变量是系统预定义的特殊变量,用于在运行时动态获取当前日期时间值。时间变量由系统时钟驱动,用户仅需按照固定格式引用,无需定义或赋值。
格式及说明
格式及说明如下表:
| 格式 | 说明 | 示例值 |
|---|---|---|
| $[YYYY] | 当前年份(4位) | 2026 |
| $[YYYYMM] | 当前年月(6位) | 202608 |
| $[YYYYMMDD] | 当前日期(8位) | 20260825 |
| $[YYYY-MM-DD] | 当前日期(带分隔符) | 2026/8/25 |
| $[YYYY-MM-DD HH:MI:SS] | 当前时间戳 | 2026/8/25 15:30 |
| $[YYYY-MM-DD-1] | 昨天日期 | 2026/8/24 |
| $[YYYY-MM-1] | 上月同日 | 2026/7/25 |
| $[YYYY-1] | 去年同日 | 2025/8/25 |
其中,-1、-2等后缀表示向前偏移的单位数量,支持年、月、日三个级别的偏移。
典型场景
T+1数据抽取:
在数据装载的过滤条件中使用order_date <= '$[YYYY-MM-DD-1]',系统每天自动抽取截止到昨日的数据,无需人工修改日期参数。动态分区表名:
在目标分区表名使用sales_$[YYYYMM],实现按月自动写入对应分区。
使用方式
时间变量可在字段表达式、数据装载过滤条件、以及来源设置的查询条件中使用,直接按格式字符串引用即可。
系统变量
定义
系统变量是在转换运行过程中,由系统内部自动生成并赋值的特殊变量,专用于Web API数据源的分页循环场景。用户只需在API配置中设置缺省值,系统在运行转换时自动根据分页规格计算当前页的变量值,并传递给API请求。
系统变量清单
系统变量清单如下表:
| 变量名 | 说明 | 适用分页规格 |
|---|---|---|
| ${pageIndex} | 当前页码(从缺省起始页码开始递增,每次加1) | 按页码序号和每页记录数 |
| ${StartRow} | 当前起始行号(从缺省起始行开始递增,每次增加每页记录数) | 按起始行和每页记录数 |
注意,在引用系统变量的名称时必须严格遵守格式规范,包括大小写。
使用方式
系统变量的使用方式如下:
在Web应用数据源的API配置中,选择分页规格,并在“请求”页签的“分页”区域设置缺省值。例如:选择“按页码序号和每页记录数”,缺省起始页码设为1,缺省每页记录数设为100。
在API的URL参数或请求体中使用对应的系统变量引用,如?page=${pageIndex}&size=100。
系统在运行转换时,自动循环递增分页参数的值:第1次请求使用缺省值,之后每次加1(或按起始行递增),直至API返回数据为空或返回记录数小于每页记录数为止。
系统变量仅在Web API请求参数配置中可用,不适用于字段表达式或数据装载过滤条件。
四种类型的对比总结
四种类型的参数及变量对比总结如下表:
| 维度 | 命名参数 | 流程变量 | 时间变量 | 系统变量(API分页) |
|---|---|---|---|---|
| 值来源 | 作业/转换外部传入 | 前序步骤输出 | 系统时钟 | 系统内部生成 |
| 变化驱动者 | 调度者(人/调度系统) | 数据流 | 自然时间 | 系统循环控制 |
| 值是否变化 | 每次运行可不同 | 运行中动态变化 | 随时间推移变化 | 运行中逐次递增 |
| 用户是否定义 | 是(参数名+值) | 否(?占位符自动绑定) | 否(系统预定义) | 否(系统预定义) |
| 用户是否配置初始值 | 是(在作业/转换中赋值) | 否(来自前步骤结果) | 否 | 是(在API配置中设缺省值) |
| 典型场景 | 多组织切换、参数化过滤 | 循环日期传递、查询结果传递 | T+1日期过滤 | API分页循环 |
| 适用范围 | 全局(跨转换) | 转换内 | 全局 | 仅Web API请求参数 |
数据装载
数据装载简述
数据装载是指将数据从源端(业务系统原始表、外部文件、API输入,或上一步骤的加工结果)按照预先定义的表和字段的转换规则及映射关系,填入当前目标数据表的完整过程。在云智算系统,由于采用模型驱动技术,您无需手写ETL代码,只需在此页签中设定装载策略,平台即可自动生成数据集成的全量和增量的转换程序。
全量装载的定义及应用场景
全量装载是指每次执行装载任务时,将源端全部数据完整装载到目标表中。全量装载在生产系统时只执行一次,在开发测试阶段,可多次执行,不过每次执行全量前需要清空目标表。
全量装载适用于以下场景。
数据仓库上线的首次数据导入;
数据量较小、变化不频繁的维度表(如地区表、产品分类表,并且不需要处理缓慢变化维);
当源表不具备时间戳(如last_modified_date)或自增序列号(如id)时,系统无法界定“变化”的边界。此时只能采用全量装载,即每次将源端所有数据整体覆盖至目标表,以确保数据完整,避免遗漏。
源端整体数据量很小,装载数据耗时很少,可以所有源表都使用全量装载。
增量装载的定及应用场景
增量装载是指每次执行装载任务时,仅抽取自上次装载以来源端发生变化的数据,并将其加载到目标表中。增量装载一般定期执行,定期执行可以通过云智算的作业设置为每天某个时点执行,或都每隔一个时间段执行;增量装载也可以由前端的应用触发执行,比如可以设置报表查询前或API查询前执行增量装载作业。
支持增量装载的表必须具有增量标识的字段,比如时间戳或自增序列号等字段,这是增量装载的前提。增量装载适用于以下场景。
数据量大,并且有增量标识的字段;
需要处理缓慢变化维,并且有增量标识的字段;
具有增量标识的大数据量的事实表。
数据装载设置界面
全量装载界面
点击表属性对话框的“数据装载”页签,打开表的全量数据装载设置界面。
增量装载界面
点击表属性对话框的“数据装载”页签,打开表的全量数据装载设置界面。
维护数据装载全量及增量选项
全量和增量的设置界面很类似,在设置界面左侧,是从目标表(或相关表)获取数据以及对目标表表输出的设置;在设置界面的右侧,是对来源表的过滤或循环设置。我们将全量装载及增量装载统一进行描述。
设置全量目标表部分
目标表清空后插入
此属性值将同步自动创建的数据转换程序的表输出步骤有对应选项。当属性被勾选时,对应表输出步骤的选项也被勾选,如右图
全量操作前删除目标表的SQL语句
当来源为“多组织同类系统不同数据源”时才需要维护这个选项,当勾选此选项并且在属下性输入框输入以下SQL。

其中${account_id}为作业传递过来的命名参数,即账套的值。其的意义表示在全量装载命名参数指定的账套前先删除该账套的数据,而其它账套的数据不被删除。
我们查看系统处动创建的数据转换全量装载程序,如下图。
在全量装载程序的第一个步骤就是删除记录,如下图。

过滤来源表达式的值来源于目标相关表字段
只有通过API输入的表才需要选择此选项,因为从数据库或数据文件过来的数据全量装载时目标表不会有数据。
以某SaaS ERP系统为例,其提供的客户详情API需要传递客户ID来逐条查询数据,而ID值可以来自于客户列表表(在执行客户详情API查询之前已通过列表API来获取数据并存储到客户列表表),这时候就可以选择客户列表的客户ID字段来循环获取客户详情的数据并存储到对应的表。该设置如下图。
此时在全量装载的右边对源表需要设置,可以两种设置方式。
设置过滤来源时使用的表达式,如下图。
或者,直接在“查询来源的其它过滤条件”设置过滤条件,如下图。
经此设置后,系统自动创建的全量装载转换程序如下图。
上述转换程序解释,系统从数据库查询到客户ID的数据集,传递到API输入步骤,API的URL参数DI接收上一步骤的客户ID,逐条访问API查询数据并输出到表。
设置输出并发数提升转换运行性能
输出并发数将同步至表输出的“输出并发数”选项。当输出并发数在于1时,表输出右上角将显示表输出的并发数。一般数据转换程序的瓶颈在于表输出,当表输出为性能瓶颈时,设置多个并发输出将大幅提高数据转换的运行性能。
设置输出并发数为10,如下图。

我们查看系统根据该表自动创建的转换程序,我们发现表输出的左上角标有“X10”。

设置增量目标表部分
增量操作前删除
增量操作前删除有以下两种场景需要设置。
如果业务系统删除记录进行物理删除,要处理这种情况,可以在增量操作前先删除最近一段时间的记录,比如下图删除当前表前2个月1日以来的所有数据然后再新增数据。
删除当前表的最大时间戳的记录,在输出方法时使用“输入”以使表输出性能最快,设置及SQL举例如下图。
过滤来源表达式的值来源于目标相关表字段
假设使用了增量策略,都必须设置此选项,如下图。
我们看这时候增量的ETL转换程序,如下图。

如果设置了“查询字段的过滤条件”,则在上述的获取值的步骤的SQL加上在此维护的过滤件。一般当“不同组织同类系统多数据源”来源时需要设置根据组织来过滤,可以按哪下设置。
自动创建的ETL转换程序的获取最大值的表输入SQL会加上过滤条件,如下图。

设置输出方法
表输出的方法如下列表,根据实际需求设置输出方法,将同步至转换表输出的属性。
| 输出方法 | 描述 |
|---|---|
| 插入 | 不对表输入数据和目标表已有记录做对比,性能快。 |
| 插入/更新 | 通过主键判断对比,性能慢 |
| 更新 | 不对表输入数据和目标表已有记录做对比,性能快。 |
| 不存在则插入 | 通过主键判断,只插入新的数据。 |
| 存在则更新 | 通过主键判断,只更新已存在的数据。 |
设置输出并发数
此选项和全量装载的选项功能相同,如果增量的数据量很少,可以保留缺省值1。
设置来源表(或API输入)输入部分(包括全量和增量)
过滤来源时使用的表达式
在全量装载时,只有下述三种情况才需要勾选此选项
勾选了前述第3点“过滤来源表达式的值来源于目标相关表字段”;
使用T+1批量策略并仅装载需要过滤日期字段小于当天的数据;
当源表数据量非常大,系统难以支撑直接查询时,可使用时间戳字段或自增序列号字段设置步长进行循环过滤源表,减轻系统查询的负荷;
快照事实表必须根据时间周期来计算,必须勾选此项目并且使用设置快照事实表的业务日期字段以按周期进行循环计算。
上述第一种情况,我们在前面第3点已描述,对于快照事实表的设置请参考第6章构建DWD模型关于快照事实表的相关内容。我们在本节对上述的第2种和第3种情况进行详细的举例描述。
设置过滤范围
以销售订单为例,假设当前为2026-08-01,执行T+1策略,并且仅取2025年以来的数据,设置如下图。
过滤范围的逻辑运算符设置可以为下述中任何一种:
等于;
大于;
大于等于;
小于;
小于等于。
但如果也勾选了“按日(时间周期)循环”时,对于最大值过滤的逻辑范围只能选择“小于”,因为按时间周期循环查询时,以月为例(字段的数据类型为日期),其循环每人月的过滤条件为:{月首日} <= 过滤来源时使用的表达式 < {月首日}。
而比较值有以下类型:
常量,当表达式的数据类型为日期时,系统提供日期选择器,比如全量抽取可不装载所有数据而是以从某年首日始,则可直接输入常量;
命名参数,命名参数可以由作业传递至由该表自动创建的转换,假设作业维护了一个“modify_start_date”,如果在此需要使用这个参数值,则可输入“${ modify_start_date }”以获取该参数作为比较的值;
SQL语句,可以输入一条SQL的查询值作为比较值,例如全量抽取并需要循环装载时,可以输入SQL语名“SELECT MIN({时间戳字段}) FROM {事实表名}”来获得循环装载的开始时间;
时间变量,可选择时间变量,系统提供如下的时间变量。当选择了时间变量后,弹出如下的时间变量对话框,如下图。
yyyy,表示当年;
yyyy-1,表示去年,你可修改1为其它数字表示之前的年份;
yyyy-MM,表示当前月份;
yyyy-MM-1,表示上一个月份,你可修改1为其它数字表示之前的月份;
yyyy-MM-dd,表示当前日期(精确到日期);
yyyy-MM-dd-1,表示当昨日,你可修改1为其它数字表示之前的日期;
yyyy-MM-dd HH:mm:ss,表示当前时间(精确到秒)。
传递变量,在之前描述的“过滤来源表达式的值来源字段”时,当设置了目标字段时,该字段的查询值可作为传递变量传递到源表输入作为比较值。
根据上述设置由系统自动创建的全量数据转换程序如下图。
打开“表输入 sale_orders”,表输入的SQL加了WHERE条件,其中SQL的问号由前面的两个步骤传递过来,如下图。
设置过滤及循环表输入
在1的基础上再勾选循环复选框,如下图。
设置循环装载的注意事项:
当选择了循环时,前面两个范围复选框必须选择。
循环输出值的格式只和最上面的“过滤来源时使用的表达式”的数据格式有关,与循环选的周期(这里设置了“月”)无关。
根据上述设置由系统自动创建的全量数据转换程序如下图。

我们打开生成日期序列步骤的属性对话框,其的设置继承了上述设置的所有内容。

打开表输入步骤的属性对话框,如下图。

生成日期序列步骤将循环传递月份的范围值至表输入步骤以从源表查询数据,在本用例以2026年6月份为例,其月份范围的值将为2026-06-01 ~ 2026-07-01,所以你在设置值范围时需要分别设置“大于等于”及“小于”。
查询来源的其它过滤条件
我们基于上一节描述的过滤来源时使用的表达式的设置来描述如何设设置查询来源的其它过滤条件。
假设需要过滤某个景区(resort_id)的数据进行开发测试,在“查询来源的其它过滤条件”编辑如下的过滤条件。

我们查看这时候数据转换程序(在查看之前需保存数据模型)的表输入。

我们发现我们维护的过滤条件“sale_orders.resort_id = 1”出现在了WHERE条件,并且该过滤条件和前述“过滤来源时使用的表达式”而生成过滤条件是AND的关系。
在理解了该属性对表输入的影响的作用后,我们对辅助该条件的工具按钮详细描述。
系统提供了两个按钮【插入时间变量…】以及【…】。
插入时间变量
点击【插入时间变量…】按钮,在弹出的对话框里可选择时间变量,时间变量参考前面关于时间变量的内容。
假设你使用T+1的数据装载策略,当天只抽取昨日之前的数据,为了今日的业务数据也抽取到数据仓库,可选择源表的日期字段小于当前日期,如下图。
插入表字段或API的URL参数
当来源为表时,单击【…】按钮,将弹出来源表的字段列表供选择,当来源为API时,将弹出API输入的URL参数列表供选择。
数据装载的最佳实践
如何解决大数据表全量装载压垮的问题?
虽然系统的表输入查询采用流式机制,但这只解决了系统服务器的内存问题,数据库查询根据执行的SQL确定全表扫描还是使用索引,所以当事实表的记录数据非常大时,由于全量装载没有过滤条件,数据库将全表扫描,这时有可能耗尽数据库的内存缓存(Buffer Pool)和磁盘吞吐量,出现负载压垮,导致数据查询卡死。

事实表有时间戳字段或有自增ID字段
可设置过滤时间戳字段或自增ID字段为循环查询,如下图样例设置。
这时自动创建的数据集成转换程序如下图:
日期序列将月份传递至表输入“表输入 sale_orders”,其表输入SQL语句如下图。

在表输入的SQL已加了按月过滤,系统将使用索引,从而解决数据查询卡死的问题。
事实表(一般为子表)没有时间戳字段也没有自增ID字段
不能循环全量装载。这时候就要在ODS层将带有时间戳字段的主表和子表(或多层表)连接后再装载到ODS层,并使用主表的时间戳字段来设置循环加载,从而解决子表查询卡死的问题。
使用表连接连接主子表可使用数据模型的智能工具的“连接表”菜单,如下图。

由于使用了INNER JOIN连接,并且表头有时间戳字段过滤,主表和子表都不会全量扫描,问题得以解决。
具有主表和子表等多层表的事实表如何实现增量数据装载?
子表有时间戳字段或自增ID字段
A方案,从业务库至ODS层表完全一致,从ODS层至DWD层连接为一个表。
从业务表至ODS层,主子表直接使用其时间戳字段或自增ID字段做增量过滤条件即可。而从ODS层至DWD层连接为一个事实表时,则需要修改事实表的时间戳字段及维护表的来源过滤其它条件。
将连接表的时间戳字段的来源表达式修改为:MAX(主表字段,子表字段)。
维护增量装载的“来源过滤其它条件”选项,其过滤表达式示例如下图。
“过滤来源表达式的值来源于目标相关表字段”设置连接表的时间戳字段。并且一定要传递参数,不能使用“”?,因为一个“?”只能传递一个参数。
B方案,从业务库至ODS层通过连接表将主子表整个为一个单据表
这个方案除了在ODS层使用连接表将业务库的主子表连接为一个表再装载,其增量装载的设置和上述A方案在DWD层设置完全相同,而在DWD层的增量设置则简单设置即可。
上述两个方案,A方案比B方案更好。如果ODS系统既有的单据有时间戳字段子表,有的单据没有时间戳字段的子表,则建议全部使用B方案。
子表没有时间戳字段或也没有自增ID字段
A方案,从业务库至ODS层表完全一致,从ODS层至DWD层连接为一个表。
使用子查询,并在设置增量装载的源表过滤条件里使用这个子查询,设置样例如下图。
设置解释:
过滤来源表达式的最小值没有使用当前表,而使用了主表的时间戳字段;
使用了子查询来过滤子表的外键:主表的的主键ID;
在执行转换时,必须先执行子表的增量,再执行主表的增量,否则子查询无效。
B方案,从业务库至ODS层通过连接表将主子表整个为一个单据表
这个方案和上节解决大数据量全量装载(如果事实表(一般为子表)没有时间戳字段并且也没有自增ID字段)的解决方案一致,即全量和增量都从业务库到ODS层时通过连接表将主子表整个为一个单据表,并且增量时使用主表的时间戳字段来做过滤。
当每天的主表增量很大,比如数千条甚至数万条记录时,A方案子查询可能会严重影响数据装载的性能。而B方案看似打破了ODS层和业务层完全一致的问题,但也可以接受,因为只是表没有一一对应,但其业务是一一对应,并且B方案不使用子查询,仅是主子表做了连接,更容易理解和维护。
从业务库至ODS层通过连接表将主子表整个为一个单据表,为最佳实践。
用T+1策略的事实表增量装载需要过滤当天数据吗?
事实表子表有时间戳字段或自增ID字段
当事实表子表有时间戳字段,并且从业务系统至ODS层主表为一一对应装载时,主表可以装载时可以加上过滤当天的字段,即如下示例设置。
但事实表子表不能使用上述勾选上述的“小于当天”的过滤条件,因为可能会存在这样的事实子表数据:表头的时间戳在昨天的23:59:59,而子表有2行数据在昨天的23:59:59,而另外有3行数据在当天的00:00:00,如果对子表设置了“小于当天”的过滤条件的过滤条件,则表头和表体数据不一致。
由于对子表没作小于当天的过滤,从业务系统至ODS系统有可能就可会抽取了当天的部分数。但从ODS至DWD时,将连接主表和子表一起装载到一个事实表。
子表没有时间戳字段或也没有自增ID字段
子表没有时间戳字段,直接对主表如上述设置,不会产生问题。
上这两种情况,在DWD层的数据资产统计都都是当天之前的数据,更加整洁。
综上所述,过滤当天的时间设置并不复杂,建议按上述原则添加过滤当天的数据。
如何实现API输入的增量装载?
API参数
模型驱动
自动创建数据集成
自动创建数据资产
构建ODS模型
概述
ODS(Operation Data Store)模型对应数据仓库的ODS层,ODS层也称贴源层,是数据仓库的第一层。ODS模型为STG模型和DWD模型提供来源。ODS层将原始数据几乎不做清洗和转换,结构上与源系统保持一致。构建ODS层的目标是为了让数据勘探及清洗转换等工作基于ODS层实现,以减少上述任务对源系统的影响。
在构建ODS模型之前,需要预先定义数据源,数据源类型包括数据库连接、数据文件以及Web应用,如何定义数据源请参见《云智算数据源管理用户指南.docx》。
本章首先对构建ODS模型的主流程做概要描述,具体的详细操作请参考核心功能描述一章。构建ODS模型,最重要的任务就是根据数据源创建表。我们对根据每类数据源如何创建表,以及其系统自动创建的对应的数据转换都进行了详细的描述。我们还描述了构建ODS模型的注意事项。在本章最后,描述了逻辑模型类型的ODS的定义方法及其作用,以及简单列举了在ODS模型的可以使用但并不常用的派生表、连接表及合并表等功能。
。
设计ODS模型
ODS模型编辑界面
在主界面ODS模型列表选择模型并单击【编辑】按钮,打开ODS模型的编辑页面,新增时打开的编辑界面则为空白模型。
设计ODS模型的主流程

设计ODS模型的流程如上图,共分以下5个步骤:
设置来源:为ODS模型配置数据来源,ODS模型来源于数据库连接、数据文件或Web应用,详细操作请参见4.4节来源。
设计关系图(添加表、建立连接):在关系图中添加表,并在表之间定义连接关系。ODS模型的关系图分为维度表关系图和事实表关系图两类,请根据表的类型选择对应的关系图。设计关系图详细操作请见4.5,添加表及定义表连接的简要操作请参见4.5及4.6表,从各种不同数据源添加表的具体操作及系统自动创建的数据转换我们将在后述5.3节描述。
维护数据装载:配置表的全量或增量策略,详细操作请参见4.8节数据装载。
保存模型:保存当前模型的设计元数据。
创建物理表:在目标数据库生成物理表。
ODS模型的两种形态
云智算的ODS支持逻辑模型及物理模型两种形态,您可以根据项目实际情况选择。
逻辑ODS模型(推荐)
逻辑ODS模型是一种特殊的ODS模型,与传统ODS模型不同,它只在模型里创建逻辑表,不创建物理表。逻辑ODS模型作为一个虚拟的映射层,其表结构和元数据直接指向并关联业务系统的源数据库。
其工作原理是:当您以这个逻辑ODS模型作为来源,为DWD或STG层模型创建数据转换程序时,系统生成的转换逻辑将直接从业务系统的源数据库中查询数据,从而实现了“跳过物理ODS层,直连业务库”的高效数据集成路径。
适用场景
逻辑ODS模型适用于成熟的ERP、CRM、MES等业务系统,原因在于:
源系统数据质量较高,不需要大量的数据勘探工作;
源系统数据量适中,直接的复杂查询不会影响业务库的压力。
核心与优势
逻辑模型适用以下的场景及其优势描述如下:
无需处理主子表增量同步的复杂逻辑:在物理ODS方案中,如果订单主表和子表分别做增量同步,需要额外处理子表的增量策略——当主表新增时,如何确保对应的子表数据也同步被识别。这是一个常见的ETL设计难题。
采用逻辑ODS方案后,您完全绕过这个问题。只需在DWD建模时连接主表和子表,使用主表的时间字段作为增量过滤条件。数据集成转换会自动将主表的时间字段作为增量标识,一次性识别出需要同步的订单及其所有明细,无需单独处理子表的增量逻辑。
关于主子表增量同步的详细方案,请参见4.8.7节“数据装载最佳实践”。减少数据链路,提升性能:对于数据量巨大或对实时性要求较高的场景,跳过物理ODS层可以减少数据搬运的环节,大幅缩短数据链路。实践表明,这可将增量数据同步的效率提升近一倍,有效缩短报表查询的等待时间。
降低存储成本:减少了ODS存储需要的空间。
保留业务语义,方便建模:虽然不创建物理表,但逻辑ODS模型仍然完整创建了源系统的表结构和表间关系。这使得建模人员在设计DWD层的关系图时,依然可以通过可视化的方式理解业务,并且系统能够自动推导表连接关系,避免了在DWD层完全手动编写复杂SQL脚本的麻烦。
操作步骤
创建并使用逻辑ODS模型仅需两步:
设置模型为逻辑类型:在新建或编辑ODS模型时,勾选属性中的“逻辑模型”复选框,如下图。
调整表所属架构:由于模型指向业务库,您需要确保模型中表的“架构名”与业务源库中的架构一致。完成关系图设计后,可使用模型工具栏中的“批量修改架构名”功能,将所有表的架构名统一设置为业务源库对应的架构名。
可单击模型工具栏的按钮,打开表列表对话框,并单击【修改架构名】按钮,输入架构业务源库对应的架构名,单周【确定】即完成。
物理ODS模型(备选)
物理ODS模型会在数据仓库中创建物理表,数据从源系统抽取并存储到这些表中。
物理ODS模型适用以下场景:
源系统查询性能较差,无法直接支持大量的数据勘探工作;
源系统数据质量较差,需要在ODS层进行前期清洗工作。
创建物理ODS模型,将数据勘探及部分清洗的数据库查询压力从业务库转到数据仓库的ODS层,减轻对业务库的夺力。
本节后面描述的根据数据库连接创建表、根据数据文件创建表以及根据Web应用创建表的创建流程部分都适用于逻辑ODS模型和物理ODS模型;而表和源表的对应关系及表对应的数据转换仅适用于物理ODS模型。
根据数据库连接添加表
创建流程
在关系图画布空白处单击右键,弹出添加表的下拉菜单。
单击连接名称,弹出添加表对话框,对话框显示业务库的表列表,选择需要在当前关系图创建的对应的表,添加表对话框如下图。单击【确定】按钮完成,系统创建将根据上述的设置创建表。
表和源表的对应关系
打开上一节添加的表的对话框属性,缺省显示表的常规页签,如下图:

常规属性主要属性如下:
表名来源表名一致;
架构名为空(创建物理表时系统将自动更新架构名);
来源对象类型为数据库连接;
来源对象为数据库连接名称;
来源表名为选择的来源表名;
来源架构名为选择的来源表的架构。
单击表属性对话框的“键及索引”页签,刚创建的表的主键也根据源表自动创建。
创建表和源表的字段对应关系也被自动创建,其对应关系包含在表对话框的字段页签,如下图。
表对应的数据转换
系统为创建表自动生成的数据转换如下:

双击表输入步骤,其属性对话框如下图:
表输入属性对话框说明如下:
数据库连接即为来源设置的数据库连接;
SQL中的SELECT子句的表达式来源于来源表达式,别名为字段名;
SQL中的FROM子句的架构名及表名对应于表属性的来源架构名和来源表名。
双击表输出步骤,其属性对话框的常规页签如下图:

常规页签属性说明如下:
表输出的数据库、架构名、表名非常对应自动创建的表的相应信息;
清空后插入、并发线程数、输出方法为数据装载设置对应的选项,详情请参见4.8数据装载章节。
当数据装载的增量设置的输出方法为“插入更新”、“更新”及“存在则更新”时,将自动设置为表的主键,全量无需设置,详情请参见4.8数据装载章节。;
当表的主键及索选择了全量装载后再创建,输出后执行脚本将对应创建主键和索引的脚的脚本,详情请参见4.6.6维护键和索引章节。
属性对话框的字段映射页签如下图:

表字段即是创建表的字段名称,而流字段则是上述描述表输入步骤时别名,即表的字段名称,所以表的字段和流的字段一一对应。
根据数据文件添加表
创建流程
在关系图画布空白处单击右键,弹出添加表的下拉菜单。
单击【添加表(从数据文件)】,弹出添加表(数据文件)对话框,选择数据文件并输入表名,添加表对话框如下图:单击【确定】按钮完成,系统创建将根据上述的设置创建表。
表和数据文件的对应关系
打开上面添加的表的属性对话框,和从数据库连接相比,创建的新表没有主键,所以你需要为表创建主键。
表的常规属性页签如下图:

关键常规属性如下:
表名为上述创建时输入的表名;
架构名为空(创建物理表时系统将自动更新架构名);
来源对象类型为刚才选择的数据文件类型;
来源对象为数据文件的数据源名称;
来源表名为数据文件名。
创建表和源表的字段对应关系也被自动创建,其对应关系包含在表对话框的字段页签,如下图。
你可以根据组织的设计规范修改字段名称,比如将字段名称修改为英文短语。
表对应的数据转换
系统为创建表自动生成的数据转换如下:
双击数据文件输入步骤,其属性对话框如下图:

数据文件输入属性对话框说明如下:
文件数据源即为来源设置的数据文件;
字段名称即为上述字段列表中的来源表达式的列名部分。
双击表输出步骤,其属性对话框的常规页签属性与根据数据库连接添加的表的表输出步骤完全相同,请参考上一节的描述。
表字段映射表如下图,流字段为数据文件的列名,而表字段则为修改后的名称。
根据Web API添加表
基本创建流程
在关系图画布空白处单击右键,弹出添加表的下拉菜单。
单击【添加表(从Web应用)】,弹出添加表对话框,显示“常规”属性页签,选择已在来源里已维护的Web应用,并根据Web系统提供的API规范填写API名称、URL属性,输入表名,如下图。
单击对话框的“请求”页签,如下图。请求方式,缺省为在Web应用设置的请求方式,也可以修改,请求方式提供两种方式选择:GET和POST;当为GET方式,只需设置URL参数及分页两个页签的属性,当POST方式,则有可能需要设置请求页签的所有属性。
URL参数,即通过URL传递参数,如果当前API的URL参数和Web应用的缺省参数一致,保留“继承Web应用URL参数”复选框则可,关于URL参数详细的设置请参见后述的6.5.2设置URL参数一节;
请求体JSON及其相关项,当为POST请求方式时,即表明API请求需要发送请求体,系统根据Web应用设置的模板及当前字段集合、过滤集合、分组集合、排序集合及请求体JSON等项目的设置创建请求体,关于请求体及其相关项目的详细设置请参见后述6.5.4设置请求体及其相关项一节;
分页,不管是GET还是POST的请求方式,如果API的规范需要设置分页请求,那就要开启分页设置,如果URL参数包括了分页的参数则分页设置将赋值到URL参数,否则将赋值到请求体;分页设置将继承来自Web应用的缺省设置。关于分页的详细设置,请系统将根据设置正确将分页对象放在URL参数或请求体还是放在请求体。
单击对话框的“响应”页签,如下图。
系统可以手工添加API响应外的字段,详情请参见6.5.5“将命名参数或URL参数值传递为表的字段值”一节。
系统还系统提供三种方式批量维护API返回的字段集合。根据Excel粘贴,当请求的API没有数据集返回时(开发环境没有数据,生产环境有数据),你可以将API规范的响应字段复制粘贴至Excel文件,再将Excel文件的字体集合复制粘贴到通过此按钮打开的对话框来完成批量维护返回的字体集合;
获取响应,单击此按钮一键请求API,根据返回批量维护响应字段集合;
通过字段集合获取,如果前面在请求页签维护了请求的字段集合,可以单击此按钮一键将前面维护的字段集合,批量维护响应字段集合。
单击【确定】按钮完成,系统创建将根据上述的设置创建表。
表和Web API的对应关系
打开上节添加的表的对话框属性,缺省显示表的常规页签,如下图:

常规属性主要属性如下:
表名来源表名一致;
架构名为空(创建物理表时系统将自动更新架构名);
来源对象类型为Web应用;
来源对象为Web应用的名称;
来源表名为API名称;
来源架构名为Web应用的名称。
创建表和源表的字段对应关系也被自动创建,其对应关系包含在表对话框的字段页签,如下图。
表对应的数据转换
设置数据加载后的系统自动创建的数据转换请参见6.64节及6.6.5节,在本节我们描述在未设置数据加载之前系统自动创建的数据转换。
打开对应的系统自动创建的数据转换,如下图:
双击数据api输入步骤,其属性对话框如下图:
api文件输入属性对话框说明如下:
名称为“api输入{表名}”;
从Web应用继承的参数及URL参数都显示出来,因为还没有设置全量及增量数据装载,流程变量的URL参数在API输入步骤没有自动被创建;
其它属性与添加表(Web应用)的属性一致。
双击表输出步骤,其属性对话框的常规页签属性与根据数据库连接添加的表的表输出步骤完全相同,请参考上一节的描述。
表字段映射表如下图,流字段创建表时设置的字段名,如下图:
通过设置URL参数请求API
在添加表(Web应用)“常规”属性页签,单击左侧的URL参数项,在对话框右下边即显示URL参数的列表及其维护工具栏,如下图。
设置URL参数
系统缺省勾选“继承Web应用URL参数”选项,如果当前API参数与Web应用完全一致,则无需维护其它URL参数,保留该属性设置即可。
如果当前API参数与Web应用的URL参数不一致,则不勾选“继承Web应用URL参数”选项,并且按照需要新增URL参数。可以通过【从Web应用获取】将所有的Web应用维护的缺省参数拉取到列表,再删除不一致的参数。
单击URL参数列表右边的【新增】按钮,弹出“新增参数”对话框,如下图。
URL参数的属性包含:
参数名称:根据API规范填写;
数据类型:包括字符串、数字及日期三类;
值:值包括5类,常量直接输入,命名参数、流程变量、时间变量以及系统变量等,请参考5.8参数与动态值填写。
URL参数与数据加载的配合设置
当API请求通过URL日期类型参数时,并需要全量装载及定期增量装载时,日期类型参数和数据装载一起进行配合设置,以正确并简洁地从API请求数据。
某Web应用的某一个销售订单列表的API请求规范的URL参数如下:
modify_end_date
modify_start_date
page
page_size
如果只考虑请求全量数据,modify_start_date和modify_end_date可以直接设置为常量;如果综合考虑全量及增量,则需要将这两个参数设置为流程变量,而设置全量及增量的数据加载时再根据实际为参数赋值。
上述四个URL参数的设置如下图:
全量装载设置及数据转换
在表属性对话框的的数据加载页签的全量设置过滤来源部分的“查询来源的其它过滤条件”输入框输入如下图的表达式:
填写说明:
modify_end_time及modify_start_time为创建表时的URL参数,可以单击输入框上方的【…】按钮选择,因为是URL参数,参数之间的连接使用“&”。
modify_end_tim的值部分$[yyyy-MM-dd|timestamp]表示当前日期(零时零分零秒),通过单击【插入时间变量…】弹出的时间变量选择框选择,timestamp表示时间变量的值要转为长整型的时间戳的值,其中“|”为固定符号,表示后面跟着转换的值类型;如果没有显式转为timestamp,则缺省为文本类型。
modify_start_time的值1704067200000,是日期2028-06-28的时间戳/毫秒(可通过外部工具将日期转为时间戳)。
系统自动创建的全量装载的数据转换如下图:
其中“api输入customer”步骤的属性对话框的URL参数列表如下图:
在上图的URL参数列表中,在“查询来源的其它过滤条件”输入的值分别赋予了数据转换中API输入步骤的参数列表。全量装载的数据转换的API输入步骤没前置步骤,所以系统将参数的值类型由原来的流程变量调整为时间变量及常量。
增量加载设置及数据转换
在表属性对话框的的数据加载页签的增量设置过滤来源部分的“查询来源的其它过滤条件”输入框输入如下图的表达式:
此部分的增量设置与全量设置基本类似,只是参数modify_start_time的值不同,其值为##modify_time##,是流程变量,根据增量设置目标表部分的“过滤来源表达式的最小值来源于目标表或相关表字段”流程传递而得。
系统自动创建的增量装载的数据转换如下图:
其中“api输入customer”步骤的属性对话框的URL参数列表如下图:

在上图的URL参数列表中,在“查询来源的其它过滤条件”输入的值分别赋予了数据转换中API输入步骤的参数列表。全量装载的数据转换的API输入步骤没前置步骤,所以系统根据全量设置赋值给的URL参数时,根据值的类型将原来参数的流程变量类型,调整为时间变量及常量。
通过设置请求体请求API
设置请求体及相关项
设置字段集合
设置过滤集合
设置分组集合
设置分页
设置请求体JSON
请求体与数据加载的配合设置
全量装载设置及数据转换
增量装载设置及数据转换
将API参数值传递为表的字段值
在第5章建模核心功能的5.6.10为表添加公共字段一节时,我们描述了使用命名参数为表增加添加公共字段。本节将描述如何使用API参数值为表字段赋值。
假设某个API,需要传递一个时间期间参数“period”请求数据,而返回的数据集中不包含这个期间参数,但将数据存储至表时需要一个时间期间字段来区分数据,这时候就需要增加一个字段来保存每次请求API时这个时间期间的参数值。
在系统里,API请求参数和作业、转换的参数类似,也是一种命名参数,使用格式${命名参数}来获取其在运行时的值。
如何设置字段对应API请求参数的值?在字段编辑对话框里的源表达式可以设置,在添加表(Web应用)的对话框的响应标签里也可以设置。以在添加表(Web应用)对话框时设置为例,单击字段列表上的【添加】按钮,在新行中输入period字段,并且在解释路径输入API的请求参数,如下图:

打开对应的根据模型自动创建的数据转换,如下图:

双击打开步骤“api输入balnacesheet”的属性对话框,在响应面签里包含了上述在添加表过程中设置的period字段及其值,如下图:

再双击打开步骤“表输出 balancesheet”的属性对话框,如下图:

在表字段映射列表,上一步骤传递过来的period值将映射到字段period。
设计ODS模型的注意事项
表结构尽量与源系统保持一致
ODS层是贴源层,其核心职责是快速将业务系统的原始数据抽取到数据仓库,尽量减少对源表结构的变更。不建议在ODS层进行字段合并、拆分或重命名等结构性转换,这些转换应延后到DWD层完成。
只有在两种情况下可以在ODS层对表结构做调整:
源表存在无实际使用价值的字段(长期为NULL),可在ODS层删除以节省存储;
多组织使用同一套表结构,需增加组织标识字段以区分数据来源。
如何批量删除字段,请参考4.6.5节相关内容;增加组织标识字段,请参见3.6.5 批量添加公共字段。
如果ODS层的表过多修改了源表结构,当源系统变更时,排查问题会变得困难,不建议过度加工。
维表关系图和事实表关系图分开维护
ODS模型的关系图分为维表关系图和事实表关系图两类。建议按表的业务类型分别放入对应的关系图:
基础档案类表(客户、物料、部门等)放入维表关系图;
业务单据类表(订单、出入库单等)放入事实表关系图。
这样分类便于后续DWD建模时,直接参照即可。
创建关系图的操作请参见3.5 关系图。
增量抽取的标识字段需创建索引
如果源表支持增量抽取(即有创建时间或修改时间或自增ID等标识字段),建议在ODS层为这些对应的标识字段创建索引。原因有二:
增量过滤源表时需要从ODS的表查询对应标识字段最大值作为比较值;
增量装载DWD层时,需要从ODS层按对应的标识字段过滤数据。
如果ODS层的数据装载到STG层或DWD层时支持增量抽取(即有修改时间或自增ID等标识字段),索引可以显著提升增量抽取时的查询效率。特别是当数据量达到百万级及以上时,未创建索引的增量查询可能导致抽取任务超时或数据库负载过高。
创建索引的操作请参见3.6.6 维护表的键及索引。
注意:索引仅在数据量较大时有明显效果。对于万行级别的小表,创建索引的收益有限,可根据实际情况决定是否创建。
设计ODS模型的其它功能
为了减低ODS数据库服务的压力,可以在将数据从数据源抽取到ODS层时,实现比较简单的转换,比如从业务库到ODS库时实现派生表、连接表及合并表转换等。这些功能都包含在模型工具栏的“智能工具”下拉菜单,如下图。

上述这些表转换的功能的场景,更多在DWD层应用,上述提及的这些表转换功能都将统一在构建DWD模型一章详细描述。
在弹出的“
构建DWD模型
概述
设计DWD模型
DWD模型编辑界面
设计DWD模型的主流程
参照ODS模型快速生成DWD模型
为模型增加日期及时段维表
表的转换
为了减低ODS数据库服务的压力,可以在将数据从数据源抽取到ODS层时,实现比较简单的逻辑的转换。比如以下的场景:
假设需要从一个非常大的事实表汇总几个状态相关字段的维表,为了降低存储的需求,可以根据源系统的事实表创建派生表;
假设一个业务单据相关的事实表众多,假设服务器配置不能支撑一次性将所有表关联很,可以从数据源抽取到ODS层时,先对这些众多的表分别关联成少数几个表,从ODS层至DWD层再关联已关联的表;
假设某ERP系统,其为每一种出入库操作(销售出库、领料出库、采购入库、生产入库等)都设计了不同的表,数据仓库除了需要这些不同的表作为数据仓库的事实外外,还需要将所有的出入库单分别合并为一个出库表及一个入库表,以计算存货库龄,这时候也可以从源系统至ODS实施这些简单的合并转换,而从ODS层至DWD层再实现复杂的清洗转换。
上述的场景需要分别用到表转换的派生表、连接表及合并表功能。这些功能都包含在模型工具栏的“智能工具”下拉菜单,如下图。
层级表扁平化
表行转列
表列转行
派生表
连接表
合并表
创建维表事实表及关系图
创建事实快照表及关系图
为状态字段创建维表
为分析需求增加分段维表
字段的转换和清洗
数据类型的转换
数据值的转换
为表名添加前缀
来维表添加前缀
为事实表添加前缀
为DWD层的表的设置键及索引
为维表补充记录
构建DWS模型
概述
设计DWS模型
DWS模型编辑界面
设计DWS模型的主流程
设置聚合表的主键
创建聚合表
为DWS层的表的设置键及索引
构建IDX模型
概述
设计IDX模型
创建业务指标表
创建业务指标维表
创建业务指标事实表
创建财务报表表
创建财务报表维表
创建财务报表事实表
创建财务指标表
创建财务指标维表
创建财务指标事实表
为IDX层的表的设置键及索引
构建STG模型
概述
创建ADS模型
概述
第2篇
指标篇
指标管理
概述
自动创建转换及作业
第3篇
集成篇
数据集成
概述
第4篇
质量篇
数据质量
概述
第5篇
资产篇
数据资产
概述
数据模型设计常见问题及解决方案
复杂的数据类型如何自动转换为数据仓库的数据类型?
多个相同业务系统的不同账套数据如何整合到一个ODS模型?
如何提升数据转换执行的速度?
对明细事实表聚合多少层合适?
事实表的数据量很大影响数据ETL性能怎么办?




















