You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by su...@apache.org on 2016/06/04 06:41:39 UTC
[4/6] kylin git commit: KYLIN-1728 Introduce dictionary metadata
KYLIN-1728 Introduce dictionary metadata
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/e305bb6b
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/e305bb6b
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/e305bb6b
Branch: refs/heads/KYLIN-1705-B2
Commit: e305bb6b975d51b8ebee0bb63157e6273e0a55f2
Parents: d1a9bab
Author: sunyerui <su...@gmail.com>
Authored: Fri May 27 01:27:01 2016 +0800
Committer: sunyerui <su...@gmail.com>
Committed: Fri Jun 3 18:59:35 2016 +0800
----------------------------------------------------------------------
.../java/org/apache/kylin/cube/CubeSegment.java | 3 +-
.../org/apache/kylin/cube/model/CubeDesc.java | 30 ++++++++++++++++++--
.../cube/model/CubeJoinedFlatTableDesc.java | 19 +++++++++++++
3 files changed, 48 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/kylin/blob/e305bb6b/core-cube/src/main/java/org/apache/kylin/cube/CubeSegment.java
----------------------------------------------------------------------
diff --git a/core-cube/src/main/java/org/apache/kylin/cube/CubeSegment.java b/core-cube/src/main/java/org/apache/kylin/cube/CubeSegment.java
index 047064d..7d78633 100644
--- a/core-cube/src/main/java/org/apache/kylin/cube/CubeSegment.java
+++ b/core-cube/src/main/java/org/apache/kylin/cube/CubeSegment.java
@@ -294,7 +294,8 @@ public class CubeSegment implements Comparable<CubeSegment>, IRealizationSegment
}
public Dictionary<String> getDictionary(TblColRef col) {
- return CubeManager.getInstance(this.getCubeInstance().getConfig()).getDictionary(this, col);
+ TblColRef reuseCol = getCubeDesc().getDictionaryReuseColumn(col);
+ return CubeManager.getInstance(this.getCubeInstance().getConfig()).getDictionary(this, reuseCol);
}
public CubeDimEncMap getDimensionEncodingMap() {
http://git-wip-us.apache.org/repos/asf/kylin/blob/e305bb6b/core-cube/src/main/java/org/apache/kylin/cube/model/CubeDesc.java
----------------------------------------------------------------------
diff --git a/core-cube/src/main/java/org/apache/kylin/cube/model/CubeDesc.java b/core-cube/src/main/java/org/apache/kylin/cube/model/CubeDesc.java
index 9081494..984a7e5 100644
--- a/core-cube/src/main/java/org/apache/kylin/cube/model/CubeDesc.java
+++ b/core-cube/src/main/java/org/apache/kylin/cube/model/CubeDesc.java
@@ -918,6 +918,10 @@ public class CubeDesc extends RootPersistentEntity {
if (dictionaries != null) {
for (DictionaryDesc dictDesc : dictionaries) {
dictDesc.init(this);
+ allColumns.add(dictDesc.getColumnRef());
+ if (dictDesc.getResuseColumnRef() != null) {
+ allColumns.add(dictDesc.getResuseColumnRef());
+ }
}
}
}
@@ -1057,13 +1061,28 @@ public class CubeDesc extends RootPersistentEntity {
// remove columns that reuse other's dictionary
if (dictionaries != null) {
for (DictionaryDesc dictDesc : dictionaries) {
- if (dictDesc.getResuseColumnRef() != null)
+ if (dictDesc.getResuseColumnRef() != null) {
result.remove(dictDesc.getColumnRef());
+ result.add(dictDesc.getResuseColumnRef());
+ }
}
}
return result;
}
+
+ /** A column may reuse dictionary of another column, find the dict column, return same col if there's no reuse column*/
+ public TblColRef getDictionaryReuseColumn(TblColRef col) {
+ if (dictionaries == null) {
+ return col;
+ }
+ for (DictionaryDesc dictDesc : dictionaries) {
+ if (dictDesc.getColumnRef().equals(col) && dictDesc.getResuseColumnRef() != null) {
+ return dictDesc.getResuseColumnRef();
+ }
+ }
+ return col;
+ }
/** Get a column which can be used in distributing the source table */
public TblColRef getDistributedByColumn() {
@@ -1080,8 +1099,13 @@ public class CubeDesc extends RootPersistentEntity {
return null;
for (DictionaryDesc desc : dictionaries) {
- if (col.equals(desc.getColumnRef()) && desc.getBuilderClass() != null)
- return desc.getBuilderClass();
+ if (desc.getBuilderClass() != null) {
+ if (col.equals(desc.getResuseColumnRef())) {
+ return desc.getBuilderClass();
+ } else if (col.equals(desc.getColumnRef())) {
+ return desc.getBuilderClass();
+ }
+ }
}
return null;
}
http://git-wip-us.apache.org/repos/asf/kylin/blob/e305bb6b/core-cube/src/main/java/org/apache/kylin/cube/model/CubeJoinedFlatTableDesc.java
----------------------------------------------------------------------
diff --git a/core-cube/src/main/java/org/apache/kylin/cube/model/CubeJoinedFlatTableDesc.java b/core-cube/src/main/java/org/apache/kylin/cube/model/CubeJoinedFlatTableDesc.java
index db1942b..c5271c5 100644
--- a/core-cube/src/main/java/org/apache/kylin/cube/model/CubeJoinedFlatTableDesc.java
+++ b/core-cube/src/main/java/org/apache/kylin/cube/model/CubeJoinedFlatTableDesc.java
@@ -118,6 +118,25 @@ public class CubeJoinedFlatTableDesc implements IJoinedFlatTableDesc {
}
}
+ if (cubeDesc.getDictionaries() != null) {
+ for (DictionaryDesc dictDesc : cubeDesc.getDictionaries()) {
+ TblColRef c = dictDesc.getColumnRef();
+ if (contains(columnList, c) < 0) {
+ columnIndexMap.put(colName(c.getCanonicalName()), columnIndex);
+ columnList.add(new IntermediateColumnDesc(String.valueOf(columnIndex), c));
+ columnIndex++;
+ }
+ if (dictDesc.getResuseColumnRef() != null) {
+ c = dictDesc.getResuseColumnRef();
+ if (contains(columnList, c) < 0) {
+ columnIndexMap.put(colName(c.getCanonicalName()), columnIndex);
+ columnList.add(new IntermediateColumnDesc(String.valueOf(columnIndex), c));
+ columnIndex++;
+ }
+ }
+ }
+ }
+
columnCount = columnIndex;
}