http://blog.csdn.net/jiangshouzhuang/article/details/51286150

Hierarchies:

理论上对于N维度,我们可以进行2的N次方的维度组合。然而对于一些维度的组合来说,有时是没有必要的。例如,如果我们有三个维度:continent, country, city,在hierarchies中,最大的维度排在最前面。当使用下钻分析时,我们仅仅需要下面的三个维度的组合:
group by continent
group by continent, country
group by continent, country, city

在这个例子中,维度的组合从2的3次方共8种减少到了3种,这是一个很好的优化,同样适合YEAR,QUATER,MONTH,DATE等场景。

如果我们设置hierarchy作为H1,H2,H3,那么典型的场景应该是:
A. Hierarchies on lookup table
Fact table                                (joins)Lookup Table

column1,column2,,,,,, FK      PK,,H1,H2,H3,,,,

B. Hierarchies on fact table
Fact table
column1,column2,,,H1,H2,H3,,,,,,,

对于scenario A,这是一个特殊的案例,PK在lookup的表上,意外的成为了hierarchies的一部分。例如我们有一个日历的lookup表,cal_dt是PK(primary key):
A*. Hierarchies on lookup table over its primary key
Lookup Table(Calendar)
cal_dt(PK), week_beg_dt, month_beg_dt, quarter_beg_dt,,,

对于A*这种案例,你应该使用“Derived Columns”这种优化方案。

 

Derived Columns:
当一个或多个维度(必须是lookup表的维度,这些字段被称为“Derived”)能够从另一个中减少(通常是相关的FK,被称为“host column”),Derived column就可以被使用。
例如,假如我们有一个lookup的表,我们使用join关联fact表,并且使用“where DimA=DimX”。在Kylin中需要注意,如果你选择FK为一个维度,那么相关的PK将自动可查询的,没有任何额外的开销。这重要的原因是FK和PK总是相同的,Kylin能够首先在FK上使用filters/groupby,并且使用PK透明地替换。这个表明如果我们想用DimA(FK),DimX(PK),DimB,DimC在我们的Cube中,我们能够安全地仅仅选择DimA,DimB,DimC。
Fact table                             (joins)Lookup Table

column1,column2,,,,,,          DimA(FK)DimX(PK),,DimB, DimC

这里的维度DimA(维度代表FK/PK)有一个特殊的映射到DimB。
dimA dimB dimC
1 a ?
2 b ?
3 c ?
4 a ?
在这里案例中,给定一个DimA的值,DimB的值就确定了,因此我们说DimB能够从DimA获得(Derived)。当我们build一个cube包含DimA和DimB,我们能够简单的包含DimA,并且标记DimB作为Derived。Derived column(DimB)不会参与cuboids的生成:
original combinations: --原始维度组合

ABC,AB,AC,BC,A,B,C

combinations when driving B from A: --使用Derived优化后的维度组合

AC,A,C

在运行时,例如“select count(*) from fact_table inner join looup1 group by looup1 .dimB”的案例中,它期待从包含DimB的cuboid中去获取查询结果。然而,DimB因为使用了Derived优化,在cuboids没有结果。在这种情况下,我们修改执行计划,首先按照DimA(its host column)进行group by操作,我们将获取中间的结果,比如:
DimA count(*)
1 1
2 1
3 1
4 1
然后,Kylin将使用DimB的值替换DimA的值(因为他们的值都在lookup表中,Kylin能够加载整个lookup表到内存中并且build一个他们的映射关系),因而中间的结果为:
DimB count(*)
a 1
b 1
c 1
a 1
紧接着,运行SQL的引擎(calcite)将进一步的聚合中间结果为最终结果:
DimB count(*)
a 2
b 1
c 1
这个步骤发生在SQL查询运行期间,也就是“at the cost of extra runtime aggregation”。

