06 | 数据模型无法复用,归根结底还是设计问题

你好,我是郭忆。

上一节课,我带你了解了数据中台如何管理指标,如果我们把指标比喻成一棵树上的果实,那模型就是这棵大树的躯干,想让果实结得好,必须让树干变得粗壮。

先来看一幕真实的场景。

大多数公司的分析师会结合业务做一些数据分析(需要用到大量的数据),通过报表的方式服务于业务部门的运营。但是在数据中台构建之前,分析师经常发现自己没有可以复用的数据,不得不使用原始数据进行清洗、加工、计算指标。

由于他们大多是非技术专业出身,写的SQL 质量比较差,我甚至见过5层以上的嵌套。这种SQL 对资源消耗非常大,会造成队列阻塞,影响其他数仓任务,会引起数据开发的不满。数据开发会要求收回分析师的原始数据读取权限,分析师又会抱怨数仓数据不完善,要啥没啥,一个需求经常要等一周甚至半个月。分析师与数据开发的矛盾从此开始。

这个矛盾的根源在于数据模型无法复用,数据开发是烟囱式的,每次遇到新的需求,都从原始数据重新计算,自然耗时。而要解决这个矛盾,就要搞清楚我们的数据模型应该设计成什么样子。

什么才是一个好的数据模型设计?

来看一组数据,这两个表格是基于元数据中心提供的血缘信息,分别对大数据平台上运行的任务和分析查询(Ad-hoc)进行的统计。

下图是数仓分层架构图,方便你回忆数据模型分层的设计架构:

我们首先来看表1。表1中有2547张未识别分层的表,占总表6049的40%,它们基本没办法复用。 重点是在已识别分层的读表任务中,ODS:DWD:DWS:ADS的读取任务分别是1072:545:187:433,直接读取ODS 层任务占这四层任务总和的47.9%,这说明有大量任务都是基于原始数据加工,中间模型复用性很差。

我们再来看看表2,在已识别的分层的查询中,ODS:DWD:DWS:ADS的命中的查询分别是892:1008:152:305,有37.8%的查询直接命中ODS层原始数据,说明DWD、DWS、ADS层数据建设缺失严重。尤其是ADS和DWS,查询越底层的表,就会导致查询扫描的数据量会越大,查询时间会越长,查询的资源消耗也越大,使用数据的人满意度会低。

最后,我们进一步对ODS层被读取的704张表进行分解,发现有382张表的下游产出是DWS,ADS,尤其是ADS达到了323张表,占ODS层表的比例45.8%,说明有大量ODS层表被进行物理深加工。

通过上面的分析,我们似乎已经找到了一个理想的数仓模型设计应该具备的因素,那就是“数据模型可复用,完善且规范”。

如何衡量完善度

DWD 层完善度:衡量DWD层是否完善,最好看ODS层有多少表被DWS/ADS/DM层引用。因为DWD以上的层引用的越多,就说明越多的任务是基于原始数据进行深度聚合计算的,明细数据没有积累,无法被复用,数据清洗、格式化、集成存在重复开发。因此,我提出用跨层引用率指标衡量DWD的完善度。

跨层引用率:ODS层直接被DWS/ADS/DM层引用的表,占所有ODS层表(仅统计活跃表)比例。

跨层引用率越低越好,在数据中台模型设计规范中,我们要求不允许出现跨层引用,ODS层数据只能被DWD 引用。

DWS/ADS/DM 层完善度:考核汇总数据的完善度,我认为主要看汇总数据能直接满足多少查询需求(也就是用汇总层数据的查询比例衡量)。如果汇总数据无法满足需求,使用数据的人就必须使用明细数据,甚至是原始数据。

汇总数据查询比例:DWS/ADS/DM层的查询占所有查询的比例。

你要明确的是,这个跟跨层引用率不同,汇总查询比例不可能做到100%,但值越高,说明上层的数据建设越完善,对于使用数据的人来说,查询速度和成本会减少,用起来会更爽。

如何衡量复用度

