第一家公司的老数仓技术架构:mysql+kettle,分层s(ods)层、b层(有点记不清了,一个是取数据,一个是做拉链)、m层(根据业务设计的表:贷前loan_before、贷后loan_after,并且是拉链表_h)/a层(a_fc_analysis_user_info/a_fc_analysis_transaction_info)
第一家公司的新数仓技术架构:sqoop+hive,分成ods层(所有表都是保存历史全量快照,除了es映射的日志表)、mid层(是拉链表,org_info数据量小、变化不大)、a层(a_fc_analysis_user_info/a_fc_analysis_transaction_info)
第二家公司的数仓:建立在阿里云EMR上,分层:ods层(快照,历史保存30/60/无限大天)、dwd层(模型)、dws层(报表)、rpt层(报表)
最近在开发一个业务数据支撑的时候,我想用其他同事写好的,rpt层的数据,这样依赖要避免!正确做法是开发模型,然后尽可能的复用。当我把几个表需要的用户数据做好一张表之后,我发现rpt层的sql量大大减少,依赖关系也变得很清晰。我有点理解分层的意义了——减少冗余的sql,避免重复执行浪费资源浪费时间,同时减少从ods到rpt的依赖的层数,便于后期维护。
¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥
分割线
¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥
20201106更新
去年对分层的好处的理解是:复用。除此之外,增加其他几点,总结如下:
1.复用性:避免重复开发、重复计算,节约资源。
2.易于理解:数仓是面向分析的,分层组织数据使数据更容易理解,比如在dwd层使用星型模型/宽表,便于理解和使用。
3.加快查询:比如使用宽表,避免了多次join,可以从单表快速支持需求产出结果;将数据做预聚合(轻度汇总层),减少计算量,加快查询速度。
4.条理清晰:每一层各司其职。
5.容错性:出现错误可以根据血缘关系快速进行错误的排查。比如在azkaban,可以看到flow的执行中的job的执行情况,非常直观。