设计CUBE by kylin
1.新增或者选择一个已有项目(project)后,将hive数据导入到kylin中,web界面的Model→Data source,导入数据
2.创建数据模型,数据模型是Cube的基础,它主要用于描述一个星形模型。有了数据模型以后,定义Cube的时候就可以直接从此模型定义的表和列中进行选择了,省去重复指定连接(join)条件的步骤。基于一个数据模型还可以创建多个Cube,以方便减少用户的重复性工作。在Kylin界面的“Models”页面中,单击“New”→“New Model”,开始创建数据模型.
a.输入模型名称;b.选择一个事实表,添加维表(可选),添加维表时要选择表连接类型,inner或者left,然后选择连接的主键和外键,支持多主键;c.选择维度和度量列,这是选择一个范围,不代表将来一定要用作cube维度度量。后续创建Cube的时候,将只能从这些列中进行选择;d:setting,为模型补充分割时间列信息和过滤条件.如果此模型中的事实表记录是按时间增长的,那么可以指定一个日期/时间列作为模型的分割时间列,从而可以让Cube按此列做增量构建.过滤(Filter)条件是指,如果想把一些记录忽略掉,那么这里可以设置一个过滤条件。Kylin在向Hive请求源数据的时候,会带上此过滤条件。
3.设计cube
1.选择数据模型,定义cube名字,可选择输入邮箱,事件
2.选择维度
如果是衍生维度的话,则必须是来自于某个维度表,一次可以选择多个列,由于这些列值都可以从该维度表的主键值中衍生出来,所以实际上只有主键列会被Cube加入计算。而在Kylin的具体实现中,往往采用事实表上的外键替代主键进行计算和存储。但是在逻辑上可以认为衍生列来自于维度表的主键。
3.创建度量
4.关于Cube数据刷新的设置
在这里可以设置自动合并的阈值、数据保留的最短时间,以及第一个Segment的起点时间(如果Cube有分割时间列的话)
5.高级设置,可以设置聚合组和Rowkey
Kylin默认会把所有维度都放在同一个聚合组中;如果维度数较多(例如>10),那么建议用户根据查询的习惯和模式,单击“New AggregationGroup+”,将维度分为多个聚合组。通过使用多个聚合组,可以大大降低Cube中的Cuboid数量。下面来举例说明,如果一个Cube有(M+N)个维度,那么默认它会有2的m+n 次方个Cuboid;如果把这些维度分为两个不相交的聚合组,那么Cuboid的数量将被减少为2次方 +2次方。
在单个聚合组中,可以对维度设置高级属性,如Mandatory、Hierarchy、Joint等。
mandatory 美 ['mændətɔri]
- adj. 强制的;托管的;命令的
- n. 受托者(等于mandatary)
Hierarchy['haɪərɑrki] 是一组有层级关系的维度
Mandatory维度指的是那些总是会出现在Where条件或Group By语句里的维度;通过将某个维度指定为Mandatory,Kylin就可以不用预计算那些不包含此维度的Cuboid,从而减少计算量。
Joint是将多个维度组合成一个维度,其通常适用于如下两种情形:总是会在一起查询的维度,基数很低的维度。
Kylin以Key-Value的方式将Cube存储到HBase中。HBase的key,也就是Rowkey,是由各维度的值拼接而成的;为了更高效地存储这些值,Kylin会对它们进行编码和压缩;每个维度均可以选择合适的编码(Encoding)方式,默认采用的是字典(Dictionary)编码技术;除了字典以外,还有整数(Int)和固定长度(Fixed Length)的编码。
字典编码是将此维度下的所有值构建成一个从string到int的映射表;Kylin会将字典序列化保存,在Cube中存储int值,从而大大减小存储的大小。另外,字典是保持顺序的,即如果字符串A比字符串B大的话,那么A编码后的int值也会比B编码后的值大;这样可以使得在HBase中进行比较查询的时候,依然使用编码后的值,而无需解码。
字典非常适合于非固定长度的string类型值的维度,而且用户无需指定编码后的长度;但是由于使用字典需要维护一张映射表,因此如果此维度的基数很高,那么字典的大小就非常可观,从而不适合于加载到内存中,在这种情况下就要选择其他的编码方式了。Kylin中字典编码允许的基数上限默认是500万(由参数“kylin.dictionary.max.cardinality”配置)。
整数(int)编码适合于对int或bigint类型的值进行编码,它无需额外存储,同时还可以支持很大的基数。用户需要根据值域选择编码的长度。例如有一个“手机号码”的维度,它是一个11位的数字,如13800138000,我们知道它大于231 ,但是小于239 -1,那么使用int(5)即可满足要求,每个值占用5字节,比按字符存储(11字节)要少占用一半以上的空间。
新创建的Cube只有定义,而没有计算的数据,它的状态是“DISABLED”,是不会被查询引擎挑中的。要想让Cube有数据,还需要对它进行构建。Cube的构建方式通常有两种:全量构建和增量构建;两者的构建步骤是完全一样的,区别只在于构建时读取的数据源是全集还是子集。
Cube的构建包含如下步骤,由任务引擎来调度执行。
1)创建临时的Hive平表(从Hive读取数据)。
2)计算各维度的不同值,并收集各Cuboid的统计数据。
3)创建并保存字典。
4)保存Cuboid统计信息。
5)创建HTable。
6)计算Cube(一轮或若干轮MapReduce)。
7)将Cube的计算结果转成HFile。
8)加载HFile到HBase。
9)更新Cube元数据。
10)垃圾回收。
构建cube遇到的问题:
java.lang.NullPointerException
可能是没有获取最新的meta数据导致
解决方法:reload metadata
重新分布中间表
设计CUBE by kylin的更多相关文章
- Kylin的cube模型
1. 数据仓库的相关概念 OLAP 大部分数据库系统的主要任务是执行联机事务处理和查询处理,这种处理被称为OLTP(Online Transaction Processing, OLTP),面向的是顾 ...
- 【转】Kylin的cube模型
转自:http://www.cnblogs.com/en-heng/p/5239311.html 1. 数据仓库的相关概念 OLAP 大部分数据库系统的主要任务是执行联机事务处理和查询处理,这种处理被 ...
- kylin简单优化cube
优化Cube 层次结构 理论上,对于N维,你最终会得到2 ^ N维组合.但是对于某些维度组,不需要创建这么多组合.例如,如果您有三个维度:洲,国家,城市(在层次结构中,“更大”维度首先出现).在深入分 ...
- Kylin Cube构建过程优化
原文地址:https://kylin.apache.org/docs16/howto/howto_optimize_build.html Kylin将一个cube的build过程分解为若干个子步骤,然 ...
- kylin构建cube优化
前言 下面通过对kylin构建cube流程的分析来介绍cube优化思路. 创建hive中间表 kylin会在cube构建的第一步先构建一张hive的中间表,该表关联了所有的事实表和维度表,也就是一张宽 ...
- kylin cube 构建过程
本文是对 http://kylin.apache.org/docs20/howto/howto_optimize_build.html的翻译,以便阅读. 1. 创建 Hive 中间表(Create ...
- Kylin构建Cube过程详解
1 前言 在使用Kylin的时候,最重要的一步就是创建cube的模型定义,即指定度量和维度以及一些附加信息,然后对cube进行build,当然我们也可以根据原始表中的某一个string字段(这个字段的 ...
- Kylin Flink Cube 引擎的前世今生
Apache Kylin™ 是一个开源的.分布式的分析型数据仓库,提供 Hadoop/Spark 之上的 SQL 查询接口及多维分析(OLAP)能力以支持超大规模数据,它能在亚秒内查询巨大的表. Ky ...
- kylin(一): 原理架构
由eBay开源的一个大数据OLAP框架,2014年11月加入了Apache,项目名字也改成了"Apache Kylin",Apache Kylin是唯一来自中国的Apache顶级开 ...
随机推荐
- UE4 PostProcessVolume 蓝图操作后期框
如图找到场景里面的后期框,首先我们要获得它的设置,Settings 大概就是属性的意思.通过Settings设置其它的属性.Set members in PostProcessSetting 就是接口 ...
- What is the Annotation?
Annotation称为注释或注解,它是一个接口.注解提供了一种为程序元素(类.方法.成员变量等)设置元数据(描述其它数据的数据)的方法.编译器.开发工具或其它程序中可以通过反射来获取程序中的Anno ...
- 配置GO开发环境
目前准备开发一套服务器的实时监控系统,经过与大佬讨论,决定选择golang作为数据的中间件. 负责接收游戏服务器的打点数据.清洗数据,入库等流程. 在github上选了一个高星的Go框架,https: ...
- 剑指offer 9.递归和循环 变态跳台阶
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 这道题还是编程题? 数学渣渣看到心拔凉拔凉的, 要用到数学归纳法来 ...
- 剑指offer 4.树 重建二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7, ...
- python中防止字符串转义
有学生问了个问题,试了好多办法都不行,搜也搜不到,只能自己尝试了,顺利解决. 问题描述: 如果一个字符串包含转义字符,如“adfdfasd\tfdsadf\t”,正常print会将\t看作转义字符ta ...
- 承接小程序外包 微信小程序外包 H5外包 就找北京动点软件
承接小程序外包 微信小程序外包 H5外包 就找北京动点软件 长年承接微信小程序.微信公众号开发 全职的H5开发团队,开发过几十款微信小程序公众号案例 欢迎来电咨询 QQ:372900288 微信:li ...
- 关于Rabbitmq的routingkey的作用
对于消息发布者而言它只负责把消息发布出去,甚至它也不知道消息是发到哪个queue,消息通过exchange到达queue,exchange的职责非常简单,就是一边接收发布者的消息一边把这些消息推到qu ...
- PAT 乙级 1080 MOOC期终成绩 (25 分)
1080 MOOC期终成绩 (25 分) 对于在中国大学MOOC(http://www.icourse163.org/ )学习“数据结构”课程的学生,想要获得一张合格证书,必须首先获得不少于200分的 ...
- 未来-区块链-IBM:IBM 区块链技术开发社区
ylbtech-未来-区块链-IBM:IBM 区块链技术开发社区 1.返回顶部 1. 开始学习 IBM Blockchain 101:开发人员快速入门指南 这篇快速入门指南适合不熟悉区块链技术,希望快 ...