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