维度优化
层级维度
根据kylin的理念,当你在创建cube时选择了N个维度,那么最终的会有2的N次方个维度组合,但在某些情况下,我们可以精简一些不必要的维度组合。例如,如果我们有大洲,国家和城市维度(在层级维度中,范围更大的维度值一般排在第一位)。当我们需要建立cube对数据进行分析时,我们仅需要如下的三种维度组合:
- 大洲
- 大洲和国家
- 大洲,国家和城市
这样我们将维度组合从8个降到了3个,并且不会影响到最初的需求实现。
如果我们假定H1,H2,H3作为层级维度,那么层级维度有如下的典型使用场景:
- 层级维度出现在查询表中
Fact Table | Joins | Lookup Table |
---|---|---|
column1,column2,...FK | PK,H1,H2,H3... |
- 层级维度出现在事实表中
Fact table |
---|
column1,column2,..H1,H2,H3... |
对于场景1存在一种特殊情况,就是主键字段是层级维度的一部分。
派生维度
派生维度只能出现在查询表中,这些维度可以通过其他一个或多个维度(这些维度一般对应的是外键)推导得出。
例如,我们通过条件“where DimA=DimX”来实现一张事实表去连接一个查询表。需要注意的是,在Kylin中,如果选择了FK作为维度,那么相应的PK将会被自动查询,而不需任何额外的开销。这是因为FK和PK始终保持一致。这意味着如果我们需要在Cube中使用维度组合DimA(FK),DimX(PK),DimB,DimC,那么我们可以直接使用DimA,DimB,DimC。
Fact Table | Joins | Lookup Table |
---|---|---|
column1,column2,...DimA(FK) | DimX(PK),DimB,DimC |
我们假设DimA与DimB有如下的映射关系:
dimA | dimB | dimC |
---|---|---|
1 | a | ? |
2 | b | ? |
3 | c | ? |
4 | a | ? |
在这种情况下,如果DimA的值以及确定,那么DimB的值也是确定的,DimB就被称为DimA的派生维度。当我们需要构建一个同时包含DimA和DimB的Cube时,我们仅需要包含DimA,而把DimB设置成派生维度,而派生维度不会参与cuboids的产生。
- 如果不设置派生列,需要的维度组合
ABC,AB,AC,BC,A,B,C - 设置B是A的派生维度后,需要的维度组合
AC,A,C
参数优化
- 处理超高基列(Ultra-High-Cardinality Columns)
- kylin.engine.mr.build-uhc-dict-in-additional-step:默认值是FALSE,改成TRUE
- kylin.engine.mr.uhc-reducer-count:默认值是1,可以调高到5,这样每个超高基列会有5个reducer来处理。
Kylin高级设置-英文
Kylin高级设置-中文
网友评论