《Apache Kylin处理分表时间戳更新机制》

1、生产场景

从Kafka获得的数据导入至HBase,kylin java api 需要依据HBase中数据的RowKey及时间戳,refresh或者build相应的cube。

2、问题描述

新增数据自然没有问题,RowKey、时间戳直接拿来用,但是如果执行的是更新、修改操作:主表没问题,分表有问题。由于Kylin在建cube的时候是以时间字段作为分区,该时间字段必为主表的时间字段,所以主表更新修改时,HBase中的时间戳即为需刷新的时间字段,但若是分表,则时间戳并不一定对应主表的时间字段,所以不能直接依据它来刷新对应cube。

3、补充说明

更新后的方案,RowKey设计将不再是(主键+时间戳)而是直接让主键作为其RowKey,时间戳自有qualifier承担,分表ID即为分表主键。

4、解决方案

创建cube的同时,建立一份OA配置文件,文件中涉及到七个字段,从左往右依次为:待建模的表名、对应cube、关联主表、主表的时间字段、主表主键、对应的项目名称、具体的SQL查询语句。

其中第七列sql语句实现的功能即为通过分表的主键查询对应主表的时间字段,设在主表为A、分表为B、存储在Hive中的C数据库中,主表与分表通过left join或者inner join的方式关联,join的关联字段,在主表和分表中,分别为D和E,主表的时间字段为F,则具体的SQL语句如下:select F from C.A as t left|inner join C.B as t1 on t.D = t1.E where t1.id="具体的值"

你可能感兴趣的:(《Apache Kylin处理分表时间戳更新机制》)