数仓中主题域还是数据域?
引言:作为数据开发的同学,相信大家不管在面试过程中,还是工作过程中一定会被问到主题和数据域相关的问题,今天我们来聊一下这两者简单的区别
我们在刚开始工作的时候听到最多的就是,数仓是【面向主题】的,当时包括我在内都理解为数仓=按照主题划分,但是后面随着工作年限的增长越发感觉不对劲。因为如果按照这样的逻辑去思考,那其实数据域和主题域并没有实质性的区别,只是名称上略有不同而已。
其实数仓最大的作用就是将数据抽取、转化,提供给业务同学供其进行数据分析,为业务进行决策时提供有力的数据支撑。从这个角度来看,所谓面向主题,应当理解为解决xxx事情,而非按照xxx来去做,换言之,【面向主题】=【解决主题分析】。
那么也就是说主题是用来划分分析目的的,例如我们要为业务提供销售分析、流量转化分析相关报表。从数据分层上来看,主题应当是在数仓中最后一个层级,用来区分报表分析,一方面保障了核心问题不会跑偏,另一方面减少重复分析目的的报表的开发。
接着我们来看数据域,在《大数据之路:阿里巴巴大数据实践》中有说明:面向业务分析,将业务过程或者维度进行抽象的集合。其中,业务过程可以概括为一个个不可拆分的行为事件,在业务过程之下,可以定义指标;维度是指度量的环境,如买家下单事件,买家是维度。为保障整个体系的生命力,数据域是需要抽象提炼、并且长期维护和更新的,但不轻易变动。在划分数据域时,既能涵盖当前所有的业务需求,又能在新业务进入时无影响的被包含进已有的数据域和扩展新的数据域。这里说人话就是在数仓dwd层级和dws层级时用来划分业务过程的,在实际开发中,我们经常是通过业务过程来构建事实表,一般来说是一个业务过程一张事实表,但是随着业务过程增多,不同业务线中相同业务过程也会慢慢出现,这就会导致一个业务过程会存在两张完全不同的事实表,所以这里同样需要将业务过程按照某种规则来进行统一区分。一般来说按照后端的项目/产品的业务系统来进行划分,因为数据同学本身并不是数据的创造者,而是数据的搬运工,比较依赖上游的数据。
那么总结来看,就是数据域主要来划分dwd层、dws层用于事实表&指标体系构建;主题域主要来划分报表分析目的,这里同样影响到了命名相关的规范。