数据中台模型设计的核心是追求模型的复用和共享,通过元数据中心的数据血缘图,我们可以看到,一个比较差的模型设计,自下而上是一条线。而一个理想的模型设计,它应该是交织的发散型结构。

我提出用模型引用系数作为指标,衡量数据中台模型设计的复用度。引用系数越高,说明数仓的复用性越好。

模型引用系数:一个模型被读取,直接产出下游模型的平均数量。

比如一张DWD层表被5张DWS 层表引用,这张DWD层表的引用系数就是5,如果把所有DWD层表(有下游表的)引用系数取平均值,则为DWD层表平均模型引用系数,一般低于2比较差,3以上相对比较好(经验值)。

如何衡量规范度

表1中,超过40%的表都没有分层信息,在模型设计层面,这显然是不规范的。除了看这个表有没有分层,还要看它有没有归属到主题域(例如交易域)如果没有归属主题域,就很难找到这张表,也无法复用。

其次,你要看表的命名。拿stock这个命名为例,当你看到这个表时,知道它是哪个主题域、业务过程?是全量数据的表,还是每天的增量数据?总的来说,通过这个表名获取的信息太有限了。一个规范的表命名应该包括主题域、分层、表是全量快照,还是增量等信息。

除此之外,如果在表A中用户ID的命名是UserID,在表B中用户ID 命名是ID,就会对使用者造成困扰,这到底是不是一个东西。所以我们要求相同的字段在不同的模型中,它的命名必须是一致的。

讲了这么多,你要如何吸收经验呢?在这里,我给你几点建议。

  • 你可以拿着这些指标去评估一下,自己的数仓现状如何。
  • 然后制订一些针对性的改进计划,比如把这些不规范命名的表消灭掉,把主题域覆盖的表比例提高到90%以上。
  • 在尝试完一段时间的模型重构和优化后,再拿着这些指标去测一测是不是真的变好了。我见过很多数据开发在向上级汇报工作时,喜欢用重构了多少模型说明工作成果,很多老大会想,这些重构到底对数据建设有多少帮助?有没有一些量化的指标可以衡量?我想有上面的知识,你可以应对这个问题了。

现在你知道什么是好的数仓设计了,可目前已经存在了大量烟囱式开发,具体怎么做才能让它变成一个数据中台呢?

如何从烟囱式的小数仓到共享的数据中台

建设数据中台本质就是构建企业的公共数据层,把原先分散的、烟囱式的、杂乱的小数仓,合并成一个可共享、可复用的数据中台(我在03讲提到过,建议你回顾一下)。结合我在网易的实践经验,我给你几点建议。

第一,接管ODS层,控制源头。

ODS是业务数据进入数据中台的第一站,是所有数据加工的源头,控制住源头,才能从根本上防止一个重复的数据体系的出现。

数据中台团队必须明确职责,全面接管ODS 层数据,从业务系统的源数据库权限入手,确保数据从业务系统产生后进入数据仓库时,只能在数据中台保持一份。这个可以跟业务系统数据库管理者达成一致,只有中台团队的账号才能同步数据。

ODS层表的数据必须和数据源的表结构、表记录数一致,高度无损,对于ODS 层表的命名采用ODS_业务系统数据库名_业务系统数据库表名方式,比如ods_warehous_stock,warehous是业务系统数据库名,stock是该库下面的表名。

第二,划分主题域,构建总线矩阵。

主题域是业务过程的抽象集合。可能这么讲,稍微有点儿抽象,但其实业务过程就是企业经营过程中一个个不可拆分的行为事件,比如仓储管理里面有入库、出库、发货、签收,都是业务过程,抽象出来的主题域就是仓储域。

主题域划分要尽量涵盖所有业务需求,保持相对稳定性,还具备一定的扩展性(新加入一个主题域,不影响已经划分的主题域的表)。

主题域划分好以后,就要开始构建总线矩阵,明确每个主题域下的业务过程有哪些分析维度,举个例子:

第三,构建一致性维度。

