当前位置: 首页 > news >正文

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赛前集训营-提高组&#xff08;第四场&#xff09; 题目大意 有一棵n1n1n1个节点的树&#xff0c;根节点为0。给你一个kkk&#xff0c;定义集合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…...

【大数据是什么】

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

大数据 | centos7图形界面无法执行yum命令

大家好&#xff0c;今天是三八女神节了&#xff01; 你知道吗&#xff1f;世界上第一位电脑程序设计师是名女性&#xff0c;Ada Lovelace (1815-1852)。 她是一位英国数学家兼作家&#xff0c;第一位主张计算机不只可以用来算数的人&#xff0c;也发表了第一段分析机用的演算…...

三维人脸实践:基于Face3D的渲染、生成与重构 <一>

face3d: Python tools for processing 3D face git code: https://github.com/yfeng95/face3d paper list: PaperWithCode 该方法广泛用于基于三维人脸关键点的人脸生成、属性检测&#xff08;如位姿、深度、PNCC等&#xff09;&#xff0c;能够快速实现人脸建模与渲染。推荐…...

Javascript 设计模式

设计模式的五大设计原则(SOLID)单一职责&#xff1a;一个程序只需要做好一件事。如果功能过于复杂就拆分开&#xff0c;保证每个部分的独立开放封闭原则:对扩展开放&#xff0c;对修改封闭。增加需求时&#xff0c;扩展新代码&#xff0c;而不是修改源代码。这是软件设计的终极…...

JAVA-文档工具screw-gui

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

开源鸿蒙南向嵌入学习笔记——NAPI框架学习(一)

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

Spring - Spring框架概述面试题总结

文章目录01. 什么是Spring&#xff1f;02. Spring框架的设计目标&#xff0c;设计理念&#xff0c;和核心是什么&#xff1f;03. Spring的优点是什么&#xff1f;04. Spring框架中都用到了哪些设计模式&#xff1f;05. Spring有哪些应用场景?06. Spring由哪些模块组成&#xf…...

学习python好就业么

Python的普及与数据挖掘、人工智能和数值计算等领域的蓬勃发展相关&#xff0c;但同时也与普遍编程需求的增加有关。 Python作为人工智能的头号语言&#xff0c;一方面会吸引大量计划从事人工智能的人来学习&#xff0c;另一方面自然也带动了网络上对这门“新语言”的关注和讨…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

PHP 8.5 即将发布:管道操作符、强力调试

前不久&#xff0c;PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5&#xff01;作为 PHP 语言的又一次重要迭代&#xff0c;PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是&#xff0c;借助强大的本地开发环境 ServBay&am…...

uniapp 小程序 学习(一)

利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 &#xff1a;开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置&#xff0c;将微信开发者工具放入到Hbuilder中&#xff0c; 打开后出现 如下 bug 解…...

git: early EOF

macOS报错&#xff1a; Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...

海云安高敏捷信创白盒SCAP入选《中国网络安全细分领域产品名录》

近日&#xff0c;嘶吼安全产业研究院发布《中国网络安全细分领域产品名录》&#xff0c;海云安高敏捷信创白盒&#xff08;SCAP&#xff09;成功入选软件供应链安全领域产品名录。 在数字化转型加速的今天&#xff0c;网络安全已成为企业生存与发展的核心基石&#xff0c;为了解…...

C++ 类基础:封装、继承、多态与多线程模板实现

前言 C 是一门强大的面向对象编程语言&#xff0c;而类&#xff08;Class&#xff09;作为其核心特性之一&#xff0c;是理解和使用 C 的关键。本文将深入探讨 C 类的基本特性&#xff0c;包括封装、继承和多态&#xff0c;同时讨论类中的权限控制&#xff0c;并展示如何使用类…...

CppCon 2015 学习:Simple, Extensible Pattern Matching in C++14

什么是 Pattern Matching&#xff08;模式匹配&#xff09; ❝ 模式匹配就是一种“描述式”的写法&#xff0c;不需要你手动判断、提取数据&#xff0c;而是直接描述你希望的数据结构是什么样子&#xff0c;系统自动判断并提取。❞ 你给的定义拆解&#xff1a; ✴ Instead of …...

GB/T 43887-2024 核级柔性石墨板材检测

核级柔性石墨板材是指以可膨胀石墨为原料、未经改性和增强、用于核工业的核级柔性石墨板材。 GB/T 43887-2024核级柔性石墨板材检测检测指标&#xff1a; 测试项目 测试标准 外观 GB/T 43887 尺寸偏差 GB/T 43887 化学成分 GB/T 43887 密度偏差 GB/T 43887 拉伸强度…...