ETL --事实表
每一个事实表通过表的粒度来定义。事实表的粒度是事件度量的定义。我们必须至始至终按照度量如何在 现实世界中理解来规定事实表的粒度。
所有的事实表包含了一组关联到维表的外键,而这些维表提供了事实表度量的上下文。大多数的事实表还 包括了一个或者多个数值型的度量字段,我们称之为事实。
每个事实表应该拥有一个主键,即使仅仅是出于管理的需要也应该在事实表设立主键。如果没有主键完整 性,那么事实表中有可能存在两个或者更多一样的记录,如何区分就不得而知了。
事实表的更新在维表之后。
按粒度将事实表分为三种类型:
1 交易粒度事实表
交易粒度表示的是在特定时间、空间点上的一次瞬间的测量。典型的例子是零售交易。交易粒度记录只 有度量事件发生的时候才被记录。这样,交易粒度事实表既可以为空的也可包含成百亿的记录。
2 周期快照事实表
周期快照事实表表现的是一个时间段,或者规律性的重复。这类表非常适合跟踪长期的过程,例如银行 账户和其他形式的财务报表。最常用的财务上的周期快照事实表通常有一个月粒度。在周期快照事实表中 的数据必须符合该粒度(就是说,他们必须量测的是同一个时间段中的活动)。
在周期快照事实表中的日期维度是周期。所以,对于月度周期快照的日期维度是月,周等一段时间的聚 合的维度。
3 聚合快照事实表
聚合快照事实表用于描述那些有明确开始和结束的过程,例如合同履行,保单受理以及常见的工作流。 聚合快照不适合长期连续的处理,如跟踪银行账户或者描述连续的生产制造过程,如造纸。
聚合快照事实表有几个特殊的属性。最明显的是量的日历日期外键。所有的聚合快照事实表都拥有一组 日期,按照表的标准模式来创建。如图:
- 订单日期
- 请求发货日期
- 实际发货日期
- 交付日期
- 上次付款日期
- 退货日期
- 结算日期
确保参照完整性
确保事实表的参照完整性,无非就考虑两种情况:
1 加载包含了错误外键的事实表记录;
2 删除了维表记录,而其主键在事实表中被使用。
对于不能保证参照完整性的时候,我们需要在设计的时候参照下图的流程进行:
其中:
1 在将事实数据加载到最终表之前,仔细的审核和准备数据,在删除任何维表记录之前,仔细地审核
从项目角度来讲,这种方法可行,在数据加载到事实表中最后一步就是查找事实表记录中的自然外键, 然后将他们替换成为维表中的代理键。这个过程的核心是一个特殊的查找表,它包含了每一个外来的自然键所使用的代理键的值。如果这张表被正确的维护,那么事实表中的记录将满足参照完整性。同样在维表 记录被删除的时候也需要尝试联结事实表和维表,只有在查询返回 null 的时候才能够删除该记录。
2 在每次事实表插入操作和每次维表删除操作动作发生时,使用数据库自己的参照完整性检查 简单,但是对于非常大的数据量的时候,肯定会影响性能。
3 加载后对事实表进行扫描检查,以发现和更正有问题的外键,解决参照完整性冲突。 这个方法开销超级大。可以作为第一个方法的补充。
Load 事实表的建议:
索引
我们知道索引在数据查找的时候能够提供很好的速度的提升,但是在数据加载的时候起到的却是相反作用。如果不能很好的处理,那些使用了大量索引的表将导致你的处理变得非常缓慢。在开始加载数据以前, 在前置任务中需要删除所有的索引,然后在后置任务中重建所有的索引。如果在加载过程中包含数据更新 (Update)操作,需要将那些要执行更新的记录和其他仅仅需要简单插入的记录分开,单独处理。简单的说,
请按照下列的步骤来避免索引导致的 ETL 处理瓶颈:
1. 从要插入的记录中分离那些需要执行更新操作的记录
2. 删除那些更新操作不需要的索引
3. 加载那些需要更新的记录
4. 删除剩余的索引
5. 通过批量加载方式执行数据插入
6. 重建所有的索引。
分区
表分区,可以按照时间进行分区,当分区不够的时候我们需要动态的新增分区。这种分区的优点是显而 易见的,当我们需要查找 10 年中某一个月的数据的时候,我们只需要查找这个月所在的分区,而不需要 全表查找。
回滚日志
我们知道回滚日志在一般的数据库中都是有这个功能的,他有他的好处,当进行误操作或其他的问题的 时候我们直接可以 redo。但是这个功能是否需要用在数据仓库中体现吗?答案是不需要!
原因: 1 所有的数据通过受 ETL 系统管理的进程输入;
2 数据批量的加载;
3 如果加载过程失败,数据可以很容易的重新加载。
对于 SQL INSERT 也是一样的,使用 SQL INSERT 语句会导致产生一些数据库日志,这些日志的目 的是错误恢复,但是对于数据仓库环境他们完全是多余的。如果加载程序失败了,ETL 工具能够从错误中 恢复,并从错误点开始处理剩下的部分,而不需要使用数据库的日志。
装载(Load)
1 单独处理数据插入。
很多 ETL 工具(以及一些数据库)提供 update else insert 功能(如下图)。 这个功能非常方便,且有着非常简单的数据流程逻辑,但是性能非常的低。ETL 过程对已经存在的数据的 更新逻辑中包括区分那些已经存储在事实表中记录和新数据。当处理大量的数据的任何时候,你想到的是 数据批量加载到数据仓库。但是不幸的是,很多批量导入工具不支持更改已经存在的记录。通过分离需要 更新的记录,你可以先处理更新,然后再执行批量的导入,这样获得最佳的加载性能。
2 利用批量加载工具。
使用批量加载工具,而非使用 SQL 语句加载大量数据可以降低数据库负载, 并极大的提高加载效率。
3 并行的加载。
在加载大量数据的时候,将数据物理上分成不同的逻辑段。如果加载 5 年的数据,你 可以做 5 个数据文件,每个文件中包含一年的数据。一些 ETL 工具允许你根据数据范围进行数据分区。 一旦数据被分成均等的部分,运行 ETL 过程并行的加载所有的分段。
4 最小化物理更新。
在表中更新记录操作需要耗用 DBMS 很多资源,最大的原因是数据库要生成回 滚日志。要最小化对回滚日志的操作,可以采用批量的加载数据。如何处理那些需要更新的数据呢?很多 情况下,最佳的方式是删除要更新的记录,然后批量的加载所有的数据。由于要做更新的数据和总的数据 量的比率会极大的影响优化方式的选择,因此需要一些反复测试来判断针对具体情况的最终加载策略。
5 在数据库外进行聚合。
在数据库之外进行排序,合并和聚合要比在 DBMS 内使用 SQL 语句,使用 COUNT 和 SUM 函数,GROUP BY 和 ORGER BY 关键字高效的多。ETL 过程需要将巨大数量的数 据进行排序、合并放在进入关系型数据库准备区之前完成。很多 ETL 工具提供这些功能,但是专门的工 具在操作系统级别执行排序/合并意味着为处理大数据集进行额外的投资。
更新和纠正事实记录
1 消除事实
这种方法是创建一个完整的错误的资料库,当发生某种错误的时候查找此资料库,从中找出该种错误事 实的纠正信息。
2 删除事实
有两种方法:
1 从物理直接删除,比较不推荐,当然了能够确保事实的参考完整性约束的话,删除最为简单;
2 在事实表中添加一个 flag 字段,初始化此字段,值为:TRUE,FALSE,TRUE 为不删除,FALSE 为删除。
无事实的事实表
每个事实表的粒度是一个事件量测。在某些情况下,事件可以发生,但是没有具体的测量值。例如一个 事实表用来记录交通事故事件。每个事件的发生是无可质疑的,维度设计是强制性且非常直接的。
聚合:
提高大型数据仓库性能最重要的手段是在基础记录上建立一组适当的聚合记录。聚合可以显著的提高性 能,一些情况下,查询的性能可以提高 100 倍,甚至 1000 倍。没有其他的方法可以获得如此的性能提 升。在 BIEE 中可以看到,当我们在逻辑层中给某个字段的聚合方式加入 count 之后,在展现的时候变能 够通过 count 的字段的其他字段进行分组计数了
相关文章:

ETL --事实表
每一个事实表通过表的粒度来定义。事实表的粒度是事件度量的定义。我们必须至始至终按照度量如何在 现实世界中理解来规定事实表的粒度。 所有的事实表包含了一组关联到维表的外键,而这些维表提供了事实表度量的上下文。大多数的事实表还 包括了一个或者多个数值型…...

手工数据采集耗时耗力?Smartbi数据填报实现数据收集分析自动化
企业在日常经营管理过程中,往往需要收集很多内外部的信息,清洗整理后再进行存储、分析、呈现、决策支持等各种作业,如何高效收集结构化数据是企业管理者经常要面对的问题。传统手工的数据采集方式不仅耗费了大量人力时间成本,还容…...

应用实战|微信小程序开发示例--多人聊天互动空间
“超能力”数据库~拿来即用,应用开发人员再也不用为撰写API而发愁。MemFire Cloud 为开发者提供了简单易用的云数据库(表编辑器、自动生成API、SQL编辑器、备份恢复、托管运维),很大地降低开发者的使用门槛。 本示例是…...

css:使用filter和backdrop-filter实现高斯模糊效果
背景 今天接到一个需求是,使用高斯模糊的效果对一个页面进行模糊处理,正好借这个机会来整理一下 css3 中高斯模糊的两个 API API介绍 filter 说明: 该 API 是一个过滤器,不仅能实现高斯模糊,还有很多比如颜色偏移、…...

