数据仓库

并非概念,个人看法

数据仓库-数据的仓库

顾名思义,所有的数据存储管理得地方,就是数据仓库。收集全部的数据,对外提供处理后的数据并保证数据一致性与稳定性。提供一站式的数据服务。

意义

每个产品,都是由多个功能组成,功能又都是独立开发的,每个团队有自己的日志习惯,这就造成了各处的数据会有差异,格式不同,命名规范不同,相同的字段叫不同的名字等等。
当有统计需求的时候,需要从所有团队拿到各自的数据再计算。从多处获取数据到数据解析再到计算,比较复杂繁琐。当部分系统数据逻辑有修改的时候(比如维度有处理,指标计算逻辑更改),由于信息同步不及时等原因,多个团队计算相同的指标,会出现较大的差异,这样会给决策者带来困惑"有的部门说升高了,有的说降低了,我应该听哪个?"。不正确的数据计算不仅不能给项目帮助,还会带来直接间接的损失。
这个时候,就需要有一个地方,所有人把数据产出到这里,统一处理,获取数据。直销固然流程少,但是有中间商也很重要。

举个例子,真实经历,但是换一种产品来表述,外卖这个场景,现在可以指定送货时间,假设有一部分用户当天选第二天送到,或者第三天送到(比如鲜花蛋糕这种)。我在统计订单完成率的时候,没有考虑跨天完成订单的情况,导致订单完成率只有不到30%,项目同学加班一周,又是活动,又是发代金券优惠券,结果订单完成率就是上不来,愁的头发都快揪没了,在这个时候我想起这个问题,重新计算订单完成率把跨天的订单也计算上,订单的完成率达到90%+,我告诉项目同学事情的原因的时候,他感动的哭了。

数据仓库的特点

标准的定义来说:数据仓库是一个面向主题的、集成的、非易失的且随时间变化的数据集合,用来支持管理人员的决策。

  • 面向主题
    主题是一个抽象的概念,指的是某一个方向一系列关联比较密切的数据的集合。公司里一部分人关注,其他人不是那么关注。或者关注一部分的时候,不太关注另一部分。
    比如客户/商家/物品/订单等主题。
  • 集成
    由于数据是由多个系统产生的,在没有统一规范之前,每个系统的开发人员有自己的规范,相同的信息会用多种不同的方式来表达,比如性别,有的系统用0/1,有的用f/m,有的用x/y,在数据仓库这里就必须要统一起来,供后续使用。(一般在etl时就处理)
    同时,我理解另外有一种行为也可以称之为数据集成:一系列连续的行为从分散到集成到一起。比如网购,从下单/付费/收获/评价。这些行为可由订单id这个唯一key关联起来,整合到一起,以便分析使用。
    需要注意的是行为的延后性,比如下单/付费是同一天,收获/评价是同一天,但是这四个行为很可能不是一天,需要考虑这种情况下的数据建设。
  • 非易失
    进入数据仓库中的数据,无法修改,长时间保留。

有修改的需求怎么办呢?无法对局部数据修改,只能整个分区重新计算。

  • 随时间变化
    与业务数据库中的状态数据不同,数据仓库中的数据有着时间属性,如果添加了新的字段,在那个时间点之前的数据中,该字段没有意义。

数据仓库的发展

数据仓库是随着需求增多而产生的。

  • 无数仓:简单报表
    单纯的统计pvuv等由单一数据可产出的指标。针对该份日志写程序处理既可。
  • 局部数仓:部门级需求
    随着产品发展,统计不单是为了出简单的报表,还可以对功能进行优化,比如说登陆位置对登陆率的影响。通过对其监控,可以得知此次改版是否达到预期。总之是满足单个产品的分析需求。
  • 全局数仓:公司级需求
    打通公司全部产品的数据,构建全局数仓,让决策者可以很容易的了解公司产品的情况,以便做战略上的调整。

数据仓库建设步骤

  • 数据接入/清洗
    1. 数据接入(暂未上传)
      数据接入是整个数据流程的起点。及时,完整的数据是分析挖掘的保障。过程数据/结果数据都有自己的价值,分别接入进来统一存储,以便后续使用。
    2. 数据规范化-ETL(暂未上传)
      数据从不可用到可用重要的一步,通过ETL,把数据规范化,清理脏数据,数据统一化。让多个数据源的数据可一起使用。

    吐个槽,数据的规范化,是一个技术难度不高,但是需要耐心以及细心的漫长的事。所以我对网上很多高级的ETL职位表示不理解,甚至还有"ETL总监"。嗯,也好,至少给人一条晋升的路线。

  • 数据集成
    同一流程中的数据根据唯一键整合到一起。比如在电商中,用户浏览商品,是非线性的,随意浏览。但是一旦加入购物车,那之后的行为:确认订单,付款,收货,评价,则是一个线性的流程。可以通过key(订单id)来串起来,这个时候,需要把这些数据从不同数据源集成到一起,无论是简单的统计,还是做分析,都更简便,减少后续使用的难度。
  • 仓库建设
    较细粒度的聚合,包含所有的维度,维度很多,但是对比明细数据,可以有效的降低数据量级,后续的计算速度更快。对于指标,把计算逻辑下沉到这里,让指标变得简单易用,达到指标逻辑的统一,保证数据的一致性。
  • 主题抽取
    依据不同的情况,建立不同的主题。依据主体不同,分为用户/产品/订单等。依据关注人群,可以有"机场订单""加班订单"等主题建设。总之,由于逻辑已经统一在仓库层,主题建设比较灵活,可以根据自己需求进行建设。
  • 对外提供数据
    包含基础的统计报表,多维度分析,策略效果评估,挖掘算法数准备,都可以从仓库/主题中得到想要的。

