西平县

首页 » 常识 » 诊断 » 数仓表对于ldquo数据人rdqu
TUhjnbcbe - 2021/3/11 2:06:00
BANGKOK这个元旦跟着顶奢设计 http://www.dulantete.com/ytwj/20055.html

作为一个数据菜鸟,我们总是会听到一些别人“习以为常”的黑话。例如,在数据仓库中,必不可少地要和表、数据打交道。但是一堆不知所云的“表”,总会让我们头大。

01全量表\增量表\快照表

我们先从几个物理概念入手理解什么是流量、存量、增量(1)存量:系统在某一时点时的所保有的数量;(2)流量:是指在某一段时间内流入/流出系统的数量(3)增量:则是指在某一段时间内系统中保有数量的变化情况,但是常规意义上就是增加的量,增量=流入量–流出量

全量表

全量表无分区,每天凌晨流程执行完后,表中数据是截止到前一天的数据。以上图为例,查询全量表数据,就是的数据:ABC,以此类推。

增量表

增量表按天分区,分区字段为dt=YYYYMMDD,每一天的分区会存放在那一天所产生的增量数据(insert,update的数据),注意目前增量表的同步方式不会包含历史数据,即只存放增量数据。以上图为例,我们最早可以在查询的增量表数据,为DE,即比多出来的数据。

快照表

快照表按天分区,分区字段为dt=YYYYMMDD,每一天的数据都是截止到那一天的全量数据。以上图为例,我们最早可以在查询的快照数据,为ABC。

02拉链表\流水表\中间表

拉链表

维护历史状态以及最新状态数据的一种表,拉链表根据拉链粒度的不同,可以方便的还原出拉链时点的操作记录。拉链表也是分区表,分区字段一般为start_date、end_date。如果我们想获取某一天全量的数据,可以通过表中的start_date和end_date来做筛选,选出固定某一天的数据。例如我想取截止到的全量数据,其where过滤条件就是wherestart_date="and=""end_date=""="。

拉链表和增量表的表结构基本一样。适用于表的数据量很大,表中的部分字段会被update更新操作,而我们需要查看某一个时间点或者时间段的历史快照信息,如统计账户及客户的情况。如果每天保留一份全量数据,就浪费了存储空间,有时可能业务统计也有点麻烦;如果保留一份最新的全量数据,就看不到数据的变化,所以拉链表是个很好的选择。

流水表

流水表:记录表的每一个修改,反映实际记录的变更。

流水表也为分区表流水表有多方面的作用,如记录与结算相关的金额信息,与结算侧的数据核对;流水有不同的状态:未就绪、已就绪、已发送,通过不同的状态,流水可以做不同的动作以流转到下一状态,达成最终通知结算的目的。

中间表

简单来说,中间表是数据库中专门存放中间计算结果的数据表。

第一种情况,计算sql计算无法一步到位,需要经过复杂的设计,要经过几个过度才能得到想要的结果。

第二种情况,实时计算所需要时间过长。或者因为数据量大或者因为计算太复杂,比如某一时间点前一段时间计算好结果,当到达改时间点使用中间表顶上。

第三种情况,当数据源比较多(通常情况),需要多表混合计算整合,这时导入数据库形成中间表是必要的。

03宽表vs窄表

宽表:

从字面意义上讲就是字段比较多的数据库表。

通常是指业务主题相关的指标、维度、属性关联在一起的一张数据库表。由于把不同的内容都放在同一张表存储,宽表已经不符合三范式的模型设计规范,坏处就是数据冗余,好处是查询性能的提高与便捷。这种宽表的设计广泛应用于数据挖掘模型训练前的数据准备阶段,通过把相关字段放在同一张表中,可以大大提高数据挖掘模型训练过程中迭代计算时的效率问题。(一句话,空间换时间,便于训练迭代、减少表关联数量,修改少量数据时不需要该多张表。)

窄表:

严格按照数据库设计三范式。尽量减少数据冗余,但是缺点是修改一个数据可能需要修改多张表。

04维度表vs事实表

事实表

每个数据仓库都包含一个或者多个事实数据表。事实表每行对应一个业务过程事件度量。包括数字度量和与维度表相关联的外键。

事实表分类

·事务事实表:对应现实中空间或时间上某点度量事件。仅当存在度量事件时才会插入行。一般是原子维度。(典型的销售表)日期,产品,地区,客户,数量;

·周期快照事实表:每行汇总了发生在某一标准周期的多个度量事件,或者记录了快照时间点业务活动度量值,快照表能展现出更多重要的过程,与事务事实表互相补充。粒度是周期性的,密度是均匀的,即使周期内未发生活动,也会在表中每个事实插入0或空值或未发生变化的值的行。(典型的库存表)日期,产品,仓库,期初数量,期末数量。

·累计快照事实表:每行汇总了业务过程开始和结束之间已知步骤的度量事件,通常包含一个状态维度的外键,用于更新状态维度以反映当前行整个流程的最新状态。当业务过程开始时,会插入一行,当业务过程步骤发生状态变化时,会修改该行。(典型的送货表)产品,客户,下单时间,出库时间,签收时间。

·无事实的事实表:无具体度量值,事件仅记录一系列某时刻发生的多维事实。如某天学生参加课程的事件,其中没有数值,但事件包含日期、学生、教师、地点等属性信息。或者通过每个周期记录每个促销产品形成促销事实表,再用该表跟销售事实表做差集,找到在促销但未发生销售事实的产品。用来

1
查看完整版本: 数仓表对于ldquo数据人rdqu