1.衍生维度。

在kylin中,如果某些维度都属于同一种类型,且数量较多,可以考虑做成衍生维度。

衍生维度就是将一批维度做成一张维度表,只在源表中保留这张表的外键,这样预处理的时候,就只会处理这个外键,而不会去处理维度表中的维度,降低cuboid的数量。

衍生维度用于在有效维度内将维度表上的非主键维度排除掉,在查询的时候实时进行聚合。

用衍生维度需要注意的一点是:如果从维度表主键到某个维度表维度所需要的聚合工作量非常大,那就不适合做衍生维度,实时进行聚合的时候会等待过长的时间。

2.使用聚合组

聚合组是一种强大的剪枝工具。系统会按照聚合组去预处理cuboid,不在聚合组或跨组的cuboid都不会产生。

每个分组维度集合均是cube所有维度的一个子集。

所有分组贡献的cuboid就是当前cube所有需要物化的cuboid。

由于聚合组内的维度可以重复,因此不同的聚合组会产生相同的cuboid,kylin引擎会保证他们只物化一次。

在聚合组内,你可以对维度进行以下设置:

1.设置成强制维度。这样该聚合组产生的cuboid都要有这个维度。

打个比方,该聚合组里有a,b,c三个维度,将a设置成强制维度,则该聚合组会产生  a,ab,ac,abc 4种cuboid,

而不会产生b , c , bc 这三个cuboid,减少了3个。

2.设置成层级维度。如果一个聚合组的维度中有层级关系,比如省--市--区--街道,就可以设置层级维度。

层级维度不允许子层级出现的时候父层级不出现,比如,你可以 group by 省,市 但是你不能 group by 市, 也不能 group by 省 ,区

举例,该聚合组有 a b c 三个维度 且设置成层级维度 a>b>c. 则该聚合组会产生 a, ab, abc 三个cuboid

不会产生 b,c,bc,ac 这4个cuboid,减少了4个。

3.设置成联合维度,这些维度要么一起出现,要么都不出现。

举例,该聚合组有 a b c 三个维度,且设置 ab为联合维度,则该聚合组会产生 c,ab,abc 三个cuboid

而不会产生 a,b ,ac,bc, 减少了4个。

kylin剪枝优化的两种方式的更多相关文章

  1. CSharpGL(18)分别处理glDrawArrays()和glDrawElements()两种方式下的拾取(ColorCodedPicking)

    CSharpGL(18)分别处理glDrawArrays()和glDrawElements()两种方式下的拾取(ColorCodedPicking) 我在(Modern OpenGL用Shader拾取 ...

  2. Sql Server 聚集索引扫描 Scan Direction的两种方式------FORWARD 和 BACKWARD

    最近发现一个分页查询存储过程中的的一个SQL语句,当聚集索引列的排序方式不同的时候,效率差别达到数十倍,让我感到非常吃惊 由此引发出来分页查询的情况下对大表做Clustered Scan的时候, 不同 ...

  3. verilog描述表决器的两种方式简易分析

    命题:设计一个三变量表决器.真值表如下: 可以写出并简化得出公式:F=AB+BC+AC. 以下是两种算法: 第一种:仅从算法方面描述为:A.B.C的和大于1则输出结果为1,否则为0:源码如下: mod ...

  4. 实现顶部轮播,下部listview经典布局的两种方式

    开头: 在做android开发的时候,我们经常会遇到这样的布局,上面是一个图片轮播图,下面是一些列表的项目.很多新闻app,视频类app都采用这样的布局.起初的时候 由于没有很多参考,我自己想到了一种 ...

  5. 对Java代码加密的两种方式,防止反编译

    使用Virbox Protector对Java项目加密有两种方式,一种是对War包加密,一种是对Jar包加密.Virbox Protector支持这两种文件格式加密,可以加密用于解析class文件的j ...

  6. React组件导入的两种方式(动态导入组件的实现)

    一. react组件两种导入方式 React组件可以通过两种方式导入另一个组件 import(常用) import component from './component' require const ...

  7. sparkStreaming读取kafka的两种方式

    概述 Spark Streaming 支持多种实时输入源数据的读取,其中包括Kafka.flume.socket流等等.除了Kafka以外的实时输入源,由于我们的业务场景没有涉及,在此将不会讨论.本篇 ...

  8. redis持久化的两种方式RDB和AOF

    原文链接:http://www.cnblogs.com/tdws/p/5754706.html Redis的持久化过程中并不需要我们开发人员过多的参与,我们要做的是什么呢?除了深入了解RDB和AOF的 ...

  9. 并发编程 ~~~ 多进程~~~进程创建的两种方式, 进程pid, 验证进程之间的空间隔离, 进程对象join方法, 进程对象其他属性

    一 进程创建的两种方式 from multiprocessing import Process import time def task(name): print(f'{name} is runnin ...

随机推荐

  1. C++ sort()函数使用简介

    Sort函数简介 ​   sort()函数是C++的一个排序函数,可以对传入参数给定的区间的所有元素进行排序,默认是升序,也可以是降序,如果需要其他排序规则需要自行编写compare()函数作为参数. ...

  2. Day17_100_IO_FileWriter文件字符输入流

    FileWriter文件字符输入流 继承结构 Java.lang.Object - java.io.Writer; 抽象类 java.io.OutputStreamWriter; <转换流: 将 ...

  3. NumPy之:标量scalars

    目录 简介 scalar类型的层次结构 内置Scalar类型 boolean Integers Unsigned integers Floating-point numbers Complex flo ...

  4. PowerBI 使用Bookmark

    使用PowerBI Desktop中的bookmark(书签),开发人员可以捕获报表中一个页面的当前配置,包括过滤器的设置,Visual的状态等信息,此后,开发人员可以通过激活已保存的bookmark ...

  5. PAT甲级1100——1155题总结

  6. vue页面之间数据的传递

    vue是由一个个组件组合而成的页面,今天我们就来说一下页面之间数据的传递. 我们经常会在后台管理系统看到用户详情,有添加用户和编辑用户.有时候我们的添加和编辑是在同一页面上以模态框的形式展现的,但有的 ...

  7. nginx添加module之threads

    一.安装nginx yum安装nginx 折叠源码 1 2 3 4 5 6 7 8 9 10 11 12 # 添加nginx源 rpm -ivh http://nginx.org/packages/c ...

  8. hdu1251 hash或者字典树

    题意: 统计难题 Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量 ...

  9. URL中字符的含义

    目录 URL中的特殊字符 #号的作用 URL中的特殊字符 我们经常会看到URL中有一些特殊的字符,比如 #,?,& ,/ ,+ 等.那么,它们的含义是什么呢? 特殊含义 十六进制 + 表示空格 ...

  10. [CTF]凯撒密码

    [CTF]凯撒密码 ---------------------  作者:___Blue_H  来源:CSDN  原文:https://blog.csdn.net/qq_37653144/article ...