大家好,我是摇光~
数据仓库中的表类型多种多样,每种表都在数据管理和分析中发挥着特定的作用。以下是一些常见的数据仓库表类型:
一、基础表类型
1、维度表(Dimension Table)
其实维度表就是需要看你从什么维度进行数据分析,举两个例子:
例如: 你是银行的业务分析员,你需要分析各个分行的存款信息,那么各个分行就是你的维度,那么就可以建立一个“机构维度表”,里面存放【机构ID号、机构名称、上级机构】等机构信息。
例如: 你是淘宝卖家,你需要分析哪款产品最热销,那么产品就是你的维度,就可以创建一个“产品信息表”,里面存放【产品ID、产品名称、产品创建日期、是否热销产品】等产品信息。
定义:维度表提供了分析过程中所需的上下文信息,存储描述性信息,如产品信息、客户信息、时间信息等,为事实数据提供解释和分类。
特点:维度表中的数据通常是对事实的各个方面进行描述。
以下列举了一个产品信息表,左边是表结构,右边是表数据:
2、事实表(Fact Table)
事实表其实就是真实发生的一则记录,举两个例子:
例如:你是淘宝卖家,现在一个买家买了你的一个商品,这时候产生的记录就是事实表的一条数据。包含【订单ID、交易时间、买家ID、商品ID、下单金额、支付金额、折扣金额、发货时间】等等信息。
例如:你是银行的柜员,有人在你这存款500块,这时候发生的事情就是事实表的一条记录,包含【交流流水ID、客户号、交易时间、购买产品、交易柜员号】等等信息。
定义:事实表是通过各种维度和一些指标值的组合来确定一个事实的表。
特点:事实表中的数据是通过各种维度聚合而来的,用于记录具体的事件或交易数据。例如,销售事实表可能包含销售订单的数量、金额等关键指标,这些指标与产品维度、时间维度等相关联。
插一个问题
,可能大家要问为什么把维度表单独列出来。比如买了一件产品,事实表可以直接记录产品信息,为什么非得把产品信息单独存一张表。
其实理由很简单,就是节省空间。发生一条事实表的记录,如果把客户信息、产品信息,都揉到一张表,这张表占用的存储空间就会增大,到时候增删改查都会耗时长。
所以我们在事实表中,含有维度表的数据,例如客户信息、产品信息,我们只需要存储产品号、客户号。之后我们用事实表和维度表进行关联,就可以取到数据。
3、实体表
实体表其实和维度表有点重复,因为实体就是实实在在存在的一种事物,比如人、设备、产品、供应商等。这些表也可以归到实体表中,只是有些企业会划分比较细,然后就把这一类存在的事物划为实体表。
定义:实体表存储的是客观存在的事物数据。
示例:设备表,因为设备是客观存在的,所以可以设计一个实体表来存储设备的相关信息。
二、特殊用途表类型
4、快照表(Snapshot Table)
快照表可以联想到相机照照片,照片成形的那一刻,封印了那时候的状态。快照表也就是体现了某一时刻的状态,举个例子:
例如 银行数据,银行经常会对月末数据进行统计分析,所以经常在月度的时候保存一些快照表,来展示这个月末账户的余额等信息。
定义:快照表用于记录某一时刻的数据状态,相当于在某个时间点对事务表数据的静态复制。
特点:快照表通常有时间分区,它可以帮助分析在特定时间点的数据情况,适用于月末、季度末或年度末的财务结算等场景。
补充一下
:快照表经常采用时间作为表的分区,这样查询速度会比较快。
5、增量表(Incremental Table)
数据仓库一般都是今天跑昨天发生的数据,增量表也就是昨天新增进来的数据,举个例子:
例如 昨天银行有个人新开了一户,且存了一笔钱,那么数据库的增量表就只会记录这两条数据,而不会把以前所有开户的数据都跑入增量表。
定义:增量表用于记录每天新增的数据。
特点:与快照表不同,增量表只记录每天有变化的数据,即差集。这有助于减少数据存储空间,并提高数据处理的效率。
6、拉链表(SCD Table,Slowly Changing Dimension Table)
拉链表这里着重解释一下,举个例子:
你现在有一张产品信息表,存放着产品的数据,如存放了一条 iPhone15 手机的信息,在2024/2/10 - 2024/6/1 价格为 5000,但是因为 618 打折,2024/6/2 - 2024/6/30 价格为 4800。
这时候我们需要历史数据,如果每天都记录一遍数据在产品信息表里面,我们如果要查询 2024/5/1的数据,也是可以查到的,但是这样记录就会造成数据冗余。
所以我们可以将产品表存成拉链表:
像上面这种,我们只需要存放两条数据,如果需要查询 2024/5/1 的价格数据,就可以用开始日期和结束日期来进行查询:
select * from 产品信息表
where 产品ID = 'PA00001'
and 开始日期 < ‘2024/5/1’ and 结束日期 > '2024/5/1'
这样是不是可以看出明显的差别,由于我表的字段信息比较小,可能感受不到存储量的变化,但是如果字段信息多,数据量大又不经常变化的,这样就会节省很多空间。
定义:拉链表是一种维护历史状态以及最新状态数据的表。
特点:拉链表也是分区表,通过开始时间(start_date)和结束时间(end_date)字段来记录数据的历史状态和最新状态。它可以帮助追踪数据的变化历史,适用于需要维护数据历史状态的场景。
7、全量表
全量表可以和增量表进行对比,增量表只取昨天新增的数据,但是全量表,是取全部的数据,并且覆盖之前的数据。
定义:全量表没有分区,表中的数据是前一天的所有数据。
特点:每次往全量表里面写数据都会覆盖之前的数据,因此全量表不能记录历史数据情况,只有截止到当前最新的、全量的数据。
8、汇总表(Summary Table)
定义:汇总表用于存储经过汇总处理的数据。
特点:汇总表通过对事务表中的数据进行聚合处理后,存储分析所需的关键指标。这有助于快速查询和分析数据,常用于生成各类报表,如销售报表、库存报表等。
以上就是数据仓库中常见的八大表格,各个表格都有自己的用处,善于利用这些表格,可以提高数据库的存储量和查询速度。