上篇文档 非结构化数仓建模和Schema-Less OLAP构建(零) 我们宏观讲述了如何基于bitmap来作为非结构化建模
的底层数据结构,以及在存储、计算和应用方面所带来的好处。那么本节开始将从微观的角度,讲述非结构化数仓具体的建设思路,bitmap数据结构的使用,以及如何搭建Schema-Less OLAP。
由于非结构数仓建模是一套完整的建模体系,区别于当前分层建模的思路。所以本节将结合其中一部分进行讲述,且如何让它在分层数仓建模中起到一个补充优化的作用。
PS:完整的建模思路将在该系列文章最后进行讲述(挖坑)。
在分层数仓中,为了便于下游分析,我们一般不会将特别明细的数据暴露给下游使用,通常我们会抽出大宽表「预聚合层」。比如如下用户行为数据(table0
):
日期 | 设备ID | 城市 | 操作系统 | 其他维度... | 访问次数 | 访问时长 | 分享次数 | 其他指标... |
---|---|---|---|---|---|---|---|---|
2022-01-01 | 1 | 北京 | Windows | ... | 1 | 100 | 3 | ... |
2022-01-01 | 1 | 上海 | Windows | ... | 1 | 200 | 1 | ... |
2022-01-01 | 2 | 北京 | Mac | ... | 1 | 100 | 1 | ... |
... |
当然上面的数据已经是「设备」(也可以是其他实体)的粒度了,通常情况下,数据量还是特别大,需要上卷一些维度
再进一步做预聚合,比如(table1
):
日期 | 城市 | 操作系统 | 其他维度... | 设备数 | 访问次数 | 访问时长 | 分享次数 | 其他指标... |
---|---|---|---|---|---|---|---|---|
2022-01-01 | 北京 | Windows | ... | 1 | 1 | 100 | 3 | ... |
2022-01-01 | 上海 | Windows | ... | 1 | 1 | 200 | 1 | ... |
2022-01-01 | 北京 | Mac | ... | 1 | 1 | 100 | 1 | ... |
... |
或者这样(table2
):
日期 | 城市 | 其他维度... | 设备数 | 访问次数 | 访问时长 | 分享次数 | 其他指标... |
---|---|---|---|---|---|---|---|
2022-01-01 | 北京 | ... | 2 | 2 | 200 | 4 | ... |
2022-01-01 | 上海 | ... | 1 | 1 | 200 | 1 | ... |
... |
这样利用空间换时间的方式,可以让下游按需使用最佳的表来优化计算路径,从而减少计算时间、计算资源,保证数据产出的及时性。
但是这种方式的确定也很明显:
table1
和table2
中的「设备数」无法支持维度上卷。最终可能大多数还是使用table0
, 1和2
使用比较少。