kylin 2.1的坑

kylin是一款还算不错的大数据分析软件。即对表的维度进行类似笛卡尔积种情况的聚合统计。
事实表A有5个字段,含有维度字段1,维度字段2,维度字段3,数值1,数值2
维度字段有10个数值,维度字段2有5个数值,维度字段3有6个数值
那么kylin做的事情就是对10*5*6种情况对数值1、数值2进行各种聚合统计。

主要适用于数值的sum

吐槽1:count,虽然记录数统计是默认自带的,但是仅仅在kylin web中的insight中以count(1)的形式存在,那么当我们使用Tableau通过odbc访问的时候,只能取到A表的5个字段,不能取到count,这就尴尬了。我的临时解决方案,就是在hive建A表的时候,添加一个字段名叫total_records,数值为1。然后total_records设为数值,对其进行sum,那么记录数就存在这个字段里了。

mysql每次通过sqoop抽取的时候要记得写别名,否则会报错

select order_id,total_amount,DATE_FORMAT(modify_time,'%Y-%m-%d %H:00:00') as modify_time,state,payment_type,1 as total_recordsfrom tr_order_thrid where STATE<>1 and modify_time>='${startTime}' and modify_time<'${endTime}'
吐槽2:distinct count不建议使用,因为分类数据是分布存储的,当然kylin有模糊算法所以统计肯定不准确的,不准确的数据就没有意义。想统计准确,就要耗费大量的时间这反而不如关系库了。

吐槽3:分析计算自然就要进行定时任务处理,kylin自身没有这个功能,所以只能通过调用RESTful api,定时增量触发创建cube需要传输起始和截止时间点,这里用的是绝对毫秒数(linux shell date +%s),槽点就在这里,kylin收到请求后会对这两个时间点自动减28800000毫秒即8小时,我去~~~~~~~~文档和书都不说的。

吐槽4:kylin不支持的函数以及sql写法比较多,估计大数据处理最擅长对分类信息进行计数,对于占内存较多的复杂逻辑判断是屏蔽的。

1、日期函数的处理,例如日期前后计算。

2、不支持笛卡尔积查询,select * from a,b

3、不支持临时字段的多层嵌套

select t_hour,sum(va1),sum(va2),sum(va3) from (
    select t_hour,
    (case when t_day=10 then total_amount else 0 end) as va1, 
    (case when t_day=9 then total_amount else 0 end) as va2,
    (case when t_day=8 then total_amount else 0 end) as va3
    from tr_order_thrid where
    t_year=2018 and t_month=1 
    and state='2' and payment_type='14'
) z group by t_hour

4、不擅长做时间为轴的折线图。

如果要有时间轴,那么必须要把时间作为维度,年度做维度还行,但如果要精确到小时甚至分的话,那时间维度基数太大,其计算量巨大,时间甚至是关系库的几万倍。这一块建议用时序数据库吧,例如influxdb+grafana


希望kylin在后续版本能做的更人性化点吧。

kylin版本:apache-kylin-2.1.0-bin-hbase1x

你可能感兴趣的:(大数据)