精华内容
下载资源
问答
  • 累积度量属于半可加事实,使用的时候需要小心一些! 累计度量概述 累积度量指的是聚合从序列内第一个元素到当前元素的数据, 例如统计从每年的一月到当前月份的累积...数仓模型设计 建立一个新的名为month_end...

    累积度量属于半可加事实,使用的时候需要小心一些!

    累计度量概述

    • 累积度量指的是聚合从序列内第一个元素到当前元素的数据, 例如统计从每年的一月到当前月份的累积销售额。 本文说明如何在销售订单示例中实现累积月销售数量和金额, 并对数据仓库模式、 初始装载、 定期装载脚本做相应的修改。 累积度量是半可加的, 而且它的初始装载比前面实现的要复杂。

    数仓模型设计

    • 建立一个新的名为month_end_balance_fact的事实表, 用来存储销售订单金额和数量的月累积值。 month_end_balance_fact表在模式中构成了另一个星型模式。 新的星型模式除了包括这个新的事实表, 还包括两个其他星型模式中已有的维度表, 即产品维度表与月份维度表。 下图显示了新的模式。 注意这里只显示了相关的表。

    • 【大数据开发学习资料领取方式】:加入大数据技术学习交流群458345782,点击加入群聊,私信管理员即可免费领取

       

      累计度量数仓架构.PNG

    创建表

    • 下面的脚本用于创建month_end_balance_fact表。
    use dw;
    create table
        month_end_balance_fact (
        month_sk int,
        product_sk int,
        month_end_amount_balance decimal(10,2),
        month_end_quantity_balance int
    );
    

    初始装载

    • 现在要把month_end_sales_order_fact表里的数据装载进month_end_balance_fact表, 下面显示了初始装载month_end_balance_fact表的脚本。 此脚本装载累积的月销售订单汇总数据, 从每年的一月累积到当月, 累积数据不跨年。
    -- 初始化加载
    use dw;
    insert overwrite table
        month_end_balance_fact
    select
    a.month_sk,
    b.product_sk,
    sum(b.month_order_amount) month_order_amount,
    sum(b.month_order_quantity) month_order_quantity
    from
        month_dim a,
    (select 
        a.*,
        b.year,
        b.month,
        max(a.order_month_sk) over () max_month_sk
    from
        month_end_sales_order_fact a, month_dim b
    where
        a.order_month_sk = b.month_sk) b
    where
        a.month_sk <= b.max_month_sk
    and
        a.year= b.year 
    and b.month<= a.month
    group by
        a.month_sk , b.product_sk;
    
    • 语句说明:子查询获取month_end_sales_order_fact表的数据, 及其年月和最大月份代理键。 外层查询汇总每年一月到当月的累积销售数据, a.month_sk <= b.max_month_sk条件用于限定只统计到现存的最大月份为止。

    定期装载

    • 定期装载销售订单累积度量, 每个月执行一次, 装载上个月的数据。 可以在执行完月周期快照表定期装载后执行该脚本。
    -- 设置变量以支持事务
    set hive.support.concurrency=true;
    set hive.exec.dynamic.partition.mode=nonstrict;
    set hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.dbtxnmanager;
    set hive.compactor.initiator.on=true;
    set hive.compactor.worker.threads=1;
    use dw;
    set hivevar:pre_month_date = add_months(current_date,-1);
    set hivevar:year= year(${hivevar:pre_month_date});
    set hivevar:month= month(${hivevar:pre_month_date});
    insert into
        month_end_balance_fact
    select
        order_month_sk,
        product_sk,
    sum(month_order_amount),
    sum(month_order_quantity)
    from
    (select
    a.*
    from
    month_end_sales_order_fact a,
    month_dim b
    where
    a.order_month_sk = b.month_sk
    and
    b.year= ${hivevar:year}
    and
    b.month= ${hivevar:month}
    union all
    select
    month_sk + 1 order_month_sk,
    product_sk product_sk,
    month_end_amount_balance month_order_amount,
    month_end_quantity_balance month_order_quantity
    from
    month_end_balance_fact a
    wherea.month_sk in
    (select max(case when${hivevar:month} = 1 then0 elsemonth_sk end
    )
    from
    month_end_balance_fact)) t
    group by
    order_month_sk, product_sk
    ;
    
    • 周期加载脚本,需要进行验证。


     

    展开全文
  • 在过去的二十年中,尽管其他的系统和软件在许许多多的迭代、变革中演进,甚至完全被新模型所抛弃,数据仓库这个老骨干却安然屹立。她可能会偷偷地给自己的面颊,皱纹整容,也可能会激起一些不那么令人深刻的模仿,...

    一想数据管理世界中的那个伟大的存在–数据仓库吧。在过去的二十年中,尽管其他的系统和软件在许许多多的迭代、变革中演进,甚至完全被新模型所抛弃,数据仓库这个老骨干却安然屹立。她可能会偷偷地给自己的面颊,皱纹整容,也可能会激起一些不那么令人深刻的模仿,但是没有什么能长期的吸引她的注意力。

    直到现在。自从Hadoop出现在舞台上之后,一直有人嘀咕说,这个闪亮的新星正在为一些最好的数据管理角色提供服务–这些角色就是,在几年前,数据仓库已稳操胜券。

    但是现在真的到了数据仓库要退休的时候了吗?Hadoop甚至想要进入她的鞋子里吗?还有谁在后面等着呢?

    让我们仔细看看这些据报道的竞争对手的全部本领。

    数据仓库持久吸引力的背后是什么?

    简单地说,数据仓库意味着将不同来源的数据聚合为一个用于报告和分析的中央存储库。它长期成为实际解决方案的原因如下:因为这些数据是被聚合的,在经历抽取,转换,加载过程后,协调成为“真理的唯一版本”,缓和矛盾,重构数据格式化的方式,从而适应预定的模式。

    结果是一个完整的、可靠的,一致的数据来源,这些数据可用于商业智能软件查询。

    Hadoop究竟是什么?

    对于需要处理海量数据集的用户来说,这是一个开源的编程框架。使用分布式存储系统,它给用户一种存储、清理和处理大量数据的方法。

    为了使数据达到千兆兆字节的传输速度,Hadoop分布式文件系统(HDFS)沿着成千上万的硬件节点读取数据。即使许多节点由于技术故障而停止工作,系统仍能保持正常运行。这意味着存在低风险的数据丢失–对于那些使用大量数据进行非常复杂的分析的企业来说,这是一种真正的恐惧。

    难怪Hadoop正在转向一个寻求可靠的方法来运行大数据处理任务的行业。

    另外,它是开源的–这是一个巨大的吸引力。它具有无限的可伸缩性和无限的可定制性。包含定制应用程序、查询和方法的范围是无限的。数据挖掘的复杂性可以随着数据的复杂性和数据的数量而增长。

    它哪里比数据仓库更出色?

    大数据正变得越来越大,许多大型数据仓库都试图采取定制的多处理器设备来应对不断飙升的存储需求。但是除了最大的组织外,所有这些都需要付费。

    与此同时,Hadoop可以灵活地处理滚雪球般的数据。然后用户可以将它与数据仓库层或顶部构建的服务相结合,无论是像Presto的SQL软件,或者用相似方式工作的Hive,或者像HBase类的NoSQL。

    但这并不意味着Hadoop将取关系型数据库或者数据仓库。事实上,我们马上就会看到,这很可能是最好的支持,而不是取代。

    那么他们是竞争对手吗?

    完全不是。简单地说,他们没有扮演相同的角色。

    数据专家趋向于把Hadoop看作现有数据仓库架构的一个补充,并且可以为他们节省大量现金。通过把数据块迁移到Hadoop,可以减少关系型数据库的压力,从而使数据仓库平台更便宜,并且可以在不增加语速那的情况下进行扩展。

    用这种方式,Hadoop可以降低数据仓库的总成本,而不是取代它的某些东西。

    它如何使数据仓库的性能更好?

    数据仓库的构建成本很高,运行成本和增长成本昂贵。随着收集的数据量的增长,存储需求和花费也会呈指数级增长。

    此外,这些庞大的数据集合意味着用户每次运行查询的时候,不能进入数据仓库的全部范围–而且他们的硬件也无法处理这个问题。这意味着使用分析数据集来给业务中的各个部门访问数据仓库特定区域的数据。

    它是一个不完美的系统。不仅限制了用户在数据上执行分析的范围,也是一个定时炸弹。

    随着越来越多的数据涌入仓库,每个数据集都可能变得如此不堪重负,以致难以使用。你可以通过限制访问来减轻硬件压力,但是那意味着给各个部门越来越窄的数据分析选择。对于严格的商业智能来说,这样的做法并不够好。

    Hadoop并没有遭受这些挫折。进入门槛很低,而且对增量投资是开源的。它可以随着时间的推移而建立起来,你可以不断增大数据量而不需要花大量的成本来匹配。

    对于那些刚刚进入数据行业的公司–没有对大型机或者基于Unix的数据仓库的投资–这种可扩展的、增量式的框架是非常吸引人的。但是Hadop是一个框架,而不是一个完美的解决方案。它在处理巨大数据集方面很出色,但是它从来没有打算要替代数据仓库。

    那么Hadoop和数据仓库是最终的BI梦想团队吗?

    哇哦,请等一下。使用Hadoop与数据仓库处理了数据存储问题。但是存储数据只是商业智能的一个要素。

    广义上说,一个功能性的、可用的BI系统应该由五个部分组成:

    1.在某个地方几种存储数据。2.划分这些数据的工具,如:地理,操作或者其他业务需要的工具。3.为数据分析准备工具。4.帮助您快速处理此数据的ETL数据引擎。5.显示所有这些数据的前端(通常是某种仪表盘)。

    即使Hadoop和数据仓库在最好的情况协同工作,他们也只处理这些组件中的第一个。现在,BI技术的创新,同时提供了所有的五个组件,很快将梦想团队降级为二类组合。

    谁,谁会为了抢风头而出风头?

    正如我们看到的,数据仓库和Hadoop是一个成功的双重行为。但是,要执行来自多个源的快速、高性能的数据分析,您并不需要它们中的任何一个。现在,我们正在见证一颗新星的崛起。

    整体的“单栈”解决方案消除了关系数据库的需要,直接链接源数据,无论来自何处,并在现场执行英语教学功能。最好的工作是创建一个元数据(抽象)层,用于在任意数量的表中查询数据,这种格式是以任意格式的任意来源绘制的。

    正确的方法是通过构建像柱状数据库和内存处理这样的智能的、节省硬盘的方法来解决通常伴随巨大数据集而来的问题。首先通过只加载正在用的数据简化处理过程,而后确保将这些数据加载到计算机的主内存中,而不是占用RAM。这意味着你可以获得完全的、不受限制的访问所有数据的权限,而不需要像好莱坞山那样大小的计算机来处理它。

    一个唱歌、跳舞的超级巨星

    更胜一筹的是,使用一个完整的BI系统消除了对非技术用户可理解数据的额外软件层的需求。

    正如我们看到的,数据仓库和Hadoop的不足之处在于它们是严格的“后端”解决方案——它们只处理外层数据。

    为了使您的前端用户能够访问数据,您仍然需要引入和集成各种各样的应用程序,这些应用程序允许业务团队提取并可视化他们需要的见解。

    虽然Hadoop是开源的,但它不是“免费的”。让它做你想做的事情,并将它与你的数据仓库集成,你的工具来处理和准备数据分析,以及前端的仪表板界面,要么需要大量的资源投入,要么需要引入第三方来管理它。另外,当然,你仍然需要投资它需要运行的硬件。

    有了一个像样的单栈替代,您可以查询源数据,使用ETL数据引擎快速处理它,并在一步生成新的报和表指示板。现在这种创新挑战了数据仓库、Hadoop或没有Hadoop的未来。

    所以,是的,也许是时候让这个(国际)国家宝藏退后一步,让下一代数据技术接手。但并不是因为Hadoop窃取了她的皇冠,而是因为单栈技术正在为BI提供冗余存储数据解决方案。 


    本文作者:Shelby Blitz

    来源:51CTO

    展开全文
  • 文章在京东系数据仓库建设方案的基础上,加上自己独特的...对于大数据来说,数仓的作用不言而喻,承载着整个公司全业务线的数据,现阶段,在hadoop上的数仓主要是用来解决企业内部数据的分析,尤其是各种各样的统...

    文章在京东系数据仓库建设方案的基础上,加上自己独特的理解,很能给人以参考和启发。

    原作者:hxiao1317098

    原文:https://blog.csdn.net/hxiao1317098/article/details/73623690

    对于大数据来说,数仓的作用不言而喻,承载着整个公司全业务线的数据,现阶段,在hadoop上的数仓主要是用来解决企业内部数据的分析,尤其是各种各样的统计分析报表。本文主要结合自己公司目前数仓的结构设计和现阶段解决的问题而叙述和分享!

    下图为数仓整体的技术架构

    一个优秀可靠的数仓,一定要结构、分层清晰,而不是越多的分层和主题越好,保障清晰的状态下,能够快速找到数据的位置。主题域的划分,完全可按照公司内部的业务线和结构去划分。

    图中BDL层,作为缓冲数据层,其实就是贴数据层,和源数据表相同的表。直接用源库(传统关系型业务库)抽取数据,只存每天最新的数据快照(主要是增量数据)

    BAK层是BDL层抽数,保存的是全历史业务数据,起备份和查错的作用。

    FDL层是基础数据层,是基于主题、数仓模型开发的基础数据表。这里主要用到了范式建模法和维度建模法(即星型模型)包含最细粒度的数据,故称基础数据层,通俗的理解,这才是整个数仓的最核心的基础数据层,因为BAK层和BDL层的数据表结构跟业务库的数据是完全一致的,而FDL层的数据才是开始进行真正意义上的第一次清洗,不要的字段去除,不规范的字段命名去除,统一数据,规范标准化的一个过程。

    GDL层是通用数据层,就是宽表层。也是基于主题、数仓模型开发的宽表。可能会牺牲第三范式,将相关的各维度或属性整合到一张表里。这种表的特点就是字段较多,数据量较大,但它能帮助消除重复查询。由于这种表会被各种需求用到,故称通用数据层。

    ADL层是汇总数据层,是基于主题、数仓模型开发的汇总数据表。这里只用到维度建模法(即星型模型)。指标库可以放到这一层。

    APP层是开放给用户,用户可以在此层自己开发数据,提数。给用户的脱敏数据也可以放到这一层。我们开发的数据产品所需数据也可以在这一层做。

    还有两层比较特殊:

    一个是TMP(临时层),说白了就是存储中间结果表,有些业务场景比较复杂,需要拆表,多次计算,要用到一些中间结果集表,因此这层也是辅助层。

    DIM层是维表层,各种时间维,省市区维度都可以存放,根据公司的业务形态去划分,ADL层可以跟DIM层的多维度关联,做各种报表,手到擒来。

    以下是数据仓库数据流架构图:

    以上就是整个数仓平台的大概架构思路,其实大部分公司的数仓都是差不多的,无非是各个层的划分的区别,层的多少区别。

    展开全文
  • 最近看了《Hadoop构建数据仓库实践》这本书,收获很多,把一些关于数仓实践的心得我会写出来分享给大家,希望大家伙儿能互相学习,共同进步,☆⌒(*^-゜)v THX!!

    一、前言

    最近看了《Hadoop构建数据仓库实践》这本书,收获很多,把一些关于数仓实践的心得我会写出来分享给大家,希望大家伙儿能互相学习,共同进步,☆⌒(*^-゜)v THX!!

    注:本文部分内容摘自《Hadoop构建数据仓库实践》

    二、数据仓库的定义

    数据仓库是一个面向主题的、集成的、随时间变化的、但信息本身相对稳定的数据集合,用于对管理决策过程的支持。数据仓库本身并不“生产”任何数据,同时自身也不需要“消费”任何的数据,数据来源于外部,并且开放给外部应用使用。

    三、数据仓库的特点

    • 面向主题的:数据仓库都是基于某个明确的主题,仅需要与该主题相关的数据,其他的无关细节将会被去掉。

    • 集成的:数据仓库里面的数据都是经过ETL( Extract-Transform-Load 抽取-转换-加载)操作后被集中放到同一个数据源,数据仓库里的数据是来自于各种不同的数据源。

    • 随时间变化的:关键数据隐式或者显示地随时间变化而变化。

    • 数据相对稳定的:数据装入后一般只是进行查询操作,没有传统数据库的增删改操作。

    总结:数据仓库就是整合多个数据源的历史数据进行细粒度的、多维的分析,可以有效地帮助高层管理者或者业务分析人员做出商业战略决策或商业报表。

    四、数据仓库的作用

    • 可以整合公司的所有业务,建立统一的数据中心。

    • 分析用户行为数据,通过数据挖掘来降低投入成本,提高投入效果。

    • 可以作为各个业务的数据源,形成业务数据互相反馈的良性循环。

    • ​可以提供数据报表,用于公司的决策等等。

    数据处理大致可以分成两大类:

    联机事务处理OLTP(on-line transaction processing)、联机分析处理OLAP(On-Line Analytical Processing)。

    • OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。

    • OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。 OLTP 系统强调数据库内存效率,强调内存各种指标的命令率,强调绑定变量,强调并发操作。OLAP系统则强调数据分析,强调SQL执行市场,强调磁盘I/O,强调分区等。

    五、数据仓库的架构

    在这里插入图片描述
    数据采集与分析:数据采集层的任务就是把数据从各种数据源中采集和存储到数据库上,期间有可能会做一些ETL(抽取extra,转化transfer,装载load )操作。数据源种类可以有多种:

    日志:所占份额最大,存储在备份服务器上,业务数据库:如MySQL、Oracle,来自HTTP/FTP的数据:合作伙伴提供的接口,其他数据源:如Excel、CSV等需要手工录入的数据 数据存储与分析。

    HDFS是大数据环境下数据仓库/数据平台最完美的数据存储解决方案。

    离线数据分析与计算,也就是对实时性要求不高的部分,Hive是不错的选择。

    使用Hadoop框架自然而然也提供了MapReduce接口,如果真的很乐意开发Java,或者对SQL不熟,那么也可以使用MapReduce来做分析与计算。

    Spark性能比MapReduce好很多,同时使用SparkSQL操作Hive。

    数据共享

    前面使用Hive、MR、Spark、SparkSQL分析和计算的结果,还是在HDFS上,但大多业务和应用不可能直接从HDFS上获取数据,那么就需要一个数据共享的地方,使得各业务和产品能方便的获取数据。 这里的数据共享,其实指的是前面数据分析与计算后的结果存放的地方,其实就是关系型数据库和NOSQL数据库

    数据应用

    报表:报表所使用的数据,一般也是已经统计汇总好的,存放于数据共享层。

    接口:接口的数据都是直接查询数据共享层即可得到。

    即席查询:即席查询通常是现有的报表和数据共享层的数据并不能满足需求,需要从数据存储层直接查询。一般都是通过直接操作SQL得到。

    六、数据仓库的要求

    • 高效率:数据仓库的分析数据一般分为日、周、月、季、年等,可以看出,以日为周期的数据要求的效率最高,要求24小时甚至12小时内,客户能看到昨天的数据分析。由于有的企业每日的数据量很大,如果数据仓库设计的不好,需要延时一到两天才能显示数据,这显然是不能出现这种事情的。

    • 数据质量高:数据仓库所提供的各种信息,肯定要准确的数据。数据仓库通常要经过数据清洗,装载,查询,展现等多个流程而得到的,如果复杂的架构会有更多层次,那么由于数据源有脏数据或者代码不严谨,都可以导致数据不准确或者有错误,如果客户看到错误的信息就可能导致分析出错误的决策,造成损失经济的损失。

    • 扩展性:之所以有的大型数据仓库系统架构设计复杂,是因为考虑到了未来3-5年的扩展性,因为如果在未来需要扩展一些新的功能了,就可以不用重建数据仓库系统,就能很稳定运行。因为重建一个数据创库是比较耗费人力和财力。可扩展性主要体现在数据建模的合理性。

    为了达到上述的要求,建立起一个高效率、高数据质量、良好的可扩展性,再加上为了提高建仓的速度,根据在实际生产环境中的经验的总结,于是就提出来了数据仓库的分层概念。

    那么到底什么是数据仓库的分层?为什么要分成?数据仓库的分层的好处是什么呢?接下来将介绍关于数据仓库分层的一些概念。

    七 、数据仓库分层

    分层是数据仓库解决方案中,数据架构设计的一种数据逻辑结构 ,通过分层理念建立的数据仓库,它的可扩展性非常好,这样设计出来的模型架构,可以任意地增减、替换数据仓库中的各个组成部分。

    • 用空间换时间,通过大量的预处理来提升应用系统的用户体验(效率),因此数据仓库会存在大量冗余的数据。

    • 如果不分层的话,如果源业务系统的业务规则发生变化将会影响整个数据清洗过程,工作量巨大。

    • 通过数据分层管理可以简化数据清洗的过程,因为把原来一步的工作分到了多个步骤去完成,相当于把一个复杂的工作拆成了多个简单的工作,把一个大的黑盒变成了一个白盒,每一层的处理逻辑都相对简单和容易理解,这样我们比较容易保证每一个步骤的正确性,当数据发生错误的时候,往往我们只需要局部调整某个步骤即可。

    八、数据仓库四个层次的划分

    标准的数据仓库分层:ODS(临时存储层),PDW(数据仓库层),MID(数据集市层),APP(应用层)

    • ODS:临时存储层,它和源系统数据是同构的,而且这一层数据粒度是最细的,这层的表分为两种,一种是存储当前需要加载的数据,一种是用于存储处理完后的数据。

    • PDW:数据仓库层,它的数据是干净的数据,是一致的准确的,也就是清洗后的数据,它的数据一般都遵循数据库第三范式,数据粒度和ODS的粒度相同,它会保存bi系统中所有历史数据。

    • MID:数据集市层,它是面向主题组织数据的,通常是星状和雪花状数据,从数据粒度来讲,它是轻度汇总级别的数据,已经不存在明细的数据了,从广度来说,它包含了所有业务数量。从分析角度讲,大概就是近几年。

    • APP:应用层,数据粒度高度汇总,但不一定涵盖所有业务数据,只是MID层数据的一个子集。

    8.1 ODS层

    “面向主题的”,数据运营层是最接近数据源中数据的一层,数据源中的数据,经过抽取、洗净、传输,也就说传说中的ETL之后,装入本层。本层的数据,总体上大多是按照源头业务系统的分类方式而分类的。

    例如这一层可能包含的数据表为:人口表(包含每个人的身份证号、姓名、住址等)、机场登机记录(包含乘机人身份证号、航班号、乘机日期、起飞城市等)、银联的刷卡信息表(包含银行卡号、刷卡地点、刷卡时间、刷卡金额等)、银行账户表(包含银行卡号、持卡人身份证号等)等等一系列原始的业务数据。这里我们可以看到,这一层面的数据还具有鲜明的业务数据库的特征,甚至还具有一定的关系数据库中的数据范式的组织形式。

    但是,这一层面的数据却不等同于原始数据。在源数据装入这一层时,要进行诸如去噪(例如去掉明显偏离正常水平的银行刷卡信息)、去重(例如银行账户信息、公安局人口信息中均含有人的姓名,但是只保留一份即可)、提脏(例如有的人的银行卡被盗刷,在十分钟内同时有两笔分别在中国和日本的刷卡信息,这便是脏数据)、业务提取、单位统一、砍字段(例如用于支撑前端系统工作,但是在数据挖掘中不需要的字段)、业务判别等多项工作。

    8.2 PDW层

    数据仓库的主体,在这里从ODS层中获得的数据按照主题建立各种数据模型。例如以研究人的旅游消费为主题的数据集中,便可以结合航空公司的登机出行信息,以及银联系统的刷卡记录,进行结合分析,产生数据集。在这里,我们需要了解四个概念:维(dimension)、事实(Fact)、指标(Index)和粒度( Granularity)
    PDM层:数据集市,从数据的时间跨度来说,通常是DW层的一部分,按照业务划分,如流量、订单、用户等,生成字段比较多的宽表,用于提供后续的业务查询,OLAP分析,数据分发等。

    8.3 APP层

    在这里,主要是提供给数据产品和数据分析使用的数据,一般会存放在es、mysql等系统中供线上系统使用,也可能会存在Hive或者Druid中供数据分析和数据挖掘使用。比如我们经常说的报表数据,或者说那种大宽表,一般就放在这里。

    九、数据流向

    数据来源层–> ODS层

    这里其实就是我们现在大数据技术发挥作用的一个主要战场。 我们的数据主要会有两个大的来源:

    1. 业务库:这里经常会使用sqoop来抽取,比如我们每天定时抽取一次。在实时方面,可以考虑用canal监听mysql的binlog,实时接入即可。
    2. 埋点日志:线上系统会打入各种日志,这些日志一般以文件的形式保存,我们可以选择用flume定时抽取,也可以用用spark streaming或者storm来实时接入,当然,flume+kafka是企业常用的组合。其它数据源会比较多样性,这和具体的业务相关,不再赘述。

    ODS层–> APP层

    这里面也主要分两种类型:

    1. 每日定时任务型:比如我们典型的日计算任务,每天凌晨算前一天的数据,早上起来看报表。 这种任务经常使用Hive、Spark或者MR程序来计算,最终结果写入Hive、Hbase、Mysql、Es或者Redis中。
    2. 实时数据:这部分主要是各种实时的系统使用,比如我们的实时推荐、实时用户画像,一般我们会用Spark Streaming、Storm或者Flink来计算,最后会落入Es、Hbase或者Redis中。

    PDW层 --> APP层

    pdw分析完的数据,一般借助sqoop传输到关系型数据库如mysql,app层根据业务需要,以可视化的形式展示给决策层(BOSS)。

    十、数据仓库模型设计基础

    10.1 维度数据模型

    维度数据模型简称维度模型(Dimensional modeling, DM),是一套技术和概念的集合,用于数据仓库设计。不同于关系数据模型,维度模型不一定要引入关系数据库。

    在逻辑上相同的维度模型,可以被用于多种物理形式,比如维度数据库或是简单的平面文件。根据数据仓库大师Kimball的观点,维度模型是一种趋向于支持最终用户对数据仓库进行查询的设计技术,是围绕性能和易理解性构建的。尽管关系模型对于事务处理系统表现非常出色,但它并不是面向最终用户的。
    事实和维度是两个维度模型中的核心概念。事实表示对业务数据的度量,而维度是观察数据的角度。事实通常是数字类型的,可以进行聚合和计算,而维度通常是一组层次关系或描述信息,用来定义事实。例如,销售金额是一个事实,而销售时间、销售的产品、购买的顾客、商店等都是销售事实的维度。维度模型按照业务流程领域

    即主题域建立,例如进货、销售、库存、配送等。不同的主题域可能共享某些维度,为了提高数据操作的性能和数据一致性,需要使用一致性维度,例如几个主题域间共享维度的复制。术语“一致性维度”源自Kimball,指的是具有相同属性和内容的维度。

    10.2 维度数据模型建模过程

    维度模型通常以一种被称为星型模式的方式构建。所谓星型模式,就是以一个事实表为中心,周围环绕着多个维度表。还有一种模式叫做雪花模式,是对维度做进一步规范化后形成的

    一般使用下面的过程构建维度模型:

    • 选择业务流程
    • 声明粒度
    • 确认维度
    • 确认事实

    这种使用四步设计法建立维度模型的过程,有助于保证维度模型和数据仓库的可用性。

    1.选择业务流程
    确认哪些业务处理流程是数据仓库应该覆盖的,是维度方法的基础。因此,建模的第一个步骤是描述需要建模的业务流程。例如,需要了解和分析一个零售店的销售情况,那么与该零售店销售相关的所有业务流程都是需要关注的。为了描述业务流程,可以简单地使用纯文本将相关内容记录下来,或者使用“业务流程建模标注”(BPMN)方法,也可以使用统一建模语言(UML)或其他类似的方法。

    2.声明粒度
    确定了业务流程后,下一步是声明维度模型的粒度。这里的粒度用于确定事实中表示的是什么,例如,一个零售店的顾客在购物小票上的一个购买条目。在选择维度和事实前必须声明粒度,因为每个候选维度或事实必须与定义的粒度保持一致。在一个事实所对应的所有维度设计中强制实行粒度一致性是保证数据仓库应用性能和易用性的关键。从给定的业务流程获取数据时,原始粒度是最低级别的粒度。建议从原始粒度数据开始设计,因为原始记录能够满足无法预期的用户查询。汇总后的数据粒度对优化查询性能很重要,但这样的粒度往往不能满足对细节数据的查询需求。不同的事实可以有不同的粒度,但同一事实中不要混用多种不同的粒度。维度模型建立完成之后,还有可能因为获取了新的信息,而回到这步修改粒度级别。

    3.确认维度
    设计过程的第三步是确认模型的维度。维度的粒度必须和第二步所声明的粒度一致。维度表是事实表的基础,也说明了事实表的数据是从哪里采集来的。典型的维度都是名词,如日期、商店、库存等。维度表存储了某一维度的所有相关数据,例如,日期维度应该包括年、季度、月、周、日等数据。

    4.确认事实
    确认维度后,下一步也是维度模型四步设计法的最后一步,就是确认事实。这一步识别数字化的度量,构成事实表的记录。它是和系统的业务用户密切相关的,因为用户正是通过对事实表的访问获取数据仓库存储的数据。大部分事实表的度量都是数字类型的,可累加,可计算,如成本、数量、金额等。

    10.3 维度规范化

    与关系模型类似,维度也可以进行规范化。对维度的规范化(又叫雪花化),可以去除冗余属性,是对非规范化维度做的规范化处理,在下面介绍雪花模型时,会看到维度规范化的例子。一个非规范化维度对应一个维度表,规范化后,一个维度会对应多个维度表,维度被严格地以子维度的形式连接在一起。实际上,在很多情况下,维度规范化后的结构等同于一个低范式级别的关系型结构。

    设计维度数据模型时,会因为如下原因而不对维度做规范化处理:

    • 规范化会增加表的数量,使结构更复杂。
    • 不可避免的多表连接,使查询更复杂。
    • 不适合使用位图索引。
    • 查询性能原因。分析型查询需要聚合计算或检索很多维度值,此时第三范式的数据库会遭遇性能问题。如果需要的仅仅是操作型报表,可以使用第三范式,因为操作型系统的用户需要看到更细节的数据。

    正如在前面关系模型中提到的,对于是否应该规范化的问题存在一些争论。总体来说,当多个维度共用某些通用的属性时,做规范化会是有益的。例如,客户和供应商都有省、市、区县、街道等地理位置的属性,此时分离出一个地区属性就比较合适。

    10.4 维度数据模型的特点

    • 易理解
      相对于规范化的关系模型,维度模型容易理解且更直观。在维度模型中,信息按业务种类或维度进行分组,这会提高信息的可读性,也方便了对于数据含义的解释。简化的模型也让系统以更为高效的方式访问数据库。关系模型中,数据被分布到多个离散的实体中,对于一个简单的业务流程,可能需要很多表联合在一起才能表示。

    • 高性能
      维度模型更倾向于非规范化,因为这样可以优化查询的性能。介绍关系模型时多次提到,规范化的实质是减少数据冗余,以优化事务处理或数据更新的性能

    • 可扩展
      维度模型是可扩展的。由于维度模型允许数据冗余,因此当向一个维度表或事实表中添加字段时,不会像关系模型那样产生巨大的影响,带来的结果就是更容易容纳不可预料的新增数据。这种新增可以是单纯地向表中增加新的数据行而不改变表结构,也可以是在现有表上增加新的属性。基于数据仓库的查询和应用不需要过多改变就能适应表结构的变化,老的查询和应用会继续工作而不会产生错误的结果。但是对于规范化的关系模型,由于表之间存在复杂的依赖关系,改变表结构前一
      定要仔细考虑。

    10.5 星形模型(star schema)

    星型模式是维度模型最简单的形式,也是数据仓库以及数据集市开发中使用最广泛的形式

    星型模式由事实表和维度表组成,一个星型模式中可以有一个或多个事实表,每个事实表引用任意数量的维度表。星型模式的物理模型像一颗星星的形状,中心是一个事实表,围绕在事实表周围的维度表表示星星的放射状分支,这就是星型模式这个名字的由来。

    在这里插入图片描述

    星型模式将业务流程分为事实和维度。事实包含业务的度量,是定量的数据,如销售价格、销售数量、距离、速度、重量等是事实。维度是对事实数据属性的描述,如日期、产品、客户、地理位置等是维度。一个含有很多维度表的星型模式有时被称为蜈蚣模式,显然这个名字也是因其形状而得来的。蜈蚣模式的维度表往往只有很少的几个属性,这样可以简化对维度表的维护,但查询数据时会有更多的表连接,严重时会使模型难于使用,因此在设计中应该尽量避免蜈蚣模式。

    1.事实表

    事实表记录了特定事件的数字化的考量,一般由数字值和指向维度表的外键组成。通常会把事实表的粒度级别设计得比较低,使得事实表可以记录很原始的操作型事件,但这样做的负面影响是累加大量记录可能会更耗时。事实表有以下三种类型:

    • 事务事实表。记录特定事件的事实,如销售。
    • 快照事实表。记录给定时间点的事实,如月底账户余额。
    • 累积事实表。记录给定时间点的聚合事实,如当月的总的销售金额。一般需要给事实表设计一个代理键作为每行记录的唯一标识。代理键是由系统生成的主键,它不是应用数据,没有业务含义,对用户来说是透明的。

    2.维度表

    维度表的记录数通常比事实表少,但每条记录包含有大量用于描述事实数据的属性字段。维度表可以定义各种各样的特性,以下是几种最长用的维度表:

    • 时间维度表。描述星型模式中记录的事件所发生的时间,具有所需的最低级别的时间粒度。数据仓库是随时间变化的数据集合,需要记录数据的历史,因此每个数据仓库都需要一个时间维度表。
    • 地理维度表。描述位置信息的数据,如国家、省份、城市、区县、邮编等。
    • 产品维度表。描述产品及其属性。
    • 人员维度表。描述人员相关的信息,如销售人员、市场人员、开发人员等。
    • 范围维度表。描述分段数据的信息,如高级、中级、低级等。

    通常给维度表设计一个单列、整型数字类型的代理键,映射业务数据中的主键。业务系统中的主键本身可能是自然键,也可能是代理键。自然键指的是由现实世界中已经存在的属性组成的键,如身份证号就是典型的自然键。

    3.优点

    星型模式是非规范化的,在星型模式的设计开发过程中,不受应用于事务型关系数据库的范式规则的约束。星型模式的优点下:

    • 简化查询。查询数据时,星型模式的连接逻辑比较简单,而从高度规范化的事务模型查询数据时,往往需要更多的表连接。
    • 简化业务报表逻辑。与高度规范化的模式相比,由于查询更简单,因此星型模式简化了普通的业务报表(如每月报表)逻辑。
    • 获得查询性能。星型模式可以提升只读报表类应用的性能。
    • 快速聚合。基于星型模式的简单查询能够提高聚合操作的性能。
    • 便于向立方体提供数据。星型模式被广泛用于高效地建立OLAP立方体,几乎所有的OLAP系统都提供ROLAP模型(关系型OLAP),它可以直接将星型模式中的数据当作数据源,而不用单独建立立方体结构。

    4.缺点

    星型模式的主要缺点是不能保证数据完整性。一次性地插入或更新操作可能会造成数据异常,而这种情况在规范化模型中是可以避免的。星型模式的数据装载,一般都是以高度受控的方式,用批处理或准实时过程执行的,以此来抵消数据保护方面的不足。

    星型模式的另一个缺点是对于分析需求来说不够灵活。它更偏重于为特定目的建造数据视图,因此实际上很难进行全面的数据分析。星型模式不能自然地支持业务实体的多对多关系,需要在维度表和事实表之间建立额外的桥接表。

    10.6 雪花模型(snowflake schema)

    雪花模式是一种多维模型中表的逻辑布局,其实体关系图有类似于雪花的形状,因此得名。与星型模式相同,雪花模式也是由事实表和维度表所组成。

    在这里插入图片描述

    所谓的“雪花化”就是将星型模式中的维度表进行规范化处理。当所有的维度表完成规范化后,就形成了以事实表为中心的雪花型结构,即雪花模式。将维度表进行规范化的具体做法是,把低基数的属性从维度表中移除并形成单独的表。基数指的是一个字段中不同值的个数,如主键列具有唯一值,所以有最高的基数,而像性别这样的列基数就很低。在雪花模式中,一个维度被规范化成多个关联的表,而在星型模式中,每个维度由一个单一的维度表所表示。一个规范化的维度对应一组具有层次关系的维度表,而事实表作为雪花模式里的子表,存在具有层次关系的多个父表。星型模式和雪花模式都是建立维度数据仓库或数据集市的常用方式,适用于加快查询速度比高效维护数据的重要性更高的场景。这些模式中的表没有特别的规范化,
    一般都被设计成一个低于第三范式的级别。

    1.数据规范化与存储

    规范化的过程就是将维度表中重复的组分离成一个新表,以减少数据冗余的过程。正因为如此,规范化不可避免地增加了表的数量。在执行查询的时候,不得不连接更多的表。但是规范化减少了存储数据的空间需求,而且提高了数据更新的效率。这点在前面介绍关系模型时已经进行了详细的讨论。

    从存储空间的角度看,典型的情况是维度表比事实表小很多。这就使得雪花化的维度表相对于星型模式来说,在存储空间上的优势没那么明显了。举例来说,假设在220个区县的200个商场,共有100万条销售记录。星型模式的设计会产生1,000,200条记录,其中事实表1,000,000条记录,商场维度表有200条记录,每个区县信息作为商场的一个属性,显式地出现在商场维度表中。在规范化的雪花模式中,会建立一个区县维度表,该表有220条记录,商场表引用区县表的主键,有200条记录,事实表没有变化,还是1,000,000条记录,总的记录数是1,000,420(1,000,000+200+220)。在这种特殊情况(作为子表的商场记录数少于作为父表的区县记录数)下,星型模式所需的空间反而比雪花模式要少。如果商场有10,000个,情况就不一样了,星型模式的记录数是1,010,000,雪花模式的记录数是1,010,220,从记录数上看,还是雪花模型多。但是,星型模式的商场表中会有10,000个冗余的区县属性信息,而在雪花模式中,商场表中只有10,000个区县的主键,而需要存储的区县属性信息只有220个,当区县的属性很多时,会大大减少数据存储占用的空间。

    有些数据库开发者采取一种折中的方式,底层使用雪花模型,上层用表连接建立视图模拟星型模式。这种方法既通过对维度的规范化节省了存储空间,同时又对用户屏蔽了查询的复杂性。但是当外部的查询条件不需要连接整个维度表时,这种方法会带来性能损失。

    2.优点

    雪花模式是和星型模式类似的逻辑模型。实际上,星型模式是雪花模式的一个特例(维度没有多个层级)。某些条件下,雪花模式更具优势:

    • 一些OLAP多维数据库建模工具专为雪花模型进行了优化。
    • 规范化的维度属性节省存储空间。

    3.缺点

    雪花模型的主要缺点是维度属性规范化增加了查询的连接操作和复杂度。相对于平面化的单表维度,多表连接的查询性能会有所下降。但雪花模型的查询性能问题近年来随着数据浏览工具的不断优化而得到缓解。和具有更高规范化级别的事务型模式相比,雪花模式并不确保数据完整性。向雪花模式的表中装载数据时,一定要有严格的控制和管理,避免数据的异常插入或更新。

    10.7 事实星座模型(Fact Constellation)或星系模型(galaxy schema)

    数据仓库由多个主题构成,包含多个事实表,而维表是公共的,可以共享,这种模式可以看做星型模式的汇集,因而称作星系模式或者事实星座模式。本模式示例如下图所示:

    在这里插入图片描述
    如上图所示,事实星座模式包含两个事实表:sales和shipping,二者共享维表。

    十一、总结

    事实星座模式是数据仓库最长使用的数据模式,尤其是企业级数据仓库(EDW)。这也是数据仓库区别于数据集市的一个典型的特征,从根本上而言,数据仓库数据模型的模式更多是为了避免冗余和数据复用,套用现成的模式,是设计数据仓库最合理的选择。当然大数据技术体系下,数据仓库数据模型的设计,还是一个盲点,探索中。

    展开全文
  • 该项目以国内电商巨头实际业务应用场景为依托,紧跟大数据主流需求,对电商数仓的常见实战指标以及难点实战指标进行了详尽讲解,让你迅速成长,获取最前沿的技术经验。Flume1.9+Kafka2.4.1+Sqoop1.4.7+MySQL5.7 + ...
  • #数仓架构分析

    2020-05-14 17:13:53
    技术选型:数仓一般以hadoop生态圈为主,离线以hive为核心;准实时以spark为核心; 实时以flink为核心 二.数据调研 ①业务调研:概念模块(cdm) 逻辑模型(ldm) 物理模型(pdm) ②需求调研:报表需求,统计需求,用户...
  • 92_业务数仓_雪花模型、星型模型和星座模型.avi 93_业务数仓_配置Hadoop支持Snappy压缩.avi 94_业务数仓_业务数据生成.avi 95_业务数仓_Sqoop安装及参数.avi% s/ l0 E. R( Y9 s, h3 k 96_业务数仓_Sqoop导入数据.avi...
  • 数仓工具—Hive streaming(10)

    万次阅读 2020-12-26 12:20:31
    streaming 提供了另一种处理数据的方式。在streaming job中,Hadoop StreamingAPI会为外部进程开启一个I/O管道。...这种管道计算模型对于Unix操作系统以及其衍生系统,如Linux和Mac OS X的用户来说是非常熟悉的。
  • Apache HBase™是Hadoop数据库,提供分布式、可扩展的大数据存储 4. Hive的数据模型 5. Hive支持的文件格式和压缩格式及各自特点 Hive支持行式存储和列式存储 优缺点 压缩格式 6. Hive当中四个By
  • 标签(空格分隔): ...所以,有需求用到hive的同学,应该对数据仓库相关概念以及数仓设计模型有了大致的了解了。简单来说,Hive是一个基于Hadoop文件系统智商的数据仓库架构(数据存储还是HDFS),它为数仓的管理...
  • 在阅读中,Hadoop构建数据仓库中有关于Data Vault模型的内容 主要涉及了三种表: 中心表——Hub、链接表——Link、卫星表——Satellite 中心表是业务主键的载体,描述业务主键集合使用的 链接表是表示中心表之间...
  • OLAP(online analytical processing)OLAP是一种软件技术,它使分析人员迅速、...Kylin对接的就是数仓中的dwd层星型模型 或雪花模型。1. Kylin架构开源的分布式分析引擎,提供Hadoop/Spark之上的SQL查询接口及多维分...
  • 注:本文所有内容摘自《Hadoop构建数据仓库实践》1.数仓架构1.1数据集市架构数据集市是按主题域组织的数据集合,用于支持部门级的决策。有两种类型的数据集市:独立数据集市和从属数据集市。独立数据集市集中于部门...
  • 作者 |云祁°封图|CSDN下载于视觉中国一、前言作者最近看了《Hadoop构建数据仓库实践》这本书,收获很多,把一些关于数仓实践的心得整理出来,方便大家共同学习。注:本文内容由作...
  • 数据仓库架构及模型设计基础

    千次阅读 2019-06-26 21:58:18
    注:本文所有内容摘自《Hadoop构建数据仓库实践》 1.数仓架构 1.1数据集市架构 数据集市是按主题域组织的数据集合,用于支持部门级的决策。有两种类型的数据集市:独立数据集市和从属数据集市。 独立数据集市集中...
  • 一、前言最近看了《Hadoop构建数据仓库实践》这本书,收获很多,把一些关于数仓实践的心得整理出来,方便大家共同学习。二、数据仓库的定义数据仓库是一个面向主题的、集成的、随时间变化的、但信息本身相对稳定的...
  • 前面讲了数据仓库的价值、构建思路、实例,完成数据仓库的概念、逻辑、物理模型设计后,数仓的产品选型也是需要考虑的部分,根据数据存储量、查询效率、并发能力可以选用MPP数仓和基于Hadoop的分布式数仓等;...
  • Shell脚本入门及案例

    2020-04-12 18:18:59
    2.2、数仓分层-星型模型 2.3、数仓分层-雪花模型 2.4、数仓分层-星座模型 三、ERP项目架构 3.1、数仓分层流程图 一、Shell脚本入门 需要的基础:Linux命令 1、创建/opt/shell目录,在其下创建一个简单的shell; ...
  • 简介 先丢一段阿里云官方的说明: 大数据计算服务(MaxCompute,原名ODPS)是一种快速、完全托管的TB/PB级数据仓库解决...说白了就是阿里云开发了一套大数据平台,相当于hadoop(含数仓工具Hive、工作流引擎Ooz...
  • 数据仓库相关文章

    2019-10-10 16:47:36
    数据仓库之分层模型 为什么建设数据仓库 数据仓库的对比和选择 OPPO数据中台之基石:基于Flink SQL构建实数据仓库 基于Hadoop的数据仓库 数据仓库介绍与实时数仓案例 如何对数仓进行建模 数据湖正在成为新的...
  • 数据开发interview

    2019-08-09 17:22:48
    数仓分层的原理、架构、用途 rf模型细节,模型搭建 抛开现有的大数据平台(猛犸)如何部署模型 大数据为什么会有数据倾斜,如何优化? python 进行etl的细节 ---------------------------- hadoop HA的原理和...
  • 大数据平台简介

    2020-10-15 14:33:35
    加入大数据大军已一年多了,一直以来都是从事传统数据仓库领域的工作,近一年开始接触基于大数据平台的数仓,并参与其中的数据开发。 下面是一些常用的大数据平台组件分享,希望有帮助到从事大数据相关领域的你。 ...
  • 大数据面试相关问题 1. 自我介绍 2. 离线数仓项目介绍一下...具体的数据建模模型有哪些? 10. Hadoop的适用场景?比如说适用于OLAP还是OLTP? 11. SQL语句写的多吗? 12. SQL语句你是怎么学习和提升的? 13..
  • Hive是Apache开源的数据仓库工具,主要是将基于Hadoop的结构化数据文件映射为数据库表,并提供类SQL查询功能。Hive最初的目标是为了降低大数据开发的门槛,它屏蔽了底层计算模型的复杂开发逻辑,类SQL的查询功能也...
  • 离线业务通常是数仓的定时大批量处理任务,对一段时间内的数据进行处理并产出结果,对任务完成的时间要求不是非常敏感,并且处理逻辑复杂,如天级别报表、安全和用户行为分析、模型训练等。 多语言支持 HBase 提供了...
  • 离线业务通常是数仓的定时大批量处理任务,对一段时间内的数据进行处理并产出结果,对任务完成的时间要求不是非常敏感,并且处理逻辑复杂,如天级别报表、安全和用户行为分析、模型训练等。HBase提供了多语言解决...

空空如也

空空如也

1 2
收藏数 32
精华内容 12
关键字:

hadoop数仓模型