售后团队的投诉工单数量有针对地区的分析维度,而配送团队的配送延迟也有针对地区的分析维度,你想分析因为配送延迟导致的投诉增加,但是两个地区的分析维度包含内容不一致,最终会导致一些地区没办法分析。所以我们构建全局一致性的维表,确保维表只存一份。

维度统一的最大的难题在于维度属性(如果维度是商品,那么商品类别、商品品牌、商品尺寸等商品的属性,我们称为维度属性)的整合。是不是所有维度属性都要整合到一个大的维表中,也不见得,我给你几个建议。

  • 公共维度属性与特有维度属性拆成两个维表。在自营平台中,通常也会有一些第三方的商家入驻,但是数量很少。大部分商品其实都没有店铺的属性,这种情况,就不建议将店铺和商品的其他维度属性,比如商品类别、品牌设计成一个维表。

  • 产出时间相差较大的维度属性拆分单独的维表,比如有些维度属性产出时间在凌晨2点,有些维度属性产出时间在凌晨6点,那2点和6点的就可以拆成两个维表,确保核心维表尽早产出。

  • 出于维表稳定性产出的考虑,你可以将更新频繁的和变化缓慢的进行拆分,访问频繁的和访问较少的维表进行拆分。

对于维表的规范化命名,建议你用“DIM_主题域_描述_分表规则”方式。分表你可以这样理解:一个表存储几千亿行记录实在是太大了,所以需要把一个表切割成很多小的分区,每天或者每周,随着任务被调度,会生成一个分区。我提供给你一个常见的分区规则(这个规则你在用的时候,查阅就可以了)。

第四,事实表整合。

我觉得事实表整合遵循的最基本的一个原则是,统计粒度必须保持一致,不同统计粒度的数据不能出现在同一个事实表中。来看一个例子:

在数据中台构建前,供应链部门、仓储部门和市场部门都有一些重复的事实表,我们需要将这些重复的内容进行去除,按照交易域和仓储域,主题域的方式进行整合。

对于仓储部门和供应链部门都有的库存明细表,因为仓储部门的统计粒度是商品加仓库,而供应链部门的只有商品,所以原则上两个表是不能合并,而是应该独立存在。

对于市场部门和供应链部门的两张下单明细表,因为统计粒度都是订单级别,都归属于交易域下的下单业务过程,所以可以合并为一张事实表。

除此之外,还应该考虑将不全的数据补齐。对于ODS 层直接被引用产出DWS/ADS/DM层的任务,通过血缘,找到任务清单,逐个进行拆解。没有ODS对应的DWD的,应该生成DWD表,对于已经存在的,应该迁移任务,使用DWD层表。

DWD/DWS/ADS/DM的命名规则适合采用“[层次][主题][子主题][内容描述][分表规则]”的命名方式。

第五,模型开发。

模型设计完成后,就进入模型开发阶段,我想提几个你需要注意的点:

  1. 所有任务都必须严格配置任务依赖,如果没有配置任务依赖,会导致前一个任务没有正常产出数据的情况下,后一个任务被调度起来,基于错误的数据空跑,浪费资源,同时增加了排查故障的复杂度;
  2. 任务中创建的临时表,在任务结束前应该删除,如果不删除,会发现有大量的临时表存在,占用空间;
  3. 任务名称最好跟表名一致,方便查找和关联;
  4. 生命周期的管理,对于ODS和DWD,一般尽可能保留所有历史数据,对于
    DWS/ADS/DM 需要设置生命周期,7~30天不等;
  5. DWD 层表宜采用压缩的方式存储,可用lzo压缩。

第六,应用迁移。

最后一步就是应用的迁移,这个过程的核心是要注意数据的比对,确保数据的完全一致,然后进行应用迁移,删除老的数据表。

总的来说,建设数据中台不是一口气就能吃成一个胖子,它的建设往往是滚雪球的方式,随着一个个应用的迁移,中台的数据也越来越丰满,发挥的价值也越来越大。

数仓建模工具EasyDesign

当然了,这些步骤的实现,离不开一个好用的工具作为支撑,为了规范化数据模型的设计,我们研发了EasyDesign的模型设计产品,让这些流程实现系统化管理。而我希望你了解如何去设计这个工具,或者在选用工具的时候应该考虑有哪些功能。

