Kylin


Kylin_总结

1.Kylin的创建model

创建model是将数据仓库根据模型逐步创建出来

2.构建Cube的思考

Cube是一个计算的单元,通过拿取指定的字段,不同的维度交叉提前计算

重新理解度量值:所有的聚合函数,sum max min 都是为度量值准备的

3.Kylin的Cube构建的思考

我们是这样构建Cube的,使用了四个维度值,一个度量值

1605698536760

剩下的字段是用于join的

1605698865168

然后使用字段互相join,把所有的可能计算完毕

1605699020709

上图中,四个度量值产生了15中可能

其中构建的过程中可以设置一些参数,

起到筛选的作用

比如衍生维度,聚合组,强制维度

4.SQL查询的思考

因为在kylin的架构中,

关闭了与hive相连接的路由器

所以仅仅支持已经预算好的查询

同时还有一些苛刻的条件

比如

求不同省份的总支付金额

-- sql_1
select
province_id,
sum(payment_amount)
from dwd_fact_payment_info pay
join dwd_dim_base_province pro
on pay.province_id=pro.id
group by pay.province_id

这个sql是完全没有问题的,但是再kylin中就目前的状态是完全无法执行的

然后按照下面状态修改

-- sql_2
select
pro.province_name,
sum(payment_amount)
from dwd_fact_payment_info pay
join dwd_dim_base_province pro
on pay.province_id=pro.id
group by pro.province_name--使用设定为维度的字段进行group_by

发现程序就可以正常运行了,

同时,我们在join的时候将事实表与维度表的位置进行对换,如下

-- sql_3
select
pro.province_name,
sum(payment_amount)
from dwd_dim_base_province pro
join dwd_fact_payment_info pay
on pay.province_id=pro.id
group by pro.province_name--使用维度表的字段进行group_by

然后程序还是报错,是不是哭了

其实–sql_3不能运行是可以理解的

SELECT
`pay`.`PAYMENT_TYPE`
,`user`.`GENDER`
,`pro`.`PROVINCE_NAME`
,`pro`.`REGION_NAME`
,`pay`.`PAYMENT_AMOUNT`
 FROM `GMALL`.`dwd_fact_payment_info` as pay
INNER JOIN `GMALL`.`dwd_dim_user_info_his_view` as `user`
ON `pay`.`USER_ID` = `user`.`ID`
INNER JOIN `GMALL`.`dwd_dim_base_province` as `pro`
ON `pay`.`PROVINCE_ID` = `pro`.`ID`
WHERE 1=1

这个是cube创建时自带的join语句,人家规定你必须事实表join维度表才可以进行查询,不能倒过来

那sql_1到底是什么问题造成的呢,

其实发现这种sql是有迹可循的,我们在创建cube的过程中,仅仅使用四个维度,同时使用三个关键字段,我们在查询的时候同样只能查询维度字段,而关联字段其实并不是存在于表中

也就是说,我们只能查出province_name(维度表dwd_dim_base_province中指定的维度),而不能查出province_id,这是关联字段,因此报错

5.定时开启Kylin脚本

#!/bin/bash

#从第1个参数获取cube_name
cube_name=$1

#从第2个参数获取构建cube时间
if [ -n "$2" ]
then
    do_date=$2
else
    do_date=`date -d '-1 day' +%F`
fi

#获取执行时间的00:00时间戳
start_date_unix=`date -d "$do_date 08:00:00" +%s`
#秒级时间戳变毫秒级
start_date=$(($start_date_unix*1000))

#获取执行时间的24:00的时间戳
stop_date=$(($start_date+86400000))

curl -X PUT -H "Authorization: Basic QURNSU46S1lMSU4=" -H 'Content-Type: application/json' -d '{"startTime":'$start_date', "endTime":'$stop_date', "buildType":"BUILD"}' http://hadoop102:7070/kylin/api/cubes/$cube_name/build

然后把这个脚本交给azkaban定时运行,是==restFulAPI==

查看文档

注意密码使用basic加密

注意时区

6.使用DataGrip连接Kylin

  1. JDBC驱动

  2. 在option里加上驱动

  3. jdbc:kylin://hadoop102:7070/FirstProject”

    ​ //Kylin的用户名

    ​ String KYLIN_USER = “ADMIN”;

    ​ //Kylin的密码

    ​ String KYLIN_PASSWD = “KYLIN”;

7.zeppelin

http://hadoop102:8080

启动:bin/zeppelin-daemon.sh start

修改8080端口步骤

来到conf目录下

cp zepplin-site.xml.template zepplin-site.xml
//然后修改端口号即可
7878

8.粒度问题的解析

8.1 测试一

手写sql

需求:查询不同地区的总支付金额

select
b.region_name,
sum(payment_amount)
from dwd_fact_payment_info a
join dwd_dim_base_province b
on a.province_id=b.id
group by b.region_name

结果:

1605705769764

脚本走一波

kylin_cube_build.sh payment_cube 2020-06-15
--cube_name dt

继续查询发现结果变了

select
b.region_name,
sum(payment_amount)
from dwd_fact_payment_info a
join dwd_dim_base_province b
on a.province_id=b.id
group by b.region_name

1605706482773

问题抛出,想查6-14号怎么办

select
b.region_name,
sum(payment_amount)
from dwd_fact_payment_info a
join dwd_dim_base_province b
on a.province_id=b.id
where dt = '2020-06-14'
group by b.region_name

报错,为什么

8.2 测试二

1605750723854

select
b.region_name,
sum(payment_amount)
from dwd_fact_payment_info a
join dwd_dim_base_province b
on a.province_id=b.id
where dt = '2020-06-14'
group by b.region_name

就是这样

9.kylin的关闭

kylin主程序

bin/kylin.sh stop/start
http://hadoop102:7070/kylin
--webUI
--用户名为:ADMIN,密码为:KYLIN
bin/stop-hbase.sh
http://hadoop102:16010](http://linux01:16010) 
--HBASE webUI 

文章作者: Jinxin Li
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Jinxin Li !
  目录