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 <sunye...@gmail.com> Authored: Fri May 27 01:27:01 2016 +0800 Committer: sunyerui <sunye...@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; }