Apache Kylin 入门系列目录
- Apache Kylin 入门 1 - 基本概念
- Apache Kylin 入门 2 - 原理与架构
- Apache Kylin 入门 3 - 安装配置参数详解
- Apache Kylin 入门 4 - 构建 Model
- Apache Kylin 入门 5 - 构建 Cube
Apache Kylin 简介
Apache Kylin 是一个开源的分布式分析引擎,提供 Hadoop/Spark 之上的 SQL 查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由 eBay Inc. 开发并贡献至开源社区,它能在亚秒内查询巨大的 Hive 表。
Apache Kylin 的特性:
- 可扩展的超快 OLAP 引擎: Kylin 是为减少在 Hadoop/Spark 上百亿规模数据查询延迟而设计;
- Hadoop ANSI SQL 接口: Kylin 为 Hadoop 提供标准 SQL 支持大部分查询功能;
- 交互式查询能力: 通过 Kylin,用户可以与 Hadoop 数据进行亚秒级交互,在同样的数据集上提供比 Hive 更好的性能;
- 多维立方体(MOLAP Cube): 用户能够在 Kylin 里为百亿以上数据集定义数据模型并构建立方体;
- 与 BI 工具无缝整合: Kylin 提供与 BI 工具的整合能力,如 Tableau,PowerBI/Excel,MSTR,QlikSense,Hue 和 SuperSet。
其他特性:
- Job 管理与监控
- 压缩与编码
- 增量更新
- 利用 HBase Coprocessor
- 基于 HyperLogLog 的 Dinstinc Count 近似算法
- 友好的 web 界面以管理,监控和使用立方体
- 项目及表级别的访问控制安全
- 支持 LDAP、SSO
数据仓库基本概念
数据仓库(Data Warehouse)
数据仓库是一种信息系统的资料储存理论,此理论强调的是利用某些特殊的资料储存方式,让所包含的资料特别有利于分析和处理,从而产生有价值的资讯,并可依此做出决策。
利用数据仓库的方式存放的资料,具有一旦存入,便不会随时间发生变动的特性,此外,存入的资料必定包含时间属性,通常一个数据仓库中会含有大量的历史性资料,并且它可利用特定的分析方式,从其中发掘出特定的资讯。
STAGE 层
STAGE 层作为数据缓冲层,主要负责采集不同类型的业务系统数据并保存一定期限内的相关业务数据,完成不同类型数据源的统一临时存储,同时避免 ETL 操作对业务系统性能造成影响,STAGE 层数据在数据结构、数据之间的逻辑关系上都与业务系统基本保持一致。
ODS 数据层
ODS(Operational Data Store)层数据来源于 STAGE 层,它的数据经过了对 STAGE 层数据的清洗,包括编码表去重、去空、垃圾数据过滤、数据类型规则化等。
另外 ODS 作为 DW 和 STAGE 层的桥梁,也可以实现指标一致性的管理,将不同系统不同部门相同指标的定义及指标数据按照业务规则取其一,保证不同源数据的数据一致性,也可以满足用户对明细数据的查询要求,直接从ODS层获取明细数据进行分析。
DWD 数据层
DWD(Data Warehouse Detail)层数据是将 ODS 层数据根据数据清洗规则,经过质量检查、数据清洗、转换、标准化后,形成符合质量要求的公共数据中心。
把 ODS 数据表结构改变成项目主题数据仓库的表结构,对 DWD 层的所有表添加了代理键,标准化了业务系统编码类型不统一的问题,建立了数据仓库维度表和事实表的关联体系,也为缓慢变化维的实现奠定了基础。
DWC 数据层
DWC(Data Warehouse Center)层主要管理固化报表的数据存储,数据主要来源于 DWD 层,根据前台所需数据建立物理模型,使用 ETL 抽取 DWD 层数据推送给 DWC 层,这样显著减少前台应用直接关联 DWD 层查询明细数据的成本,提高平台数据获取的速度。
DM 数据层
DM(Data Mart)层即数据集市,将指标与维度建立物理模型组成数据集市,这是 OLAP 的数据基础。该层实现了合并不同系统的数据源来满足面向主题的业务需求,它的建模是终端用户驱动的,也是由业务需求驱动的。按主题,维度及 KPI 指标对 DM 层进行模型设计、建模,DM 层数据是将 DWD 层数据进行进一步整合、转换、汇总、计算等 ETL 操作处理获取的。
Kylin 基本概念
事实表(Fact Table)
事实表(Fact Table)是指存储有事实记录的表,如系统日志、销售记录等;事实表的记录在不断地动态增长,所以它的体积通常远大于其他表。
维度表(Dimension Table)
维度表或维表
,有时也称查找表
(Lookup Table),是与事实表相对应的一种表。它保存了维度的属性值,可以跟事实表做关联;相当于将事实表上经常重复出现的属性抽取、规范出来用一张表进行管理。
维度表有以下几个优点:
- 缩小了事实表的大小;
- 便于维度的管理和维护,不必对事实表进行改动;
- 维度表可以为多个事实表重用,以减少重复工作。
维度(Dimension)
维度是观察数据的角度,一般是一组离散的值;因此统计时可以把维度值相同的记录聚合在一起,然后进行聚合计算。
在 Kylin Cube 构建中,维度可以分为以下几种类型:
- Mandatory:必需维度,查询中总是出现在 where 条件中的维度;如果一个维度被标记为 “Mandatory”,会认为所有的查询都会包含此维度,所有不含此维度的组合,在 Cube 构建时都会被剪枝(不计算);
- Hierarchy:层级维度,如果多个维度之间有层级(或包含)的关系,通过设置为 “Hierarchy”,那些不满足层级的组合会被剪枝;如果A, B, C是层级,并且A>B>C,那么只需要计算组合A, AB, ABC; 其它组合如B, C, BC, AC将不做预计算;
- Joint:联合维度,有些维度往往一起出现,或者它们的基数非常接近(有 1:1 映射关系),例如 “用户 ID”总是对应唯一的 “用户名”;
- Derived:衍生维度:维度表的列值,可以从它的主键值衍生而来,那么通过将这些列定义为衍生维度,可以仅将主键加入到 Cube 的预计算来,而在运行时通过使用维度表的快照,衍生出非主键列的值,从而起到降维的效果。
度量(Measure)
度量是被聚合的统计值,也是聚合运算的结果,它一般是连续的值。
OLAP(Online Analytical Process)
OLAP(Online Analytical Process),联机分析处理,以多维度的方式分析数据,而且能够弹性地提供上卷(Roll-up)、下钻(Drill-down)和透视分析(Pivot)等操作,它是呈现集成性决策信息的方法,多用于决策支持系统、商务智能或数据仓库。其主要的功能在于方便大规模数据分析及统计计算,可对决策提供参考和支持。
与之相区别的是联机交易处理(OLTP),联机交易处理,更侧重于基本的、日常的事务处理,包括数据的增删改查。
星型模型
星型模型是一种多维的数据关系,它由一个事实表和一组维表组成。每个维表都有一个维作为主键,所有这些维的主键组合成事实表的主键。强调的是对维度进行预处理,将多个维度集合到一个事实表,形成一个宽表。
这也是我们在使用 Hive 时,经常会看到一些大宽表的原因,大宽表一般都是事实表,包含了维度关联的主键和一些度量信息,而维度表则是事实表里面维度的具体信息,使用时候一般通过 Join 来组合数据,相对来说对 OLAP 的分析比较方便。
雪花模型
当有一个或多个维表没有直接连接到事实表上,而是通过其他维表连接到事实表上时,其图解就像多个雪花连接在一起,故称雪花模型。
雪花模型是对星型模型的扩展,它对星型模型的维表进一步层次化,原有的各维表可能被扩展为小的事实表,形成一些局部的"层次"区域,这些被分解的表都连接到主维度表而不是事实表。
雪花模型更加符合数据库范式,减少数据冗余,但是在分析数据的时候,操作比较复杂,需要 Join 的表比较多所以其性能并不一定比星型模型高。
数据立方体(Data Cube)
数据立方体允许多维对数据建模和观察,它由维和事实定义,它是对多维模型的一个形象的说法。
从表方面看,数据立方体是三维的,但是多维模型不仅限于三维模型,可以组合更多的模型,比如四维、五维等等,比如我们根据时间、地域、产品和产品型号这四个维度,统计销售量等指标。
对于每一种维度的组合,将度量做聚合运算,然后将运算的结果保存为一个物化视图,称为 Cuboid。所有维度组合的 Cuboid 作为一个整体,被称为 Cube。所以简单来说,一个 Cube 就是许多按维度聚合的物化视图的集合。
Cube Segment 是指针对源数据中的某一个片段,计算出来的 Cube 数据。通常数据仓库中的数据数量会随着时间的增长而增长,而 Cube Segment 也是按时间顺序来构建的。
Cuboid 示例:Cuboid[Time, Locatio] = select Time, Location, sum(GMV) as GMV from T group by Time, Location
Cube 构建常见概念
- Table - 表, 是 Cube 的数据源;在创建 Cube 之前,需要从数据源(通常为 Hive)同步表的元数据,包含表名、列名、列属性等。
- Data Model - 数据模型,定义了由若干张表的一个连接关系。支持星型模型的多维分析;在创建Cube之前,用户需定义这么一个数据模型。
- Cube - 数据立方体,是一种多维分析的技术,通过预计算,将计算结果存储在某多个维度值所映射的空间中;在运行时通过对 Cube 的再处理而快速获取结果。
- Partition - 分区,用户可以定义一个分区日期或时间列,随后对 Cub e的构建按此列的值范围而进行,从而将 Cube 分成多个 Segment。
- Cube Segment - 每个 Cube Segment 是对特定时间范围的数据计算而成的 Cube,每个 Segment 对应一张 HBase 表。
- Aggregation Group - 聚合组,每个聚合组是全部维度的一个子集;通过将很多个维度分组,并把常一起使用的维度放在一起,可以有效降低 Cube 的组合数。
Any Code,Code Any!
欢迎扫码关注『AnyCode』,编程路上,你并不孤单。