数据仓库中的粒度
数仓粒度确定的是否合理,很大程度决定了在设计和实现的过程中所遇到问题的控制程度,如果没有确定合理的数据粒度,那么会在各种意想不到的环节出现问题。
如何进行粒度确定?
一、占用空间估算
很容易考虑到的是,在数仓粒度的确定起始,需要符合自己的具体业务或者具体需求,作为确定的起点,我们需要实现估测一下数仓的行数和所需要的数据存储量。这个步骤适合于任意数仓建立粒度的场景,即是根据数仓的数量级指标确定粒度。
通用的有一个仓库所占的空间的算法
- 对每一个已知的表,计算一行所占的字节数,这里需要计算出最大的估计值和最小估计值
- 估算一年内可能产生的最大行数和最小行数
- 估算五年内可能产生的最大行数和最小行数
- 对表进行估算,就是一年的最大行数或最小行数乘以字节数最大或者最小估算,除此还要考虑索引的空间占用
- 对数仓中所有的已知表进行此中操作
一旦能够估算出一年的数仓占用空间,就可以用同样的方法推算五年的占用空间。
二、确定双重粒度/单一粒度
以一年期为例,如果总的行数小于 10000行,那么任何的设计和实现实际上都是可以的。如 果一年期总行数是 100000行或更少,那么设计时就需小心谨慎。如果在头一年内总行数超过1000000行,那么就要请求采取双重粒度级。如果在数据仓库环境中总行数超过 10 000 000行 的话,必须强制采取双重粒度级,并且在设计和实现中应该小心谨慎。
值得注意的一点是,数仓存储时总的字节数与数仓的设计和粒度是几乎没有关系的,也就是粒度无论怎么选一样的数据在数仓中的所占空间是没有联系的。
三、确定粒度的级别
经验规则,也就是猜测,进行合理的猜测,这需要一些常识和直觉,就好像在编写java代码的时候,方法是否需要返回值,需要的返回值类型这样。
当然了,在猜测的时候只是一个开端,还需要一定数量的反复分析来改进这个猜测。这又好比是建立索引,一个合适的索引通常是经过不断的修改和测试,最终用户使用之后得到的后台反馈,都是这样的一个循环操作。
四、总结
选择合适的粒度级别是设计成功的关键,总而言之,粒度的确定可以看作是一个很宽泛的事情,很依赖于主观常识,先建立一部分,类似于训练区,让用户访问然后做好反馈,根据反馈意见适当的调整粒度级别。数仓的特点就是只有当决策支持分析之后,才可以看到哪些是真正的需求。