数仓建模全流程?数值转换机怎么做?
数仓建模全流程?
1、建模流程
其实就是业务模型->概念模型->逻辑模型->物理模型的这样一个流程,下面我们详细解释一下各个模型阶段都要做什么
业务建模(需求沟通)
根据业务部门进行划分,理清部门之间的关系,然后将各个部门的具体业务程序化,与业务部门开会协商出需求的指标、保存年限、维度等等。
总体来讲,就是要知道他们需要哪些指标以及他们能提供哪些数据。
业务建模的时间最长,而且与公司实际的业务环境息息相关,因此在这里需要根据实际生产环境和业务需求确认好数据仓库使用的工具和平台。
主要解决业务层面的分解和程序化。搞清楚系统边界,确定好主题域
1
1
因此,业务建模阶段其实是一次和业务人员梳理业务的过程,在这个过程中,不仅能帮助我们技术人员更好的理解业务,另一方面,也能够发现业务流程中的一些不合理的环节,加以改善和改进。
概念建模|领域建模(画图想好怎么做)
将业务模型抽象化,分组合并类似的概念,细化概念,抽象出实体与实体之间的联系,理清各组概念之间的联系。
说白了就是画图,把指标需要的哪些数据封装到一个实体里,实体与实体之间的关联等等用ER图表示出来。
先画出局部ER图,最后再综合画出全局ER图。
主要是对业务模型进行抽象处理,生成领域概念模型
1
1
在原有数据库基础上建立了一个比较稳固完善的模型,因为数据仓库是对原有数据库系统中的数据进行集成和重组而形成的数据集合,所以数据仓库的概念模型设计,首先要对原有数据库系统加以分析理解,看在原有的数据库系统中“有什么”、“怎样组织的”和“如何分布的”等,然后再来考虑应当如何建立数据仓库系统的概念模型。
数据仓库的概念模型是面向企业全局建立的,它为集成来自各个面向应用的数据库的数据提供了统一的概念视图。
概念模型的设计是在较高的抽象层次上的设计,因此建立概念模型时不用考虑具体技术条件的限制。
领域概念建模就是运用了实体建模法,从纷繁的业务表象背后通过实体建模法,抽象出实体,事件,说明等抽象的实体,从而找出业务表象后抽象实体间的相互的关联性,保证了我们数据仓库数据按照数据模型所能达到的一致性和关联性
逻辑建模(表设计)
将概念模型实体化,具体考虑概念对应的属性,事件考虑事实属性,维度考虑维度属性。
总体来说就是建表,前面已经画出了关系图,这里只要将表里头有哪些字段考虑出来就可以,如果是事实表就考虑事实字段和业务主键,如果是维度表就考虑维度属性,SCD策略等等。在这里需要确定数据粒度,如果多个指标都用到一个字段,则取粒度最小的指标。如果不确定指标的量度,则取毫秒级作为粒度。
物理建模(建表)
综合现实的大数据平台、采集工具、etl工具、数仓组件、性能要求、管理要求等多方面因素,设计出具体的项目代码,完成数仓的搭建。
2、建模的过程
假设我们现在在构建一张订单表
从多个维度进行统计组合,形成多维度数据集,来从多个角度观察业务过程的好坏
1
1
选择业务过程
确认哪些业务处理流程是数据仓库应该覆盖的,是维度方法的基础。因此,建模的第一个步骤是描述需要建模的业务流程。例如,需要了解和分析一个零售店的销售情况,那么与该零售店销售相关的所有业务流程都是需要关注的。为了描述业务流程,可以简单地使用纯文本将相关内容记录下来,或者使用“业务流程建模标注”(BPMN)方法,也可以使用统一建模语言(UML)或其他类似的方法。
业务过程就是需要那种业务场景下产生的订单表(划分到那个业务线和数据域)
业务过程就是用户下单的订单记录表
选择数据域
申明粒度
粒度就是确认一条记录代表的含义或者是细化到何种程度(一条记录代表一个订单还是多个订单,如拼团的时候团长的单)
在选择维度和事实前必须声明粒度,因为每个候选维度或事实必须与定义的粒度保持一致。在一个事实所对应的所有维度设计中强制实行粒度一致性是保证数据仓库应用性能和易用性的关键。
从给定的业务流程获取数据时,原始粒度是最低级别的粒度。建议从原始粒度数据开始设计,因为原始记录能够满足无法预期的用户查询。汇总后的数据粒度对优化查询性能很重要,但这样的粒度往往不能满足对细节数据的查询需求。
不同的事实可以有不同的粒度,但同一事实中不要混用多种不同的粒度。维度模型建立完成之后,还有可能因为获取了新的信息,而回到这步修改粒度级别。
确认维度
维度的粒度必须和第二步所声明的粒度一致。
维度表是事实表的基础,也说明了事实表的数据是从哪里采集来的。
典型的维度都是名词,如日期、商店、库存等。维度表存储了某一维度的所有相关数据,例如,日期维度应该包括年、季度、月、周、日等数据。
确认事实
这一步识别数字化的度量,构成事实表的记录。它是和系统的业务用户密切相关的,因为用户正是通过对事实表的访问获取数据仓库存储的数据。大部分事实表的度量都是数字类型的,可累加,可计算,如成本、数量、金额等。
3、模型设计的思路
业务需求驱动,数据驱动,构造数据仓库有两种方式:一是自上而下,一是自下而上。
自上而下
Bill Inmon先生推崇“自上而下”的方式,即一个企业建立唯一的数据中心,就像一个数据的仓库,其中数据是经过整合、经过清洗、去掉脏数据的、标准的,能够提供统一的视图。要建立这样的数据仓库,并不从它需要支持哪些应用入手,而是要从整个企业的环境入手,分析其中的概念,应该有什么样的数据,达成概念完成整;
自下而上
Ralph Kimball先生推崇“自下而上”的方式,他认为建设数据仓库应该按照实际的应用需求,加载需要的数据,不需要的数据不要加载到数据仓库中。这种方式建设周期较短,客户能够很快看到结果。(针对客户的需求,需求要什么就做什么)
4、模型落地实现
按照命名规范创建表
开发生成维表和事实表的代码
进行代码逻辑测试,验证数据加工逻辑的正确性代码发布,加入调度并配置相应的质量监控和报警机制
数仓建模典型的两种数据仓库建模的理论是维度建模和基于主题域的实体关系建模,这两种方式分别以Kimball和Immon两位大师为代表。
维度建模以数据分析需求为驱动,倡导总线架构:一致的事实和一致的维度,这种数据模型易于用户理解和数据分析操作。基于主题域的实体关系建模以源系统数据为驱动,整合企业的所有数据,站在企业级的高度对数据进行抽象。
整合,采用3NF的实体关系理论建模,这种数据建模方式以更为抽象的方式尝试建立一个相对稳定的数据模型,并能描述企业级的数据关系。在工业界往往把两种方式结合起来运用数据仓库的不同数据层次结构中。
数值转换机怎么做?
创建一个数值转换机可以分为以下步骤:
确定输入和输出格式:数值转换机的输入和输出格式需要明确。例如,输入的数值是整数、浮点数还是其他类型的数据,输出的数值是二进制、十进制、十六进制还是其他进制。
设计转换算法:根据确定的输入和输出格式,选择适当的转换算法。例如,如果要将十进制数转换为二进制数,可以使用除2取余法。
编写代码:根据转换算法,编写相应的代码。可以使用任何编程语言来实现数值转换机,如Python、Java、C++等。
测试和调试:运行代码并测试转换结果是否正确。如果有错误,需要对代码进行调试和修改,确保转换结果的准确性。
优化和改进:根据需求和实际情况,对数值转换机进行优化和改进,提高转换效率和精度。
以下是一个简单的Python代码示例,用于将十进制数转换为二进制数:
python
复制
def decimal_to_binary(decimal_num):
if decimal_num == 0:
return '0'
binary_num = ''
while decimal_num > 0:
binary_num = str(decimal_num % 2) + binary_num
decimal_num //= 2
return binary_num
这个示例代码将输入的十进制数转换为二进制数,并返回二进制数的字符串表示形式。可以根据实际需求进行修改和扩展,实现其他类型的数值转换。
制作数值转换机需要一定的编程知识和电子基础。以下是一个简单的数值转换机的制作方法:
确定转换类型:首先,你需要确定你的数值转换机需要支持哪些类型的转换。例如,你可以选择将十进制数转换为二进制数、八进制数或十六进制数。
设计电路:根据确定的转换类型,设计相应的电路。你需要使用数字逻辑门电路来实现转换。对于每种类型的转换,你需要使用不同的逻辑门电路组合。
选择合适的元件:根据设计的电路,选择合适的电子元件来构建转换机。你需要使用一些基本的电子元件,如电阻、电容、电感、二极管和晶体管等。
搭建电路:将选定的电子元件按照设计的电路图进行搭建。确保连接正确,并注意元件的极性和方向。
编写程序:对于一些复杂的转换,你可能需要编写程序来控制转换过程。程序可以使用任何你熟悉的编程语言来编写。
测试和调试:完成电路搭建和程序编写后,进行测试和调试。确保数值转换机能够正确地进行转换,并处理各种输入情况。
需要注意的是,制作数值转换机需要一定的电子技术和编程知识。如果你是初学者,建议先学习一些基本的电子和编程知识,再进行实践。