科技大势怎么看 2023怎么干?
2023年,科技的走向依旧是世界各国的关注重点,各国在纷纷设立自己的科技战略目标外,还在潜心研究不同技术领域的科技趋势,试图通过科技占据国际竞争的制高点。 随着我国深入实施创新驱动发展战略,推动产业结构优化升级&…...

盘点曾经很火但消失了的8个软件
目录 1、飞信 3、暴风影音 4、千千静听 5、虾米音乐 6、快车下载 7、人人网 8、QQ农场 今天小编给大家分享曾经很火但消失了的8个软件,你都用过吗? 1、飞信 飞信是中国移动通信集团公司推出的一款短信、语音、视频通信应用程序。它于2007年推出&a…...

安卓 Frament + ViewPager使用示例
1. 组成架构 整个架构被包在一个外部Fragment之中,也可以放在一个Activity之中,随意。外部的fragment包含了两个组件,即途中的ViewPager和TabLayoutViewPager要套上一个FragmentStatePagerAdapter ,适配器负责new出一个个fragment…...

【银行测试】必看的四类题型:这可是最经典的一套题目了
目录:导读 一、根据题目要求写出具体LINUX操作命令 二、JMETER题目 三、根据题目要求写出具体SQL语句 四、测试案例设计题 金三银四面试面对大厂面试官提问,如何回答:花3天背完这100道软件测试面试题!银行测试的offer还不是手…...

跨源资源共享(CORS)-亲测理解,以及对http的状态,参数的理解和使用,对预检请求的触发和解决
跨源资源共享(CORS)-亲测理解,以及对http的状态,参数的理解和使用 跨源资源共享(CORS,或通俗地译为跨域资源共享)是一种基于HTTP 头的机制,该机制通过允许服务器标示除了它自己以外的…...