EasyDesign 构建于元数据中心之上,通过API调用元数据中心的数据血缘接口,结合数仓模型设计的指标,给出了模型设计度量。

EasyDesign按照主题域、业务过程、分层的方式管理所有的模型。

它还提供了维度、度量和字段基础字典的管理,同时具备模型设计审批流程的控制。

课堂总结

本节课,我结合自己的经验,带你了解了数据中台的模型设计。从确立设计目标,到通过一系列步骤,将一个个分散的、杂乱的、烟囱式的小数仓逐步规整到一个可复用、可共享的数据中台,最后通过产品化的方式实现系统化的管理。在最后,我想再强调几个点:

  • 完善度、复用度和规范度构成了衡量数据中台模型设计的度量体系,可以帮助你评估数仓设计的好坏。
  • 维度设计是维度建模的灵魂,也是数据中台模型设计的基础,维度设计的核心是构建一致性维度。
  • 事实表的统计粒度必须保持一致,不同统计粒度的数据不能出现在同一个事实表中。

你要知道,数据中台的构建往往需要花费半年甚至一年以上的时间,但是数据中台建成后,对研发效率的提升效果非常明显,在网易电商业务中,中台构建后相比构建前,数据需求的平均交付时间从一周缩短到3天内,需求响应速度的提升,为企业运营效果提升提供了数据支撑。我相信通过数据中台的构建,你所在企业的数据研发效率也会得到大幅度的提升。

思考时间

在数据中台实际实施落地的过程中,数据团队不但要建设公共数据层,形成数据中台,还要承担着巨大的新需求的压力。而且,往往需求的优先级都高于建设公共数据层的优先级,导致中台建设的进度难以保障。 对这个问题,你有什么解决方法呢?

最好,感谢你的阅读,如果这节课让你有所收获,也欢迎你将它分享给更多的朋友。