在数据仓库建设中,有Inmon派,主张先仓库后主题,在仓库层把逻辑统一之后,主题建设直接使用,简单不出错无冲突。另一派Kimball,主张先主题。
虽然我是Inmon派的,但是实际使用中,会有一些非长期的主题,没必要一层一层从底建设,浪费时间,并且弃用之后还浪费空间。所以没有恒定的准绳,合适的方法才是最好的方法。

数据仓库层级

关于数据仓库层级的资料有很多。大同小异,基本上分为下面几层

  • ODS:操作数据层
    从数据库直接导入过来的数据,或者日志直接解析获得的数据,是未处理的原始数据,以便进行问题排查使用。
  • DW:数据仓库
    • DWD:明细数据层
      数据清洗/规范化,让数据可用。
    • DWB:基础数据层
      数据集成+聚合,计算逻辑下沉到这一层,后续使用简单,一致。
  • DM:数据主题
    抽取相关性高的数据组建主题。可以是大的主题,比如用户,也可能是某个功能团队自己关注的小的数据主题。
  • APP:报表/分析

数据模型

先说结论:随着存储介质越来越廉价,对项目提供的数据不用考虑什么模型了,都冗余到宽表里就行。这样业务使用的时候更简单方便。
总体来说,模型分为两种。

  • 星形模型
    一个事实表多个维表。维表与事实表直接关联。使用简单,维护麻烦。
  • 雪花模型
    一个事实表多个维表,维表可能与事实表间接关联。需要多次关联,使用上稍麻烦,但是维护/增加内容简单。

雪花模型更灵活,星型模型更简便。举个例子,快递的数据,里面有"邮编"的字段,邮编对应的省份城市信息,有两种表现形式。星型模型:存在一个表里,key是邮编,另外有两个字段一个是省一个是城市,关联一次就可以获取。雪花模型:存在两个表里,一个存邮编——省份一个存邮编——城市,需要关联两次才能全部获得。
除了使用上的区别,在维护维表的时候也不同。比如如果原来只有省份信息,再添加城市的时候,星型模型就需要对原来的表加字段,要补齐所有邮编对应的城市。而雪花模型,只需要添加一个新的邮编——城市表就可以了。
所以在使用过程中,数据仓库层一般用雪花模型,而主题/应用层用星型模型,虽然有部分冗余,但是使用上更容易。

小结

数据仓库是一个长期/复杂的事情,优秀的数据仓库会对上层屏蔽数据的问题,保证分析挖掘的数据完整,一致,准确,及时。

感想

写了下来,觉得数据仓库也没什么难的,东西一共就这么多,那难点在哪里么?难道是"经验"?可以这么说,因为数据仓库不仅仅需要满足现在的需求,还要考虑将来的需求,做的多了,自然就知道可能下一步需要什么数据,提前处理好,准备着使用。
但是,作为知识,是不能简简单单的用"经验"两个字来表达的,想要做好数据仓库,需要做到以下几点

  1. 清楚服务对象。
    要明白此刻数据仓库建设重点服务对象。
  2. 熟悉业务。
    要是自己产品的忠实用户。
  3. 了解主题间差异。
    项目之内各个模块之间也有差异,了解各自的特点,才能建设好各自的主题。
  4. 提供数据
    统计报表没有特别的,按照需求提供就可以了。
    多维分析用的cube数据,首先不能随意的添加维度,可能只能带来数据膨胀无法带来什么好处。其次在计算的时候不能简简单单的 with cube ,而是要明白数据本身,明白维度之间的对应关系,有层级关系的数据可以通过 grouping sets 来降低计算和存储成本。(使用kylin等工具的时候可以简化设置)
    对于挖掘团队提供数据,要懂得做好脏数据离群数据处理,数据降权等操作。减少算法团队对数据的处理压力。
  5. 数据规范化
    繁琐,需要极大的耐心和细心,如果数据规范化的时候出错,后面的数据仓库啊,主题啊,有什么意义呢?

总之,数据仓库是要紧密贴近业务,与分析师/pm/项目rd,都联系紧密。项目rd打点产生数据,分析师提供分析需求,pm那了解业务。回到"经验"两个字上来,越熟悉,做的越好。

最后吐个小槽,大数据火爆了这么多年,很多公司都有"数据仓库”这个职位,但是很多人根本不知道这个职位应该是干什么的,会说出诸如"我们业务简单,不需要数据仓库”,"什么数据仓库,不就是写sql的么","我们数据仓库是平台开发兼职写写sql就做了很简单",”你们除了提数还会啥","为什么你们不重构呢?"这种问题。
确实,在日常工作中,80%的工作用sql来解决,但是这些工作中,sql占的功劳也只有20%。就像当年从意林上看的鸡汤文,一个公司遇到困难,无法解决,出价一万美金找到工程师,工程师在图纸上画了一条线就把问题解决了,公司觉得不公平,你画一条线为什么要一万美金,工程师说"画这条线值1美金,知道在哪里画值9999美金"。数据仓库就是这样,sql有多难?常用的语法有两天就都会了。概念又多深?找几个帖子就把数据仓库的定义,分层什么的都看完了。但是就是这么简单的数据仓库,有的公司不会做,做不好,遇到各种各样的问题没办法解决。
不难,但是不简单,并且重要。

欢迎关注

攻城锤的数据仓库

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,951评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,606评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,601评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,478评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,565评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,587评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,590评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,337评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,785评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,096评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,273评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,935评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,578评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,199评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,440评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,163评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,133评论 2 352