【转】Kylin的Hierarchies,Derived维度方面配置优化的更多相关文章

  1. mysql系列十一、mysql优化笔记:表设计、sql优化、配置优化

    可以从这些方面进行优化: 数据库(表)设计合理 SQL语句优化 数据库配置优化 系统层.硬件层优化 数据库设计 关系数据库三范式 1NF:字段不可分; 2NF:有主键,非主键字段依赖主键; 3NF:非 ...

  2. Android零基础入门第13节:Android Studio配置优化,打造开发利器

    原文:Android零基础入门第13节:Android Studio配置优化,打造开发利器 是不是很多同学已经有烦恼出现了?电脑配置已经很高了,但是每次运行Android程序的时候就很卡,而且每次安装 ...

  3. VS2010/2012配置优化记录笔记

    VS2010/2012配置优化记录笔记 在某些情况下VS2010/2012运行真的实在是太卡了,有什么办法可以提高速度吗?下面介绍几个优化策略,感兴趣的朋友可以参考下,希望可以帮助到你   有的时候V ...

  4. PHPSTORM/IntelliJ IDEA 常用 设置配置优化

    PHPSTORM/IntelliJ IDEA 常用 设置配置优化 - meetrice 时间 2014-09-06 10:17:00  博客园-所有随笔区 原文  http://www.cnblogs ...

  5. nginx 配置优化的几个参数

    nginx 配置优化的几个参数 2011-04-22 本文地址: http://blog.phpbean.com/a.cn/7/ --水平有限欢迎指正-- -- 最近在服务器上搞了一些nginx 研究 ...

  6. hadoop配置优化

    yarn-site.xml <property> <name>yarn.nodemanager.resource.memory-mb</name> <valu ...

  7. apache配置优化

    最近参加了很多面试,多多少少有点小感悟,可以说观念转变了不少,特别是对于作为一个开发人员的定位,原来只是认为开发人员就只需要写好代码就行了,所以只需要有数据结构,算法,设计模式,重构方面的知识就行了. ...

  8. mysql配置优化

    [笔记]MySQL 配置优化   安装MySQL后,配置文件my.cnf在 /MySQL安装目录/share/mysql目录中,该目录中还包含多个配置文件可供参考,有my-large.cnf ,my- ...

  9. 在Raspberry配置优化安装LNMP环境总结

    在Raspberry配置优化安装LNMP环境总结 apt-get update apt-get install nginx apt-get install php5-fpm php5-cli php5 ...

随机推荐

  1. linux (RHEL) 添加和删除用户

    linux添加新用户使用 useradd -----create a new user or update default new user information 删除用户使用userdel  -- ...

  2. 数学软件 之 基于MATLAB的DFP算法

    DFP算法是本科数学系中最优化方法的知识,也是无约束最优化方法中非常重要的两个拟Newton算法之一,上一周写了一周的数学软件课程论文,姑且将DFP算法的实现细节贴出来分享给学弟学妹参考吧,由于博客不 ...

  3. HDU 4865 Peter's Hobby(概率、dp、log)

    给出2个影响矩阵,一个是当天天气对湿度的影响,一个是前一天天气对当天天气的影响. 即在晴天(阴天.雨天)发生Dry(Dryish.Damp.Soggy)的概率,以及前一天晴天(阴天.雨天)而今天发生晴 ...

  4. 我刚知道的WAP app中meta的属性(转载)

    之前我一直做的都是WEB前端开发,来北京以后面试了一个移动前端开发,WAP前端开发. 其实在原来公司的时候也做过这方面的开发,可面试的时候面试官问我,要想强制让文档与设备的宽度保持1:1,mate标签 ...

  5. 【linux】学习1

    郁闷啊 好多东西要学 下面大概就是鸟哥那本书的第五章内容吧 linux命令: Ctrl + Alt + F1 ~ F6 : 切换终端 ls  -al  ~ :显示主文件夹下的所有隐藏文件 date: ...

  6. POJ 1830 开关问题 (高斯消元)

    题目链接 题意:中文题,和上篇博客POJ 1222是一类题. 题解:如果有解,解的个数便是2^(自由变元个数),因为每个变元都有两种选择. 代码: #include <iostream> ...

  7. Log4j的使用

    一,Log4j简介 日志的三个目的: 1. 监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作                      2.跟踪代码运行时轨迹,作为日后审计的依 ...

  8. php抽象工厂模式的研究

    上一节理解了工厂模式.其代码原理如下: <?php abstract class ApptEncoder{ abstract function encode(); } class BloggsA ...

  9. supersr--九宫格公式(根据多少行多少列排版)

    - (void)layoutSubviews{ [super layoutSubviews]; NSUInteger count = self.subviews.count; NSInteger ma ...

  10. 【Mongodb】3.X 配置身份验证

    配置身份验证详解: 开启认证: 启动MongoDB./mongodb --syslog --fork --port 20000  --auth 1.如果不添加参数:auth,表明用默认的root的权限 ...