OLAP引擎Kylin——创建多维分析的Cube

  |   0 评论   |   4,484 浏览

准备数据

下载以下文件,放在/tmp目录下

city.txt

fact_data.txt

region.txt

ll /tmp/kylin/
总用量 16
-rw-r--r-- 1 root root  178 6月   8 18:25 city.txt
-rw-r--r-- 1 root root 5439 6月   8 18:19 fact_data.txt
-rw-r--r-- 1 root root   58 6月   8 18:21 region.txt

执行以下sql

create table web_access_fact_tbl(
day date,
cookieid string,
regionid string,
cityid string,
siteid string,
os string,
pv bigint
)
row format delimited
fields terminated by '|' stored as textfile;
create table region_tbl(
regionid string,
regionname string
)
row format delimited
fields terminated by '|' stored as textfile;
create table city_tbl(
regionid string,
cityid string,
cityname string
)
row format delimited
fields terminated by '|' stored as textfile;
LOAD DATA LOCAL INPATH '/tmp/kylin/fact_data.txt' INTO TABLE web_access_fact_tbl;
LOAD DATA LOCAL INPATH '/tmp/kylin/city.txt' INTO TABLE city_tbl;
LOAD DATA LOCAL INPATH '/tmp/kylin/region.txt' INTO TABLE region_tbl;

创建Project

image.png

image.png

创建Data Source

加载Hive表

有三种方式可以加载,我们选择中间的

image.png

image.png

加载成功

image.png

查看加载完成的表

image.png

创建Model

image.png

起名

image.png

添加Lookup Table

选择事实表

image.png

指定Join的条件


image.png

选择维度字段

image.png选择度量字段

image.png

设置Cube增量刷新的分区字段

如果分区字段为空,则每次全量刷新Cubeimage.png

检查Model

Model建立完成后可以查看一下,有三种方式,分别是Grid、Visualization、JSON

image.png

创建Cube

image.png

基本信息

image.png

添加维度

image.png

我们直接select all

image.png

选择度量

image.png

我们需要对pv进行sum操作,对cookieid进行count distinct去重统计个数

image.png

刷新设置

image.png

高级设置

进行一些Cube优化

2.png

属性设置

image.png

回顾一下

没有问题直接Save

image.png

预览

image.png

Build Cube

image.png

指定日期

我们选择

Start Date (Include)2016-07-01 00:00:00
End Date (Exclude)2016-07-31 00:00:00


image.png

查看Job

提交之后,我们通过Monitor界面可以看到Cube正在被构建

image.png

等待构建完成之后,可以看到Cube的状态已经从DISABLED变成READY了

image.png


查询Cube

打开Insight页面

执行以下SQL

select "DAY",regionname, cityname, sum(pv), count(distinct cookieid)
from WEB_ACCESS_FACT_TBL a
inner join CITY_TBL b
on a.cityid = b.cityid
inner join REGION_TBL c
on c.regionid = a.regionid
group by "DAY", regionname, cityname

image.png

可以看到,在0.49s就返回了结果

image.png

可能出现的错误

No realization found for rel#7125:OLAPTableScan.OLAP.[]

如果我们将上述的inner join替换成left join,则会提示如下错误

No realization found for rel#7125:OLAPTableScan.OLAP.[](table=[DEFAULT, WEB_ACCESS_FACT_TBL],ctx=,fields=[0, 1, 2, 3, 4, 5, 6, 7, 8]), JoinDesc [type=LEFT, primary_key=[CITYID], foreign_key=[CITYID]], JoinDesc [type=LEFT, primary_key=[REGIONID], foreign_key=[REGIONID]] while executing SQL: "select "DAY",regionname, cityname, sum(pv), count(distinct cookieid) from WEB_ACCESS_FACT_TBL a left join CITY_TBL b on a.cityid = b.cityid left join REGION_TBL c on c.regionid = a.regionid group by "DAY", regionname, cityname LIMIT 50000"

image.png

原因是我们创建Model时选择的是INNER类型的JOIN,则此处也只能是INNER JOIN

image.png


读后有收获可以支付宝请作者喝咖啡