精选留言

  • 大尾巴老猫

    2020-04-15 17:09:01

    1、先满足需求(活下去),再研发公共数据层(构建美好未来)。
    2、获得高层领导的支持,以获得更多的研发资源。
    3、在满足业务需求的过程中,根据业务需求不断对公共数据层进行迭代和优化。
    4、随着时间的推移 ,越来越多的日常业务需求可以用公共数据层(中台来完成)。
    5、日常业务需求开发和公共数据层构建是相互促进的循环。
    作者回复

    不错,总结的挺好的,其实我只想再补充一点,就是为了保障数据中台的推进速度,可以尝试成立专人团队,这些人的目标明确就是中台构建,模型的重构和整合,指标的梳理。这些人不接业务需求,这样可以避免日常业务需求对数据团队的中台建设的干扰。否则的话,数据中台的建设进度,经常会受到业务需求压力的干扰,而且如果没有明确的KPI,或者KPI权重不够大,中台建设的动力也会不足。

    感谢你的阅读,总结的很棒!

    2020-04-16 09:52:03

  • 夏天松

    2020-04-23 18:28:58

    老师,能否有一个比较全的各层的表命名及维度表命名、指标命名规范?
    作者回复

    你好,关于每一层的表的命名规范,我在文章中都有提到。

    ODS: ODS_ 业务系统数据库名 _ 业务系统数据库表名
    DWD/DWS/ADS/DM 的命名规则适合采用“[层次][主题][子主题][内容描述][分表规则]”的命名方式。
    DIM:DIM_ 主题域 _ 描述 _ 分表规则

    指标命名规范中,对于原子指标,指标名称适合用“动作 + 度量”的命名方式(比如注册用户数、购买用户数),标识的命名用英文简写或者汉语拼音缩写比较好。对于派生指标,指标名称应该严格遵循“时间周期 + 统计粒度 + 修饰词 + 原子指标”的命名方式,标识命名要用“修饰词 _ 原子指标 _ 时间周期”的方式。

    感谢你的阅读~

    2020-04-29 18:38:49

  • 毛聪

    2020-04-22 17:36:00

    郭老师好,我想问个模型分层的问题,我计算的一个指标从dwd层到dws层后就可以直接给到应用层了,那这个汇总表到底算是dws层的表还是ads层的表?
    作者回复

    你好,你问的问题,我估计很多人都有这样的疑问。

    dws 并不是说一定要通过ads ,dws 也可以被应用直接访问的。在我们的数据中台建设中,一般只有一个应用专属的表,不能被其他应用使用的,才归入ads,如果可以被多个应用共享的,我们还是归入dws。

    感谢你的阅读,也感谢你提的好问题,欢迎继续提问~

    2020-04-29 19:25:26

  • 麻婆豆腐

    2020-04-15 09:32:46

    郭老师好,请教一个小白的问题,运行任务和分析查询的统计是怎么统计的呢?我们现在的平台有用hive直接查的,有tableau连impala查询的,还有spark定时任务,各种各样的,怎么才能统计出像您这样的表格呢。也想做下自己的模型指标分析。十分感谢!
    作者回复

    你好,可以基于数据血缘来实现,一个表的产出任务以及它的下游引用任务,数据血缘都是有的。

    对于分析查询,目前我们有两个平台,一个是网易有数,类似tableau,一个是自助分析平台,就是执行SQL的,我们把这两个平台的日志执行信息会拿出来进行离线的分析和统计,然后去看每个query查询了哪些表。

    如果你是tableau,可能没这么方便,不过可以试试从impala入手,impala侧日志中是有SQL信息,可以抓出来分析统计。对于spark和hive,可以基于数据血缘来实现。

    感谢你的阅读~

    2020-04-16 11:15:33

  • 泡泡鱼大王

    2020-04-16 20:26:55

    首先高优先级需求一定是先开发。
    我觉得压缩空间在中台项目本身,
    1.尽早搭建共享数仓部分。
    措施:
    技术上把各个小数仓的元信息和数据模型 通过自动化采集到同一个数据库中,进行分析,提炼指标。分析复用率。
    业务上拉上各个部门核心BA,进行指标砍伐和提炼。
    优先共享数仓产出,同时也应该按照优先级顺序。 高优先级的共享数据仓尽快产出,这样能用上,大家都会觉得中台的重要性。
    2.中台开发过程挑选技术能手和业务能手快速完成迭代。
    3.中台结束应该由业务方发起验收,减少建模的链路提高易用性是核心,这样才能让人人都用上中台。
    4.后期运维需要建立强大监控环节,自顶向下监控资源,减少成本开销。
    总结:技术上按照数仓设计就可以,中台的难点是对人员的业务和技术能力要求极高,同时需要一个优秀的PM。


    作者回复

    说的好,中台对数据开发的要求真的是挺高的,当然,也需要一些好用的工具产品来降低他们的工作量和复杂度,一个优秀的PM当然也是必须的。

    我一直强调一个观点,不要用技术的思维看待数据中台,要用管理的思维,数据中台它是一个系统性的工程,对整个数据建设是一次革命!

    感谢你的阅读,期待与你在留言区再次相遇,也期待你继续发表你的观点,很棒!

    2020-04-19 22:20:14

  • Weehua

    2020-05-21 13:48:01

    郭老师这篇文章非常非常棒!和我们的工作内容非常match。我们刚开始也是被各个业务的报表需求压的喘不过来气,曾经一度全体人员全部做报表。这个过程中,我和高层沟通,建立了数据平台组,引入了相关人才,花了3个月的时间把调度平台,API平台搞了起来,现在想想这些就是中台的组建。马上大大提高了开发效率和稳定性。后续形成良性循环,平台建设不断完善,开发效率和质量逐步提高。但数仓怎么衡量好坏一直是高层的关注点,这篇文章给了我们很大启发,其中ods的查询使用占比确实是一个很好的指标,其他指标我会引入团队,加强数仓的建设。结合前面的几篇文章,虽然我们没有做中台这件事,但是组织架构和工作内容已经在隐形的做中台了。最后,再次感谢郭老师的文章,非常赞!
    作者回复

    感谢你的认可,也非常开心,我们的这些经验能够对你有所帮助。我真心觉得,数据建设,真的是磨刀不误砍柴工,工具能力的建设,可以起到事半功倍的效果,做任何一项工作,都要想着怎么让这项工作能够有积累,堆人往往能够解决一些前期的问题,但是不是长久的方案。

    2020-05-21 20:12:58

  • louShang

    2020-05-21 10:48:56

    为什么要维度建模, 为什么要管理维度 ? 没有看到维度建模和管理维度的好处
    在管理好数仓的业务线、主题域 、业务过程之后, 可以直接开展指标的建设和管理, 维度看起来更像一个辅助指标建设的一个可选项, 是否维度是有管理的, 貌似并不重要 , 在创建原子指标的时候, 只要能选取到事实明细表的维度就可以?
    作者回复

    你好,

    维度建模只是模型设计的一种方法,当然你也可以选择其他的模型构建方法,之所以选择维度建模,是因为其是从业务需求场景出发,能够适应业务场景的快速变化。举个例子,在零售场景中,门店是一个维度,可以基于门店,分析销售额,原材料,如果又有一个新的场景,那维度本身还是门店。

    维度建模还有一个好处,就是通过一致性维度,可以进行关联分析。比如门店的销售额和门店维度下的商品数量,可以做关联的分析。维度的管理很重要,核心是建立一致性维表。

    指标的可分析维度的设计很重要,直接关系到后续模型的设计,需要哪些维度。所以在指标系统里面,必须有指标的可分析维度项。 提出指标需求的业务,需要先梳理出,你要的这个指标,需要哪些可分析维度,然后在模型设计阶段,需要把这些指标和可分析维度固化到模型中。

    感谢你的提问~ 希望我们的交流可以帮助解决你的疑惑~祝好~

    2020-05-25 20:41:18

  • 你好

    2020-04-26 23:53:22

    老师,hive中数据压缩和分片是对立的,两者怎么进行实际使用?
    作者回复

    你好, 有一些压缩算法是支持split的,例如lzo,对于大文件来说比较合适,在保证压缩效率的前提下,有着相对稳定的压缩比。

    我在第8讲中,会重点介绍通过数据压缩,优化存储成本的问题。欢迎你继续阅读~

    感谢你的阅读,我们下一次再见~

    2020-04-28 19:10:07

  • 北野豪横

    2020-04-15 14:15:42

    目前在做一个全新的领域,警务中台系统,跟原本的电商模式有着很大差别,本来一头雾水的项目,读了老师的课有点云开见月明的意思,提出一点个人的感想,不论是模型,还是输出的指标,个人感觉越来越多的应该从底层业务出发,自底向上来驱动整个业务中台,这里需要模型与业务与数据的多项循环反馈机制才能逐渐完善整个中台,如何将指标模块化,如何让各种模型即产中中间层结果,又产出直接结果,形成真正的积木式中台,让一线最懂业务的业务人员能够尽情发挥,搭建出自己想要的结果,形成逐层累积。
    2.同时还要考虑这些模块和指标以及管理真的是我提了一个醒,目前是自己负责一个中台项目的指标模型建设,业务是自己,模型是自己,指标也是自己,但是当个多人参与进来要如果管理是我要学习的地方。
    3.最后感慨一下,数据中台对从业人员的要求真的是高,要懂数据,懂运营,懂业务,懂模型,还要兼顾公司内过个部门的协同和沟通,不过也显示除了,未来人才的趋势就是全方位的人才才能真正立足于未来互联网。
    作者回复

    首先,感谢你的认可。看到对你的实际工作有所帮助和启发,我感到很高兴。

    你说的非常正确,业务和数据中台之间本来就要相互反馈,业务人员经常去查一些明细表,那我们中台就要考虑,是不是需要完善汇总层的模型。

    你说数据中台对从业人员要求高,我也非常赞同,数据中台从业务中来,最终必须要回到业务。数据中台团队独立于业务,但是绝对不能脱离业务。我在第13讲中,会详细的介绍,感谢你在留言区发表的想法,非常棒!

    期待与你再次相遇~

    2020-04-19 22:41:48

  • 臧洪友

    2020-04-16 10:55:24

    郭老师,刚接触数据中台,提的问题可能还比较初级,维表是一个基于的事实表的维表吗?他们之间是什么关系?需要ID关联吗?还是放到一张大的宽表中?多谢了!
    作者回复

    你好,我来回到一下你的问题。

    维表和事实表,可以通过ID关联,构建星型模型,甚至维度本身也可以构建有层次关系的星座模型。

    在数据中台的集市层,或者汇总层,为了方便使用者使用,我们会做一些维度退化的设计,降低Join的次数,因为通过id关联,必须就会是涉及到join,join操作对计算引擎的性能要求比较高,所以会把一些常用的维度属性退化到事实表中,这个还是主要取决于业务场景和需求。

    感谢你的阅读,期待与你再次相遇~

    2020-04-19 22:36:55

  • 风轻云淡

    2020-07-12 23:55:39

    数据仓库中数据的存储周期不是五年甚至更久吗?怎么DWS/ADS/DM 生命周期可以设置为7~30天?
    作者回复

    你好~ 一般原始数据和明细数据,是要求永久保留或者长期保留的,但是上层数据,一般要求是要设置生命周期的,不需要永久保留~因为可以根据明细汇聚回算回来。

    感谢你的提问~祝好~

    2020-07-20 20:27:55

  • Geek_4347e9

    2020-06-16 22:26:49

    郭总,您好。在数据仓库中。数据库要怎么创建?
    1.按照每层的数据是放到一个独立的database中,比如ods,创建一个ods的库,dw创建一个dw的库。所有主题的数据,ods层的都放到ods库中,dw层的都放到dw库 。
    2.按照主题来划分database。不同分层的按照主题放到主题划分的database中。
    3.或者其他的方式?
    作者回复

    你好,按库来存放当然是一个方案,如果你的工具能力足够强的话,也可以支持对表打标签的方式,只要方便进行搜索就可以。主题域,我们也是通过对表打标签的方式实现管理的~

    感谢你的提问~祝好~

    2020-07-20 20:48:33

  • 熊禹-DerekX

    2020-06-04 18:13:46

    郭老师所说的模型到底是什么?模型是ODS、DWD等的分层设计,还是可共享、可复用的公共服务层,还是建模工具中的建模方法?有点抽象,麻烦郭老师解答😊
    作者回复

    其实我说的模型,就是表的概念。

    ODS、DWD是模型的分层。

    2020-06-15 20:26:46

  • bwq

    2020-05-07 18:30:58

    老师,
    想问几个问题:
    1
    dim商品表, 如果商品属性发生变动, 比如价格更改了, 要更改dim商品表吗 ? 那这个更改要如何处理 ?
    我理解在大数据体系中是不能 update 记录的.
    还是在 dwd 表插入一条变更记录 ? 那如何体现商品的最新价格 ?
    2
    dim表为什么要根据时间分区分表 ?
    比如在 ads 层, 在 join 某个 dim商品表获取商品属性时, 我觉得是不会关心商品分区时间的.
    作者回复

    你好,我来回到一下你的两个问题:
    1. 原始数据在hdfs上追加写,然后定期Merge刷新的,所以这种不能做到upsert,实时更新。对于离线数据处理来说,这样就够了。
    2. dim表根据时间分区,是存在dim表变化的情况,比如每日有一个商品快照分区。

    2020-05-13 20:29:34

  • bwq

    2020-04-30 08:38:01

    老师, 我想问几个问题:
    1 ADS 和 DM 有什么区别 ? 还是他们其实是一回事 ?
    2 您说 DWS/ADS/DM 的生命周期一般为7~30天, 这些表的生命周期怎样的 ? 生命周期结束以后是将表删去吗 ? 删去以后如果又有需要又如何恢复呢 ?
    谢谢老师的分享!
    作者回复

    ADS 数据应用层,DM是数据集市层。数据应用层主要是给数据产品对接的,DM主要是给分析师做一些探索式分析的。使用对象不一样。

    DWS/ADS/DM 生命周期可以设置为7~30天,根据数据的需求决定。如果删除后,又有需要,可以采取数据备份的方式,选择某个备份,恢复备份文件就可以了。

    感谢你的阅读~

    2020-04-30 17:55:03

  • 小桥流水

    2020-04-19 23:16:24

    领导安排落地数仓分层定义及可实在落地 可度量 在这找到答案了
    1、明确每层都有哪些表
    2、通过分析执行sql知道 哪些表的使用情况 计算出 使用率
    3、指标体系建设明确了业务指标和表的关系
    4,血缘关系分析 明确了表之间的关系
    5、表的采集知道表的属性
    6、数据特征标签明确表使用的热度
    7、数据地图,利于业务it 可视化查询了解数据资产
    作者回复

    非常高兴可以帮助到你~

    感谢你的阅读,期待与你再次相遇~

    2020-04-22 10:43:22

  • 北山木易

    2020-04-17 08:31:28

    郭老师,您好,非常感谢这么精彩的分享。
    有个问题请教,关于“一致性维度”的,业务场景如下:企业X有A和B两个系统,都有客户表(数据有部分交集(根据一定规则例如名称相同判断的),没有统一的客户中心),数据中台中客户维度是否只有一个?客户表的维度歧义处理是否是数据中台的职责?
    作者回复

    你好, 首先要感谢你的认可和鼓励。

    我来谈谈你的问题。在数据中台中,用户维表必须要统一,不同业务系统用户不统一,在构建数据中台统一用户维表时,需要由中台部门来解决,可以使用ID-Mapping技术,打通不同系统之间的账号,建立统一的用户维表。

    感谢你的阅读,期待与你再次相遇~

    2020-04-19 22:15:38

  • JohnT3e

    2020-04-15 09:13:48

    目前公司数据中台建设已有一年有余,今天的内容有很多共鸣之处,收获颇多。
    作者回复

    谢谢你的鼓励,期望能够对你后续的工作有所帮助和启发~

    2020-04-16 11:15:52

  • 电光火石

    2020-08-26 16:27:12

    老师好,正好在做数据中台的规划和设计,关于数仓分层有几个问题请教一下:
    1. 看完第9、10节,我们的数据通过数据服务提供出去,一般提供出去的都是dws/ads层的数据;现在我们的数仓数据都是在hive上面,这些数据同步到mysql/hbase上,那hive上面还需要有dws/ads层的数据吗?是直接把这些数据建立在mysql/hbase上面?还是先建立在hive上,再同步出去?
    2. 数仓上面的hive数据访问会比较慢,除了系统的访问(通过数据服务),不知道如果报表或者adhoc的查询,老师那边是通过什么提供服务的?
    3. 数仓建模工具 EasyDesign大部分数据来自元数据中心,所以EasyDesign核心功能其实是计算完善度和复用度的是吗?因为维表的相关元数据在元数据中心也有,那么是不是和指标一样,将相关数据作为标签下沉到元数据中心?
    非常感谢!
    作者回复

    HI,你好,
    1. ETL都是在Hive体系内做的,所以dws/ads的数据,也是基于hadoop体系内生成的,所以hive上当然会有ads/dws的数据,然后再同步一份到HBase或者DB上,目的是提高查询的性能。

    2. hive 不适合ad-hoc查询, 目前网易,ad-hoc 用impala, etl走spark比较多。

    3. EasyDesign主要功能不是计算完善度和复用度,核心功能主要是进行模型设计,建表的审批发布流程管理。完善度、复用度只是模型设计的度量体系,是个抓手,引导模型设计人员,追求模型的复用和共享,面向数据中台的方式设计模型。

    感谢你的提问~祝好~

    2020-09-29 20:00:48

  • 追梦

    2020-08-12 18:01:26

    郭老师,ods层和dwd层 基本上都是全范围数据。这个保存周期的区别是什么样的呢?另一个问题,请问每一层都采取什么存贮介质和存储方式呢