Kylin中的Hybrid Model

Kylin中的Hybrid Model

官方文档地址:http://kylin.apache.org/blog/2015/09/25/hybrid-model/
Apache kylin1.0中的混合模型(Hybrid Model)
对于传入的SQL查询,kylin会选择一个实现来提供查询,在“Hybrid Modle”出现之前,只有Cube这一种实现方式为用户开放,即只会选择1个Cube来回答查询。
有如下示例:某用户有一个叫做“Cube_V1”的Cube,已经构建了几个月,现在,用户希望添加新的维度或者指标来满足业务需求,所以创建了一个新的名为“Cube_V2”的Cube。
在某些原因下,用户想要保留“Cube_V1”,并期望从“Cube_V1”结束的日期构建“Cube_V2”;
可能的原因有:
(1)历史源数据已经从Hadoop中删除,无法从一开始就构建“Cube_V2”;
(2)Cube很大,重建会需要很大的时间;
(3)新的dimension/metrics仅在某一天可用或被应用;
(4)当查询使用新的dimension/metrics时,用户查询结果为空。
对于公共的dimension/metrics的查询,用户希望扫描“Cube_V1”和“Cube_V2”来获得完整的结果集,在这样的背景下,引入了“Hybrid Model”来解决这个问题。

Hybrid Model

Hybrid Model是一种新的实现,它是一个或者多个其他实现(Cube)的组合,如下所示。
在这里插入图片描述
Hybrid没有真正的存储空间,它就像是表上的虚拟数据库视图;Hybrid实例充当委托者,将请求转发给它的子实现,然后在他们返回时合并结果。

如何添加Hybrid实例

目前,并没有进行creating/editing Hybrid的UI界面,所以如果需要使用的话,要手动编辑Kylin元数据;
第一步,备份Kylin元数据存储

export KYLIN_HOME="/path/to/kylin"
$KYLIN_HOME/bin/metastore.sh backup

将创建一个备份文件夹,假设它是$KYLIN_HOME/metadata_backup/2015-09-25/

第二步,创建子文件夹“hybrid”

mkdir -p $KYLIN_HOME/metadata_backup/2015-09-25/hybrid

第三步,创建hybrid实例的json文件

vi $KYLIN_HOME/metadata_backup/2015-09-25/hybrid/my_hybrid.json

输入内容如下,“name”和“uuid”需要时唯一的:

{
  "uuid": "9iiu8590-64b6-4367-8fb5-7500eb95fd9c",
  "name": "my_hybrid",
  "realizations": [
    {
           "type": "CUBE",
           "realization": "Cube_V1"
    },
    {
            "type": "CUBE",
            "realization": "Cube_V2"
    }
  ]}

这里的“Cube_V1”和“Cube_V2”是要组合的多维数据集。

第四步,将hybrid实例添加到项目中去
使用文本编辑器打开项目json文件(例如项目“default”):

vi $KYLIN_HOME/metadata_backup/2015-09-25/project/default.json

在“realizations”数组中,添加如下所示的一个entry,类型名为“HYBRID”,“realization”是hybrid实例的名称:

{
      "name": "my_hybrid",
      "type": "HYBRID",
      "realization": "my_hybrid"
  }

第五步,上传元数据

$KYLIN_HOME/bin/metastore.sh restore $KYLIN_HOME/metadata_backup/2015-09-25/

需要注意的是,“restore”操作会将元数据从本地上传到远程hbase存储,这可能会覆盖远程数据,所以,如果在此期间没有从kylin服务器更改元数据(没有building job,没有cube的creation/update等),或者在运行“restore”之前仅将更改的文件提取到空本地文件夹,请执行此操作。

第六步,重新加载元数据
重启kylin服务器,或者单击kylin web UI上“Admin”选项卡上的“Reload metadata”来加载更改;理想情况下,hybrid将会开始工作,可以通过编写一些SQL来进行一些验证。

常见问题:

1.如何选择hybrid来回答SQL查询?
如果其底层多维数据集之一可以回答查询,则可以选择hybrid。
2.如何回答查询的hybrid?
Hybrid会将查询委托给每个子实现,如果子多维数据集能够进行此查询(匹配所有dimensions/metrics),它将结果返回到hybrid,否则将被跳过,最后查询引擎会在返回用户之前聚合来自hybrid的数据;
3.Hybrid检查日期/时间重复吗?
没有,它取决于用户,来确保hybrid中的cube没有日期/时间范围重复;例如:“Cube_V1”将于2015-9-20结束(不包括),“Cube_V2”将于2015-9-20(包括)开始。
4.hybrid是否会限制具有相同数据模型的子容器?
不会,为了提供灵活性,hybrid不会检查子多维数据集的fact/lookup表和连接条件是否相同,但是用户应该了解他们正在做什么来避免意外行为。
5.hybrid可以将另一个hybrid作为子集吗?
不能,暂时没与需要,目前为止,它的所有字集都是cube。
6.可以用hybrid来连接多个cube吗?
不能,hybrid的目的是巩固历史cube和新的cube,类似于union,而不是join。
7.如果禁用子cube,是否会通过hybrid扫描?
不会,hybrid实例将会在向其发送查询之前检查子实现的状态,因此,如果禁用cube,则不会扫描它。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值