Apache Kylin下cube创建和测试过程

时间:2024-03-15 16:15:19

apache kylin下cube创建和测试过程

前提:hadoop开启,hbase开启,kylin开启
先运行kylin给的示例cube,正常运行
在Insight界面执行查询语句,显示正常
至少保证kylin能完整运行,能正常查询
不要因为环境原因而导致各种错误

1. 创建hive表

先在kylin的安装目录下打开hive:

cd /usr/local/apache-kylin-2.3.1-bin
hive
Apache Kylin下cube创建和测试过程

然后建立一个数据库
create database student_db;
创建完后查看数据库
show databases;
Apache Kylin下cube创建和测试过程

进入student_db
use student_db;

创建表(这一步很重要,过程繁琐,容易出错,代码建议分行)
-> create table student_fact
-> (number int, name string, point float, level int, height int)
-> row format delimited #行格式分隔
-> fields terminated by ‘\t’ #字段终止符为tab制表符*
-> stored as textfile; #保存为文本文件

*:此处可改,我这边用的是制表符,也可以用 ‘,’ 或者 ‘|’ 等符号,主要看数据格式用那个方便

Apache Kylin下cube创建和测试过程

这是我txt文件里到数据
现在从txt文件里把数据导入到hive表中

load data local inpath ‘/home/lz/下载/新建文本文档.txt’ into table student_fact;

这里到路径是我txt文件存放到位置,不多说了
然后查看导入到数据
select * from student_fact;
Apache Kylin下cube创建和测试过程

可以看到数据导入成功
注意:
这里可以看到最上面一行除了name显示出来了,其他的都显示NULL
这是因为,元数据txt里,我把字段名也写进去里,其实在创建时,字段名就已经定好了,不需要我们在元数据里写明。
为什么只有name显示?是因为name那一列的类型是正好是string,元数据里的number、point等都是string类型,他们的实际存储类型是int或者当然显示不出来了

hive里的数据准备好了,我们可以去创建cube了
(下面部分kylin官方文档里有详细说明,我就简短的说一下)
详见:http://kylin.apache.org/cn/docs/tutorial/create_cube.html

2. 新建model

首先新建一个project,然后选中它
新建model

(1)输入名字:mytest_model
(2)选择事实表和唯独表:
我这里只有一张事实表student_fact
Apache Kylin下cube创建和测试过程

(3)选择维:
我这里选到是number,name,point,level(其实这里有问题,下面详细讲)
Apache Kylin下cube创建和测试过程
(4)选择度量:
这里只选了一个height
Apache Kylin下cube创建和测试过程
为什么这么选是因为我们的数据比较少。
如何区分维和度量,个人理解是维的值是唯一的,度量的值是可以重复的。
上述唯一的值只有number
name,point,level和height的值都是可以重复的,一般这些详细的数据会放在维度表中,但我们只是测试,所以放在了事实表中。
所以严格上讲上述的model是有问题的,但对于我们接下来操作不影响。

3. model创建好后,开始创建cube

(1)选择模型:mytest_model
输入名字:mytest_cube

(2)选择维:
当然是全选
Apache Kylin下cube创建和测试过程

(3)选择度量

我们只有一个度量值height,虽然只有一个,那就做一个和运算吧
对于大部分处理的数据来说,这一步很关键,这涉及到以后查询的目的
我们只是做一个象征性的处理
Apache Kylin下cube创建和测试过程

(4)更新设置,具体看官方文档
5.6.7步我都是直接点的next,因为基本上默认配置就行
极个别需要更改设置的详见官方文档

4. cube创建好后开始build

bulid之后可以去Insight界面查询了

先来一句
select * from student_fact;
Apache Kylin下cube创建和测试过程

可以看到执行之后到详细数据了
1.为什么下面多了一个name?
因为一开始说了name那一行的数据有问题,所以name是多余的数据
2.为什么height那一行没有数据?
个人猜测:这是一张事实表,不会显示度量的数据;当然那,也有可能是我们把height做了求和运算

那再执行一句:
select sum(height) from student_fact;
Apache Kylin下cube创建和测试过程
看到了结果,看一下元数据
30+5+210+198+203+189=835
数据没错

总结:这些数据只是本人测试在kylin中使用cube时创建的数据,具体操作因实际情况而定,仅做参考。