1. 数据仓库的相关概念

OLAP

大部分数据库系统的主要任务是执行联机事务处理和查询处理,这种处理被称为OLTP(Online Transaction Processing, OLTP),面向的是顾客,诸如:办事员、DBA等。而数据仓库主要面向知识工人(如经理、主管等)提供数据分析处理,这种处理被称为OLAP(Online Analysis Processing)。OLTP管理的是当前数据,比较琐碎,很难用于做决策。而OLAP管理的是大量历史数据,提供汇总与聚集机制,并在不同的维度、不同的粒度存储和管理信息。

特征 OLTP OLAP
面向 办事员、DBA 知识工人
DB设计 基于ER,面向应用 星形/雪花,面向主题
数据 当前的、确保更新 历史的、跨时间维护
视图 详细、一般关系 汇总的、多维的
访问 读/写 大多数为读
度量 事务吞吐量 查询吞吐量、访问时间

举个简单的例子:我们会用OLTP去管理app名称与app类别的映射关系;而分析某一周app(和app类别)的UV,则会使用OLAP;并且OLAP提供了数据的多维观察——比如:在某周在华为手机上top100用户的APP

Fact Table

事实表(Fact Table)是中心表,包含了大批数据并不冗余,其数据列可分为两类:

  • 包含大量数据事实的列;
  • 与维表(Dimension Table)的primary key相对应的foreign key。

Lookup Table

Lookup Table包含对事实表的某些列进行扩充说明的字段。在Kylin的quick start中给出sample cube(kylin_sales_cube)——其Fact Table为购买记录,lookup table有两个:用于对购买日期PART_DT、商品的LEAF_CATEG_ID与LSTG_SITE_ID字段进行扩展说明。

Dimension

维表(Dimension Table)是由fact table与lookup table逻辑抽象出来的表,包含了多个相关的列(即dimension),以提供对数据的多维观察;其中dimension的值的数目称为cardinatily。在kylin_sales_cube的事实表的LSTG_FORMAT_NAME被单独抽出来做一个dimension,可与其他维度组合分析数据。

Star Schema

星形模式(Star Schema)包含一个或多个事实表、一组维表,其中维表的primary key与事实表的foreign key相对应。这种模式很像星光四射,维表显示在围绕事实表的射线上。下图是我根据某数据源所建立的星形模式:

Cube

cube是所有的dimensions组合,任一dimensions的组合称为cuboid。因此,包含\(n\)个dimensions的cube有\(2^n\)个cuboid,如下图所示:

2. Kylin介绍

Dimension

为了减少cuboid的数目,Kylin将Dimension分为四种类型:

  • Normal,为最常见的类型,与所有其他的dimension组合构成cuboid。
  • Mandatory,在每一次查询中都会用到dimension,在下图中A为Mandatory dimension,则与B、C总共构成了4个cuboid,相较于normal dimension的cuboid(\(2^3=8\))减少了一半。

  • Hierarchy,为带层级的dimension,比如说:省份->城市, 年->季度->月->周->日;以用于做drill down。

  • Derived,指该dimensions与维表的primary key是一一对应关系,可以更有效地减少cuboid数量,详细的解释参看这里;并且derived dimension只能由lookup table的列生成。


然而,Kylin的Hierarchy dimensions并没有做集合包含约束,比如:kylin_sales_cube定义Hierarchy dimension为META_CATEG_NAME->CATEG_LVL2_NAME->CATEG_LVL3_NAME,但是同一个CATEG_LVL2_NAME可以对应不同META_CATEG_NAME。因此,hierarchy 显得非常鸡肋,以至于在Kylin后台处理时被废弃了(详见Li Yang在mail group中所说):

@Julian, plan to refactor the underlying aggregation group in Q4. Will drop
hierarchy concept in the backend, however in the frontend for ease of
understanding, may still call it hierarchy.

Measure

Measure为事实表的列度量,Kylin提供诸如:

  • Sum
  • Count
  • Max
  • Min
  • Average
  • Distinct Count (based on HyperLogLog)

等函数,一般配合group by dimesion使用。

3. 实战

下面的SQL语句是在kylin_sales_cube build成功后执行的。

sql命令select * from kylin_sales,得到fact table所缓存的列——均为dimension的主key、measure中所需计算的字段。

各个时间段内的销售额及购买量:

select part_dt, sum(price) as total_selled, count(distinct seller_id) as sellers
from kylin_sales
group by part_dt
order by part_dt

查询某一时间的销售额及购买量,

select part_dt, sum(price) as total_selled, count(distinct seller_id) as sellers
from kylin_sales
where  part_dt = '2014-01-01'
group by part_dt

发现报错:

Error while compiling generated Java code:
public static class Record3_0 implements java.io.Serializable {            public java.math.BigDecimal f0; public boolean f1; public org.apache.kylin.common.hll.HyperLogLogPlusCounter f2;          public Record3_0(java.math.BigDecimal f0, boolean f1, ...

这是因为part_dt是date类型,在解析string到date的时候出问题,应将sql语句改为:

select part_dt, sum(price) as total_selled, count(distinct seller_id) as sellers
from kylin_sales
where part_dt between '2014-01-01' and '2014-01-01'
group by part_dt-- or
select part_dt, sum(price) as total_selled, count(distinct seller_id) as sellers
from kylin_sales
where part_dt = date '2014-01-01'
group by part_dt

上面查询只用到了fact table,而没有用到lookup table。如果查询各个时间段所有二级商品类型的销售额,则需要fact table与lookup table做inner join:

select fact.part_dt, lookup.CATEG_LVL2_NAME, count(distinct seller_id) as sellers
from kylin_sales fact
inner join KYLIN_CATEGORY_GROUPINGS lookup
on fact.LEAF_CATEG_ID = lookup.LEAF_CATEG_ID and fact.LSTG_SITE_ID = lookup.SITE_ID
group by fact.part_dt, lookup.CATEG_LVL2_NAME
order by fact.part_dt desc

4. 参考资料

[1] 韩家炜,《数据挖掘——概念与技术》.
[2] 教练_我要踢球, OLAP引擎——Kylin介绍.
[3] Kylin, Design Cube in Kylin.

转载于:https://www.cnblogs.com/en-heng/p/cube-model-of-kylin.html

Kylin的cube模型相关推荐

  1. kylin KV+cube方案分析

    2019独角兽企业重金招聘Python工程师标准>>> 前言   在使用Kylin的时候,最重要的一步就是创建cube的模型定义,即指定度量和维度以及一些附加信息,然后对cube进行 ...

  2. Cube和Kylin创建Cube的过程

    转载:http://www.aboutyun.com/thread-20757-1-1.html 简介 Kylin作为一个OLAP引擎,需要Cube模型支撑,在我们的工作过程中,在和用户以及相关的开发 ...

  3. 模型相关:SolidWorks创建Cube模型,在3DMax中给不同面添加不同颜色,导出自带纹理的FBX至Unity

    项目场景: 为了实现将SolidWorks创建的Cube模型,在3DMax中添加不同颜色,导出带有纹理的FBX,导入Unity后不需要再修改其颜色纹理 实现方法: 1.在SolidWorks中创建形如 ...

  4. shell调度kylin的cube构建任务

    shell调度kylin的cube调度任务 shell shell 1 #!/bin/bash2 3 echo "kylin_host_port:${1}"4 echo " ...

  5. CC00027.kylin——|HadoopOLAP_Kylin.V27|——|Kylin.v27|Kylin构建Cube|实时OLAP.V3|

    一.定义数据源 ### --- 定义数据源~~~ # 1.创建数据源 ~~~ # 2.填写kafka集群信息 ~~~ # 3.通过kylin加载的json字段:创建流表维表格式 ~~~ # 4.查看加 ...

  6. 大数据Kylin(六):Kylin构建Cube算法

    文章目录 Kylin构建Cube算法 一.​​​​​​​layered cubing

  7. kylin的cube的原理

    Kylin基本原理及概念 2019-01-24阅读 1K0 "带你走进Apache Kylin的世界" Kylin版本:2.5.1 前言 膜拜大神,Kylin作为第一个由国人主导并 ...

  8. 使用ReportStudio打开cube模型创建报表出现两个最细粒度名称

    本人也是第一次遇到这样的问题,此问题甚是简单,也许很简短的一句话就可以解决这个问题了,看官请留神哦 cube做好发布到cognos之后使用Analysis Studio打开结构正常 于是想到要用此数据 ...

  9. kylin: build cube Hbase: Region Server 意外退出

    背景 跑kylin 的 build cube 任务,总是在跑任务(数据量200M)的时候挂掉,各种调节yarn的参数都不行. 关键跑的时候还没涉及到hbase,因为我跑的是kylin on druid ...

最新文章

  1. Session丢失的解决办法小结
  2. css 回到首页按钮,js+css实现回到顶部按钮(back to top)
  3. php cas 票据认证失败,解决CAS客户端验证ST票据时发生的TicketValidationException问题...
  4. 雷电模拟器链接服务器未响应,雷电模拟器经常卡顿怎么办?分享多种解决方法...
  5. graphpad细胞增殖曲线_Graphpad 作图教程 | 这份超详细的生存曲线绘制指南,科研新手一看就会!...
  6. 篮球中的PG,SG,SF,PF 英文全称分别是什么
  7. mysql XA 分布式事务、DTM TCC事务(多语言支持)
  8. Jetpack Compose Modifier用法详解,如何保证高可用
  9. [转载]【电子书下载神器】太给力了!你还找不到想要的电子书吗?
  10. 演讲者模式投影到幕布也看到备注_在PPT中插入备注时,如何在放映时只让演讲者看到,而观众看不到...
  11. Pantera Capital创始合伙人:最大遗憾是没有投资以太坊ICO
  12. Linux 学习笔记3 -- 常用 Linux 命令的基本使用
  13. python F5创建pool和创建member(一)
  14. 一步步学习微软InfoPath2010和SP2010--第一章节--介绍InfoPath2010
  15. 什么是PEPPOL BIS?
  16. zabbix自定义报警——(邮箱,微信)
  17. 工欲善其事必先利其器 之 DockerDesktop(上)
  18. Win11右下角时间怎么显示星期几?
  19. 《画解数据结构》之画解二叉树
  20. python方差函数_python numpy实现 标准差,方差

热门文章

  1. Ubuntu 20.04系统中安装vncserver的方法步骤
  2. 12C OCP 1Z0-063 题库(8月以前)
  3. 手机做条码扫描传给电脑_有线和无线扫描枪常用测试工具和软件你知道哪些?...
  4. 如何将zipoutputstream返回_性能问题|如何正确使用“缓存”?
  5. linux打开没有图形界面,linux无法打开图形界面
  6. centos 7 mysql 默认_centos7 mysql 5.6.30 默认配置文件
  7. 小学计算机课的活动设计方案,小学信息技术兴趣小组活动策划书三篇
  8. 暮色森林模组_我的世界怎样进入暮色森林
  9. Win2003 Server 安全的个人Web服务器
  10. 修改wamp的apache默认端口80为8088以及www目录