学生使用的台灯该怎么选择?2023适合学生房间的灯推荐
随着社会的进步发展,我们的生活水平越来越高,很多家庭的孩子都开始使用台灯这种家居产品,对于学习任务繁重的他们来说,台灯确实可以起到保护眼睛、提高学习专注度的作用。那么不知道朋友们是否了解过,台灯该怎么选择呢…...
23种设计模式-桥接模式(安卓应用场景介绍)
概念 桥接模式是一种结构型设计模式,它通过将抽象与其实现分离来解耦。它使用接口(抽象类)作为桥梁,将一个抽象类与其实现类的代码分别独立开来,从而使它们可以各自独立地变化。桥接模式的核心思想是“组合优于继承”…...
2021牛客OI赛前集训营-提高组(第四场) T3快速访问
2021牛客OI赛前集训营-提高组(第四场) 题目大意 有一棵n1n1n1个节点的树,根节点为0。给你一个kkk,定义集合Si{j∈Z∣max(1,i−k)≤j<i}∪{0}S_i\{j\in Z|\max(1,i-k)\leq j<i\}\cup\{0\}Si{j∈Z∣max(1,i−k)≤j<i…...

【大数据是什么】
大数据是什么大数据是做什么的?大数据主要有哪些职位 ?大数据运维工程师数据仓库开发工程师ETL工程师大数据开发工程师BI工程师算法工程师大数据平台开发工程师大数据架构师讲述一下自己的大数据学习之路大数据是做什么的? 2014年,…...

大数据 | centos7图形界面无法执行yum命令
大家好,今天是三八女神节了! 你知道吗?世界上第一位电脑程序设计师是名女性,Ada Lovelace (1815-1852)。 她是一位英国数学家兼作家,第一位主张计算机不只可以用来算数的人,也发表了第一段分析机用的演算…...

三维人脸实践:基于Face3D的渲染、生成与重构 <一>
face3d: Python tools for processing 3D face git code: https://github.com/yfeng95/face3d paper list: PaperWithCode 该方法广泛用于基于三维人脸关键点的人脸生成、属性检测(如位姿、深度、PNCC等),能够快速实现人脸建模与渲染。推荐…...
Javascript 设计模式
设计模式的五大设计原则(SOLID)单一职责:一个程序只需要做好一件事。如果功能过于复杂就拆分开,保证每个部分的独立开放封闭原则:对扩展开放,对修改封闭。增加需求时,扩展新代码,而不是修改源代码。这是软件设计的终极…...

JAVA-文档工具screw-gui
前言 为什么萌生了写文档工具得想法,因为在项目开发得过程中,经常需要补充一些文档,比如数据库文档、详细设计文档等等,文档与项目相绑定,在项目需求新增或变更时,文档也需要反反复复得修改。 1. 数据库…...

开源鸿蒙南向嵌入学习笔记——NAPI框架学习(一)
开源鸿蒙南向嵌入学习笔记——NAPI框架学习(一) 前言——系列介绍 本系列文章主要是记录笔者在鸿蒙南向的学习与工作中的知识点笔记记录,其中不止会针对鸿蒙中的学习问题进行思考与记录,也会对涉及到的一些嵌入式等其他领域知识&…...

Spring - Spring框架概述面试题总结
文章目录01. 什么是Spring?02. Spring框架的设计目标,设计理念,和核心是什么?03. Spring的优点是什么?04. Spring框架中都用到了哪些设计模式?05. Spring有哪些应用场景?06. Spring由哪些模块组成…...
学习python好就业么
Python的普及与数据挖掘、人工智能和数值计算等领域的蓬勃发展相关,但同时也与普遍编程需求的增加有关。 Python作为人工智能的头号语言,一方面会吸引大量计划从事人工智能的人来学习,另一方面自然也带动了网络上对这门“新语言”的关注和讨…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...

JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...

深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
日常一水C
多态 言简意赅:就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过,当子类和父类的函数名相同时,会隐藏父类的同名函数转而调用子类的同名函数,如果要调用父类的同名函数,那么就需要对父类进行引用&#…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准
城市路内停车管理常因行道树遮挡、高位设备盲区等问题,导致车牌识别率低、逃费率高,传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法,正成为破局关键。该设备安装于车位侧方0.5-0.7米高度,直接规避树枝遮…...

《信号与系统》第 6 章 信号与系统的时域和频域特性
目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...

pgsql:还原数据库后出现重复序列导致“more than one owned sequence found“报错问题的解决
问题: pgsql数据库通过备份数据库文件进行还原时,如果表中有自增序列,还原后可能会出现重复的序列,此时若向表中插入新行时会出现“more than one owned sequence found”的报错提示。 点击菜单“其它”-》“序列”,…...