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/03/12 11:49:00 UTC
[28/48] kylin git commit: KYLIN-2494 ensure model has no dup among
dimensions and measures
KYLIN-2494 ensure model has no dup among dimensions and measures
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/182ed009
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/182ed009
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/182ed009
Branch: refs/heads/master-hbase0.98
Commit: 182ed009400629dee1bd7ad0121224cacfd07668
Parents: 2dfffde
Author: Li Yang <li...@apache.org>
Authored: Thu Mar 9 18:03:26 2017 +0800
Committer: Li Yang <li...@apache.org>
Committed: Thu Mar 9 18:03:26 2017 +0800
----------------------------------------------------------------------
.../apache/kylin/common/KylinConfigBase.java | 4 ----
.../kylin/metadata/model/DataModelDesc.java | 22 +++++++++-----------
.../kylin/metadata/model/DataModelDescTest.java | 11 ++++++++++
.../test_kylin_inner_join_model_desc.json | 1 +
4 files changed, 22 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/kylin/blob/182ed009/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 02b2d4b..ad02fe2 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,10 +329,6 @@ 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/182ed009/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 1c85f09..0a303ec 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
@@ -453,23 +453,21 @@ public class DataModelDesc extends RootPersistentEntity {
}
private boolean validate() {
+
+ // ensure no dup between dimensions/metrics
+ for (ModelDimensionDesc dim : dimensions) {
+ String table = dim.getTable();
+ for (String c : dim.getColumns()) {
+ TblColRef dcol = findColumn(table, c);
+ metrics = ArrayUtils.removeElement(metrics, dcol.getIdentity());
+ }
+ }
+
Set<TblColRef> mcols = new HashSet<>();
for (String m : metrics) {
mcols.add(findColumn(m));
}
- 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()) {
http://git-wip-us.apache.org/repos/asf/kylin/blob/182ed009/core-metadata/src/test/java/org/apache/kylin/metadata/model/DataModelDescTest.java
----------------------------------------------------------------------
diff --git a/core-metadata/src/test/java/org/apache/kylin/metadata/model/DataModelDescTest.java b/core-metadata/src/test/java/org/apache/kylin/metadata/model/DataModelDescTest.java
index 0cfa1f4..b319423 100644
--- a/core-metadata/src/test/java/org/apache/kylin/metadata/model/DataModelDescTest.java
+++ b/core-metadata/src/test/java/org/apache/kylin/metadata/model/DataModelDescTest.java
@@ -19,7 +19,9 @@
package org.apache.kylin.metadata.model;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import org.apache.commons.lang.ArrayUtils;
import org.apache.kylin.common.util.JsonUtil;
import org.apache.kylin.common.util.LocalFileMetadataTestCase;
import org.apache.kylin.metadata.MetadataManager;
@@ -39,6 +41,15 @@ public class DataModelDescTest extends LocalFileMetadataTestCase {
public void after() throws Exception {
this.cleanupTestMetadata();
}
+
+ @Test
+ public void testNoDupColInDimAndMeasure() {
+ DataModelDesc model = MetadataManager.getInstance(getTestConfig()).getDataModelDesc("test_kylin_inner_join_model_desc");
+ String[] metrics = model.getMetrics();
+ TblColRef col = model.findColumn("edw.test_cal_dt.cal_dt");
+ assertTrue(metrics.length == 2);
+ assertTrue(ArrayUtils.contains(metrics, col.getIdentity()) == false);
+ }
@Test
public void testGetCopyOf() throws JsonProcessingException {
http://git-wip-us.apache.org/repos/asf/kylin/blob/182ed009/examples/test_case_data/localmeta/model_desc/test_kylin_inner_join_model_desc.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/model_desc/test_kylin_inner_join_model_desc.json b/examples/test_case_data/localmeta/model_desc/test_kylin_inner_join_model_desc.json
index 49758dd..dbb6df8 100644
--- a/examples/test_case_data/localmeta/model_desc/test_kylin_inner_join_model_desc.json
+++ b/examples/test_case_data/localmeta/model_desc/test_kylin_inner_join_model_desc.json
@@ -105,6 +105,7 @@
}
],
"metrics": [
+ "edw.test_cal_dt.cal_dt",
"PRICE",
"ITEM_COUNT"
],