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;
}