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维度方面配置优化的更多相关文章
-
mysql系列十一、mysql优化笔记:表设计、sql优化、配置优化
可以从这些方面进行优化: 数据库(表)设计合理 SQL语句优化 数据库配置优化 系统层.硬件层优化 数据库设计 关系数据库三范式 1NF:字段不可分; 2NF:有主键,非主键字段依赖主键; 3NF:非 ...
-
Android零基础入门第13节:Android Studio配置优化,打造开发利器
原文:Android零基础入门第13节:Android Studio配置优化,打造开发利器 是不是很多同学已经有烦恼出现了?电脑配置已经很高了,但是每次运行Android程序的时候就很卡,而且每次安装 ...
-
VS2010/2012配置优化记录笔记
VS2010/2012配置优化记录笔记 在某些情况下VS2010/2012运行真的实在是太卡了,有什么办法可以提高速度吗?下面介绍几个优化策略,感兴趣的朋友可以参考下,希望可以帮助到你 有的时候V ...
-
PHPSTORM/IntelliJ IDEA 常用 设置配置优化
PHPSTORM/IntelliJ IDEA 常用 设置配置优化 - meetrice 时间 2014-09-06 10:17:00 博客园-所有随笔区 原文 http://www.cnblogs ...
-
nginx 配置优化的几个参数
nginx 配置优化的几个参数 2011-04-22 本文地址: http://blog.phpbean.com/a.cn/7/ --水平有限欢迎指正-- -- 最近在服务器上搞了一些nginx 研究 ...
-
hadoop配置优化
yarn-site.xml <property> <name>yarn.nodemanager.resource.memory-mb</name> <valu ...
-
apache配置优化
最近参加了很多面试,多多少少有点小感悟,可以说观念转变了不少,特别是对于作为一个开发人员的定位,原来只是认为开发人员就只需要写好代码就行了,所以只需要有数据结构,算法,设计模式,重构方面的知识就行了. ...
-
mysql配置优化
[笔记]MySQL 配置优化 安装MySQL后,配置文件my.cnf在 /MySQL安装目录/share/mysql目录中,该目录中还包含多个配置文件可供参考,有my-large.cnf ,my- ...
-
在Raspberry配置优化安装LNMP环境总结
在Raspberry配置优化安装LNMP环境总结 apt-get update apt-get install nginx apt-get install php5-fpm php5-cli php5 ...
随机推荐
-
MySQL中的常用工具
一.mysql 客户端连接工具 二.myisampack MyISAM表压缩工具 三.mysqladmin MySQL管理工具 四.mysqlbinlog 日志管理工具 五.mysqlcheck My ...
-
包装BufferedReader的readLine()输出行号
定义一个类,实现与被增强对象相同的接口,或继承这个类,视情况而定 定义一个变量,记住被增强的对象 定义一个构造函数,接收被增强的对象 覆盖要增强的方法 对于不需要增强的方法,调用被增强对象原有的方法 ...
-
java listener实现定时任务
使用java ServletContextListener 实现各种简单定时任务. 1. 创建ServletContextListener,在3.0版本的web.xml中不再需要添加listener的 ...
-
Oracle 中按条件过滤重复记录
在数据处理中,经常会遇到类似这样的情况:数据库中存在多条记录,其中某些字段值相同,其他字段值不同.实际的业务需要针对这样的情况,只保留一条数据,其他数据删除.如何做到呢?在sql中有top关键字相对容 ...
-
try{}catch{}finally{}的手记
try{ System.out.println("执行try"); int = 6 / 0; return 1; }catch(Exception e){ System.out.p ...
-
linux下怎么卸载自带的JDK和安装想要的JDK
linux下怎么卸载自带的JDK和安装想要的JDK 安装linux系统后,系统有自带jdk的版本,因为系统中的有些软件需要使用此环境.但时候我们安装eclipse和tomcat的时候,使用此jdk ...
-
application之OnLowMemory()和 OnTrimMemory(level)讲解
1. OnLowMemory OnLowMemory是Android提供的API,在系统内存不足,所有后台程序(优先级为background的进程,不是指后台运行的进程)都被杀死时,系统会调用OnLo ...
-
jenkins进行andriod打包,上传蒲公英
环境:macos jenkins sdk gradle 1.构建操作注意: mac电脑上 选择invoke gradle task数值是:clean 2.再创建一个task 然后进行gradle加参数 ...
-
VUE 浏览器关闭时清空localStorage
1. 概述 1.1 说明 vue项目中,为了解决页面刷新时vuex数据丢失问题,使用localStorage进行存储对应的vuex数据(判断对应localStorage是否为空,不为空则为vuex中数 ...
-
python字符串、列表和文件对象总结
1.字符串是字符序列.字符串文字可以用单引号或者双引号分隔. 2.可以用内置的序列操作来处理字符串和列表:连接(+).重复(*).索引([]),切片([:])和长度(len()).可以用for循环遍历 ...