You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by li...@apache.org on 2017/02/16 00:52:58 UTC

[10/17] kylin git commit: KYLIN-2423 add toggle on whether allowed dup column in dim and metrics on data model

KYLIN-2423 add toggle on whether allowed dup column in dim and metrics on data model


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/eb472a33
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/eb472a33
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/eb472a33

Branch: refs/heads/master-hbase0.98
Commit: eb472a335856e4e7952edc7e34323f97c6453c5a
Parents: 11617a9
Author: lidongsjtu <li...@apache.org>
Authored: Tue Feb 14 19:50:20 2017 +0800
Committer: lidongsjtu <li...@apache.org>
Committed: Tue Feb 14 19:50:32 2017 +0800

----------------------------------------------------------------------
 .../apache/kylin/common/KylinConfigBase.java    |  4 +++
 .../kylin/metadata/model/DataModelDesc.java     | 32 +++++++++++---------
 2 files changed, 21 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/eb472a33/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
----------------------------------------------------------------------
diff --git a/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java b/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
index c77788b..fafa96d 100644
--- a/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
+++ b/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
@@ -329,6 +329,10 @@ abstract public class KylinConfigBase implements Serializable {
         return Boolean.parseBoolean(getOptional("kylin.cube.allow-appear-in-multiple-projects", "false"));
     }
 
+    public boolean allowModelDimensionMetricsOverlap() {
+        return Boolean.parseBoolean(getOptional("kylin.model.allow-dimension-metrics-overlap", "false"));
+    }
+
     // ============================================================================
     // JOB
     // ============================================================================

http://git-wip-us.apache.org/repos/asf/kylin/blob/eb472a33/core-metadata/src/main/java/org/apache/kylin/metadata/model/DataModelDesc.java
----------------------------------------------------------------------
diff --git a/core-metadata/src/main/java/org/apache/kylin/metadata/model/DataModelDesc.java b/core-metadata/src/main/java/org/apache/kylin/metadata/model/DataModelDesc.java
index 86eea55..6b800bb 100644
--- a/core-metadata/src/main/java/org/apache/kylin/metadata/model/DataModelDesc.java
+++ b/core-metadata/src/main/java/org/apache/kylin/metadata/model/DataModelDesc.java
@@ -216,7 +216,7 @@ public class DataModelDesc extends RootPersistentEntity {
     public void setFilterCondition(String filterCondition) {
         this.filterCondition = filterCondition;
     }
-    
+
     public PartitionDesc getPartitionDesc() {
         return partitionDesc;
     }
@@ -297,7 +297,7 @@ public class DataModelDesc extends RootPersistentEntity {
         initJoinsTree();
         initDimensionsAndMetrics();
         initPartitionDesc();
-        
+
         boolean reinit = validate();
         if (reinit) { // model slightly changed by validate() and must init() again
             init(config, tables);
@@ -456,17 +456,19 @@ public class DataModelDesc extends RootPersistentEntity {
         for (String m : metrics) {
             mcols.add(findColumn(m));
         }
-        
-        // validate no dup between dimensions/metrics
-        for (ModelDimensionDesc dim : dimensions) {
-            String table = dim.getTable();
-            for (String c : dim.getColumns()) {
-                TblColRef dcol = findColumn(table, c);
-                if (mcols.contains(dcol))
-                    throw new IllegalStateException(dcol + " cannot be both dimension and metrics at the same time in " + this);
+
+        if (!KylinConfig.getInstanceFromEnv().allowModelDimensionMetricsOverlap()) {
+            // validate no dup between dimensions/metrics
+            for (ModelDimensionDesc dim : dimensions) {
+                String table = dim.getTable();
+                for (String c : dim.getColumns()) {
+                    TblColRef dcol = findColumn(table, c);
+                    if (mcols.contains(dcol))
+                        throw new IllegalStateException(dcol + " cannot be both dimension and metrics at the same time in " + this);
+                }
             }
         }
-        
+
         // validate PK/FK are in dimensions
         boolean pkfkDimAmended = false;
         for (Chain chain : joinsTree.tableChains.values()) {
@@ -478,9 +480,9 @@ public class DataModelDesc extends RootPersistentEntity {
     private boolean validatePkFkDim(JoinDesc join, Set<TblColRef> mcols) {
         if (join == null)
             return false;
-        
+
         boolean pkfkDimAmended = false;
-        
+
         for (TblColRef c : join.getForeignKeyColumns()) {
             if (!mcols.contains(c)) {
                 pkfkDimAmended = validatePkFkDim(c) || pkfkDimAmended;
@@ -503,7 +505,7 @@ public class DataModelDesc extends RootPersistentEntity {
                 break;
             }
         }
-        
+
         if (dimDesc == null) {
             dimDesc = new ModelDimensionDesc();
             dimDesc.setTable(t);
@@ -515,7 +517,7 @@ public class DataModelDesc extends RootPersistentEntity {
             dimDesc.setColumns(newCols);
             return true;
         }
-        
+
         return false;
     }