Kylin定时增量build

2019-02-20  本文已影响0人  来搞事情

1、从 Kafka 流构建的 Cube

cubeName=xxxxxxxx
  
curl -X PUT -H "Authorization: Basic QURNSU46S1lMSU4=" -H 'Content-Type: application/json' -d '{ "sourceOffsetStart": 0, "sourceOffsetEnd": 9223372036854775807, "buildType": "BUILD"}' http://127.0.0.1:7070/kylin/api/cubes/$cubeName/build2

2、从hive构建的Cube

#!/bin/bash  
  
###################################################################################################################  
## 脚本功能:之前脚本任务完成后,使用Kylin命令,增量更新Kylin cube  
## 修改历史:  
#     
  
#加入Kylin增量build cube  
##cubeName  cube的名称  
##endTime  执行build cube的结束时间 (命令传给Kylin的kylinEndTime = realEndTime + (8小时,转化为毫秒)。只需要给Kylin传入build cube的结束时间即可。)  
##buildType  BUILD 构建cube操作(还有Refresh、Merge等操作,增量构建为BUILD)  
#但是实际时间cube的构建抽取数据时间确比设置时间提前1天(实际上是提前8小时)【2017-10-21~2017-10-22】,但是使用kylinUI构建却没有问题,实际查看kylin源码发现,是由于kylin在server端源码使用的timezone固定为GMT而非配置的GMT+8,而前端UI会根据配置的timezone对页面添加的时间进行转换变GMT+8的时间,然后后端将GMT+8时间在转化为GMT的时间,所以kylinUI的cube构建时间不会出现错误,而使用restAPI构建cube时间不进行timezone转化就是出现时间不准确差8个小时的问题。
##只需要指定endtime,startTime 即上次的endTime,在cube的SEGMENT中有记录

kylinMinusTime=$((8 * 60 * 60 * 1000)) #kyin提前8小时,所以需要偏移8小时
#yesterday=`date -d yesterday +%Y-%m-%d` 
#prevTimeStamp=`date -d '-5 minute' +%s`  
#prevTimeStampMs=$(($prevTimeStamp*1000 + `date "+%N"`/1000000)) #将current转换为时间戳,精确到毫秒  

today=`date +%s`  
#todayTimeStamp=`date -d "$today 00:00:00" +%s`  
#todayTimeStampMs=$(($today*1000 + `date "+%N"`/1000000)) #将current转换为时间戳,精确到毫秒  

onedayTime=$((24 * 60 * 60 * 1000)) #24小时的毫秒数
tomorrowTimeStampMs=$(($today*1000 + $onedayTime)) #当前时间偏移24小时

#startTime=$(($prevTimeStampMs + $kylinMinusTime)) 
endTime=$(($tomorrowTimeStampMs + $kylinMinusTime)) 

cubeName=xxxxxxxx

curl -X PUT -H "Authorization: Basic QURNSU46S1lMSU4=" -H 'Content-Type: application/json' -d '{"endTime":'$endTime', "buildType":"BUILD"}' http://127.0.0.1:7070//kylin/api/cubes/$cubeName/rebuild

3、hive 全量构建

#!/bin/bash  
  
###################################################################################################################  
## 脚本功能:datax 同步昨天的数据到hive中后,使用脚本先disable当前的cube,再清空,再重建,因为这个hive中的数据每次都是以前的分区和增量数据构成一个新的分区,不能拿出来增量数据
## 修改历史:  
#     
  
#加入Kylin增量build cube  
##cubeName  cube的名称  
##endTime  执行build cube的结束时间 (命令传给Kylin的kylinEndTime = realEndTime + (8小时,转化为毫秒)。只需要给Kylin传入build cube的结束时间即可。)  
##buildType  BUILD 构建cube操作(还有Refresh、Merge等操作,增量构建为BUILD)  
#但是实际时间cube的构建抽取数据时间确比设置时间提前1天(实际上是提前8小时)【2017-10-21~2017-10-22】,但是使用kylinUI构建却没有问题,实际查看kylin源码发现,是由于kylin在server端源码使用的timezone固定为GMT而非配置的GMT+8,而前端UI会根据配置的timezone对页面添加的时间进行转换变GMT+8的时间,然后后端将GMT+8时间在转化为GMT的时间,所以kylinUI的cube构建时间不会出现错误,而使用restAPI构建cube时间不进行timezone转化就是出现时间不准确差8个小时的问题。
  
kylinMinusTime=$((8 * 60 * 60 * 1000)) #kyin提前8小时,所以需要偏移8小时
onedayTime=$((24 * 60 * 60 * 1000)) #24小时的毫秒数
#yesterday=`date -d yesterday +%Y-%m-%d` 
#prevTimeStamp=`date -d '-5 minute' +%s`  
#prevTimeStampMs=$(($prevTimeStamp*1000 + `date "+%N"`/1000000)) #将current转换为时间戳,精确到毫秒  \

today=`date -d today +%Y-%m-%d` 
todayTimeStamp=`date -d "$today 00:00:00" +%s`  
todayTimeStampMs=$(($todayTimeStamp*1000)) #将current转换为时间戳,精确到毫秒  

tomorrowTimeStampMs=$(($todayTimeStampMs + $onedayTime)) #当前时间偏移24小时

startTime=$(($todayTimeStampMs + $kylinMinusTime)) 
endTime=$(($tomorrowTimeStampMs + $kylinMinusTime))  

cubeName=xxxxxx

curl -X PUT -H "Authorization: Basic QURNSU46S1lMSU4=" -H 'Content-Type: application/json' http://127.0.0.1:7070/kylin/api/cubes/$cubeName/disable
#curl -X PUT -H "Authorization: Basic QURNSU46S1lMSU4=" -H 'Content-Type: application/json' http://127.0.0.1:7070/kylin/api/cubes/$cubeName/enable
curl -X PUT -H "Authorization: Basic QURNSU46S1lMSU4=" -H 'Content-Type: application/json' http://127.0.0.1:7070/kylin/api/cubes/$cubeName/purge
curl -X PUT -H "Authorization: Basic QURNSU46S1lMSU4=" -H 'Content-Type: application/json' -d '{"startTime":'$startTime', "endTime":'$endTime', "buildType":"BUILD"}' http://127.0.0.1:7070/kylin/api/cubes/$cubeName/build
上一篇下一篇

猜你喜欢

热点阅读