更好的Hadoop数据仓库解决方案——HAWQ实战演练
通过构建一个小而完整的数据仓库示例,深入理解如何以HAWQ替代传统数仓。包括使用Sqoop、HAWQ、Falcon处理ETL过程,以及实现各种维度表技术、事实表技术、OLAP、交互式查询及图形化表示等。
wzy0623
25年的数据库、数据仓库、大数据相关工作。《Hadoop构建数据仓库实践》、《HAWQ数据仓库与数据挖掘实战》、《SQL机器学习库——MADlib技术解析》、《MySQL高可用实践》、《Kettle构建Hadoop ETL》、《Greenplum构建实时数据仓库实践》作者。
展开
-
HAWQ取代传统数仓实践(一)——为什么选择HAWQ
为了跟上所谓“大数据”技术的脚步,从两年前开始着手实践各种SQL-on-Hadoop技术,从最初的Hive,到SparkSQL,再到Impala,进行了一系列ETL、CDC、多维数据仓库、OLAP的实验。作为一名从业20年以上的DBA,从数据库的角度看,我的总体感觉是这些技术与传统的DBMS相比,功能不完善,性能差距很大,甚至很难找到一个可行的、相对完备的Hadoop数据仓库解决方案。这使我在实际原创 2017-05-10 16:24:57 · 21847 阅读 · 13 评论 -
HAWQ取代传统数仓实践(二)——搭建示例模型(MySQL、HAWQ)
一、业务场景 本系列实验将应用HAWQ数据库,为一个销售订单系统建立数据仓库。本篇说明示例的业务场景、数据仓库架构、实验环境、源和目标库的建立过程、测试数据和日期维度的生成。后面陆续进行初始数据装载、定期数据装载、调度ETL工作流自动执行、维度表技术、事实表技术、OLAP和数据可视化等实验。目的是演示以HAWQ代替传统数据仓库的具体实现全过程。1.操作型数据源 ...原创 2017-05-11 15:31:39 · 10039 阅读 · 2 评论 -
HAWQ取代传统数仓实践(三)——初始ETL(Sqoop、HAWQ)
一、用sqoop用户建立初始抽取脚本 本示例要用Sqoop将MySQL的数据抽取到HDFS上的指定目录,然后利用HAWQ外部表功能将HDFS数据文件装载到内部表中。表1汇总了示例中维度表和事实表用到的源数据表及其抽取模式。 源数据表 HDFS目录 对应EXT模式中的表 抽取模式 customer /data/ext/customer customer 整体、拉取原创 2017-05-12 11:00:54 · 6043 阅读 · 0 评论 -
HAWQ取代传统数仓实践(四)——定期ETL(Sqoop、HAWQ)
一、变化数据捕获(CDC) 初始装载只在数据仓库开始使用前执行一次,然而,必须要周期性地执行装载源数据过程。与初始装载不同,定期装载一般都是增量的,并且需要捕获并且记录数据的变化历史。1. 识别数据源与装载类型 定期装载首先要识别数据仓库的每个事实表和每个维度表用到的并且是可用的源数据。然后要决定适合装载的抽取模式和维度历史装载类型。表1总了本示例的这些信息。 数据原创 2017-05-12 16:03:17 · 5978 阅读 · 9 评论 -
HAWQ取代传统数仓实践(五)——自动调度工作流(Oozie、Falcon)
一旦数据仓库开始使用,就需要不断从源系统给数据仓库提供新数据。为了确保数据流的稳定,需要使用所在平台上可用的任务调度器来调度ETL定期执行。调度模块是ETL系统必不可少的组成部分,它不但是数据仓库的基本需求,也对项目的成功起着举足轻重的作用。本篇说明如何使用HDP中的Oozie和Falcon服务实现ETL执行自动化。一、Oozie简介 Oozie是一个管理Hadoop作业、可伸缩、可原创 2017-05-18 17:35:22 · 8141 阅读 · 4 评论 -
HAWQ取代传统数仓实践(六)——增加列
业务的扩展或变化是不可避免的,尤其像互联网行业,需求变更已经成为常态,唯一不变的就是变化本身,其中最常碰到的扩展是给一个已经存在的表曾加列。 以销售订单为例,假设因为业务需要,在操作型源系统的客户表中增加了送货地址的四个字段,并在销售订单表中增加了销售数量字段。由于数据源表增加了字段,数据仓库中的表也要随之修改。本篇说明如何在客户维度表和销售订单事实表上添加列,并在新列上应用SCD2原创 2017-05-23 17:18:25 · 6084 阅读 · 0 评论 -
HAWQ取代传统数仓实践(七)——维度表技术之维度子集
有些需求不需要最细节的数据。例如更想要某个月的销售汇总,而不是某天的数据。再比如相对于全部的销售数据,可能对某些特定状态的数据更感兴趣等。此时事实数据需要关联到特定的维度,这些特定维度包含在从细节维度选择的行中,所以叫维度子集。维度子集比细节维度的数据少,因此更易使用,查询也更快。 有时称细节维度为基本维度,维度子集为子维度,基本维度表与子维度表具有相同的属性或内容,称这样的维度表具原创 2017-05-24 14:21:20 · 5943 阅读 · 0 评论 -
HAWQ取代传统数仓实践(八)——维度表技术之角色扮演维度
单个物理维度可以被事实表多次引用,每个引用连接逻辑上存在差异的角色维度。例如,事实表可以有多个日期,每个日期通过外键引用不同的日期维度,原则上每个外键表示不同的日期维度视图,这样引用具有不同的含义。这些不同的维度视图具有唯一的代理键列名,被称为角色,相关维度被称为角色扮演维度。 当一个事实表多次引用一个维度表时会用到角色扮演维度。例如,一个销售订单有一个是订单日期,还有一个请求交付日原创 2017-05-25 15:47:41 · 5878 阅读 · 0 评论 -
HAWQ取代传统数仓实践(九)——维度表技术之退化维度
退化维度技术减少维度的数量,简化维度数据仓库模式。简单的模式比复杂的更容易理解,也有更好的查询性能。 有时,维度表中除了业务主键外没有其它内容。例如,在本销售订单示例中,订单维度表除了订单号,没有任何其它属性,而订单号是事务表的主键,这种维度就是退化维度。业务系统中的主键通常是不允许修改的。销售订单只能新增,不能修改已经存在的订单号,也不会删除订单记录。因此订单维度表也不会有历史数据原创 2017-05-26 13:29:04 · 6427 阅读 · 0 评论 -
HAWQ取代传统数仓实践(十)——维度表技术之杂项维度
一、什么是杂项维度 简单地说,杂项维度就是一种包含的数据具有很少可能值的维度。事务型商业过程通常产生一系列混杂的、低基数的标志位或状态信息。与其为每个标志或属性定义不同的维度,不如建立单独的将不同维度合并到一起的杂项维度。这些维度,通常在一个模式中标记为事务型概要维度,一般不需要所有属性可能值的笛卡尔积,但应该至少包含实际发生在源数据中的组合值。 例如,在销售订单中,可原创 2017-05-27 13:59:03 · 5209 阅读 · 0 评论 -
HAWQ取代传统数仓实践(十一)——维度表技术之维度合并
有一种合并维度的情况,就是本来属性相同的维度,因为某种原因被设计成重复的维度属性。例如,在销售订单示例中,随着数据仓库中维度的增加,我们会发现有些通用的数据存在于多个维度中。客户维度的客户地址相关信息、送货地址相关信息里都有邮编、城市和省份。下面说明如何把客户维度里的两个邮编相关信息合并到一个新的维度中。一、修改数据仓库表结构 为了合并维度,需要改变数据仓库表结构。图1显示了修改后的原创 2017-05-31 15:03:12 · 5453 阅读 · 1 评论 -
HAWQ取代传统数仓实践(十二)——维度表技术之分段维度
一、分段维度简介 在客户维度中,最具有分析价值的属性就是各种分类,这些属性的变化范围比较大。对某个个体客户来说,可能的分类属性包括:性别、年龄、民族、职业、收入和状态,例如,新客户、活跃客户、不活跃客户、已流失客户等。在这些分类属性中,有一些能够定义成包含连续值的分段,例如年龄和收入这种数值型的属性,天然就可以分成连续的数值区间,而象状态这种描述性的属性,可能需要用户根据自己的实际业原创 2017-06-01 11:42:25 · 5307 阅读 · 0 评论 -
HAWQ取代传统数仓实践(十三)——事实表技术之周期快照
一、周期快照简介 周期快照事实表中的每行汇总了发生在某一标准周期,如一天、一周或一月的多个度量。其粒度是周期性的时间段,而不是单个事务。周期快照事实表通常包含许多数据的总计,因为任何与事实表时间范围一致的记录都会被包含在内。在这些事实表中,外键的密度是均匀的,因为即使周期内没有活动发生,通常也会在事实表中为每个维度插入包含0或空值的行。 周期快照是在一个给定的时间对事实原创 2017-06-02 15:32:53 · 6552 阅读 · 0 评论 -
HAWQ取代传统数仓实践(十四)——事实表技术之累积快照
一、累积快照简介 累积快照事实表用于定义业务过程开始、结束以及期间的可区分的里程碑事件。通常在此类事实表中针对过程中的关键步骤都包含日期外键,并包含每个步骤的度量,这些度量的产生一般都会滞后于数据行的创建时间。累积快照事实表中的一行,对应某一具体业务的多个状态。例如,当订单产生时会插入一行。当该订单的状态改变时,累积事实表行被访问并修改。这种对累积快照事实表行的一致性修改在三种类型的原创 2017-06-05 14:52:29 · 6659 阅读 · 0 评论 -
HAWQ取代传统数仓实践(十五)——事实表技术之无事实的事实表
一、无事实事实表简介 在多维数据仓库建模中,有一种事实表叫做“无事实的事实表”。普通事实表中,通常会保存若干维度外键和多个数字型度量,度量是事实表的关键所在。然而在无事实的事实表中没有这些度量值,只有多个维度外键。表面上看,无事实事实表是没有意义的,因为作为事实表,毕竟最重要的就是度量。但在数据仓库中,这类事实表有其特殊用途。无事实的事实表通常用来跟踪某种事件或者说明某些活动的范围。原创 2017-06-06 11:02:35 · 6241 阅读 · 0 评论 -
HAWQ取代传统数仓实践(十六)——事实表技术之迟到的事实
一、迟到的事实简介 数据仓库通常建立于一种理想的假设情况下,这就是数据仓库的度量(事实记录)与度量的环境(维度记录)同时出现在数据仓库中。当同时拥有事实记录和正确的当前维度行时,就能够从容地首先维护维度键,然后在对应的事实表行中使用这些最新的键。然而,各种各样的原因会导致需要ETL系统处理迟到的事实数据。例如,某些线下的业务,数据进入操作型系统的时间会滞后于事务发生的时间。再或者出现原创 2017-06-08 17:00:26 · 4635 阅读 · 0 评论 -
HAWQ取代传统数仓实践(十七)——事实表技术之累积度量
累积度量指的是聚合从序列内第一个元素到当前元素的数据,例如统计从每年的一月到当前月份的累积销售额。本篇说明如何在销售订单示例中实现累积月销售数量和金额,并对数据仓库模式、初始装载、定期装载做相应地修改。累积度量是半可加的,而且它的初始装载要复杂一些。一、建立累积度量事实表 执行下面的脚本创建month_end_balance_fact事实表,用来存储销售订单金额和数量的月累积值。se原创 2017-06-09 18:38:13 · 3636 阅读 · 0 评论 -
HAWQ取代传统数仓实践(十八)——层次维度
一、层次维度简介 大多数维度都具有一个或多个层次。例如,示例数据仓库中的日期维度就有一个四级层次:年、季度、月和日。这些级别用date_dim表里的列表示。日期维度是一个单路径层次,因为除了年-季度-月-日这条路径外,它没有任何其它层次。为了识别数据仓库里一个维度的层次,首先要理解维度中列的含义,然后识别两个或多个列是否具有相同的主题。例如,年、季度、月和日具有相同的主题,因为它们都原创 2017-06-12 17:34:36 · 3999 阅读 · 0 评论 -
HAWQ取代传统数仓实践(十九)——OLAP
一、OLAP简介1. 概念 OLAP是英文是On-Line Analytical Processing的缩写,意为联机分析处理。此概念最早由关系数据库之父E.F.Codd于1993年提出。OLAP允许以一种称为多维数据集的结构,访问业务数据源经过聚合和组织整理后的数据。以此为标准,OLAP作为单独的一类技术同联机事务处理(On-Line Transaction Processing,原创 2017-06-14 13:37:15 · 7316 阅读 · 1 评论