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/07/03 07:44:29 UTC
[18/26] kylin git commit: minor,
validate join key should be a dimension
minor, validate join key should be a dimension
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/6228f886
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/6228f886
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/6228f886
Branch: refs/heads/kylin-2.1.x
Commit: 6228f886ecf697a41fd658b6eb46dde149cd0e2a
Parents: cf1ba95
Author: Cheng Wang <ch...@kyligence.io>
Authored: Fri Jun 30 18:09:18 2017 +0800
Committer: liyang-gmt8 <li...@apache.org>
Committed: Fri Jun 30 18:20:45 2017 +0800
----------------------------------------------------------------------
.../kylin/metadata/model/DataModelDesc.java | 31 ++++++++++++++++++++
.../localmeta/model_desc/ssb.json | 20 ++++++-------
2 files changed, 41 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/kylin/blob/6228f886/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 bc35e2a..abee71b 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
@@ -617,7 +617,38 @@ public class DataModelDesc extends RootPersistentEntity {
+ fkCols[i].getDatatype());
}
}
+
+ if (!isSpecialTestModel()) {
+ for (TblColRef t : fkCols) {
+ if (!isJoinKeyDimension(t.getIdentity())) {
+ throw new IllegalStateException(
+ "Foreigner key: " + t.getIdentity() + " should be a dimension.");
+ }
+ }
+
+ for (TblColRef t : pkCols) {
+ if (!isJoinKeyDimension(t.getIdentity())) {
+ throw new IllegalStateException("Primary key: " + t.getIdentity() + " should be a dimension.");
+ }
+ }
+ }
+ }
+ }
+
+ private boolean isJoinKeyDimension(String key) {
+ for (ModelDimensionDesc d : dimensions) {
+ for (String col : d.getColumns()) {
+ if (key.equals(d.getTable() + '.' + col))
+ return true;
+ }
}
+ return false;
+ }
+
+ private boolean isSpecialTestModel() {
+ if (config.isDevEnv() && (name.startsWith("test_kylin_") || name.startsWith("test_streaming")))
+ return true;
+ return false;
}
private void initJoinsTree() {
http://git-wip-us.apache.org/repos/asf/kylin/blob/6228f886/examples/test_case_data/localmeta/model_desc/ssb.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/model_desc/ssb.json b/examples/test_case_data/localmeta/model_desc/ssb.json
index 52b330f..bbac99d 100644
--- a/examples/test_case_data/localmeta/model_desc/ssb.json
+++ b/examples/test_case_data/localmeta/model_desc/ssb.json
@@ -33,20 +33,20 @@
}
} ],
"dimensions" : [ {
- "table" : "SSB.V_LINEORDER",
- "columns" : [ "LO_DATE" ]
+ "table" : "V_LINEORDER",
+ "columns" : [ "LO_DATE", "LO_PARTKEY", "LO_CUSTKEY", "LO_ORDERDATE", "LO_SUPPKEY" ]
}, {
- "table" : "SSB.PART",
- "columns" : [ "P_MFGR", "P_CATEGORY", "P_BRAND" ]
+ "table" : "PART",
+ "columns" : [ "P_MFGR", "P_CATEGORY", "P_BRAND", "P_PARTKEY" ]
}, {
- "table" : "SSB.CUSTOMER",
- "columns" : [ "C_CITY", "C_NATION", "C_REGION" ]
+ "table" : "CUSTOMER",
+ "columns" : [ "C_CITY", "C_NATION", "C_REGION", "C_CUSTKEY" ]
}, {
- "table" : "SSB.SUPPLIER",
- "columns" : [ "S_CITY", "S_NATION", "S_REGION" ]
+ "table" : "SUPPLIER",
+ "columns" : [ "S_CITY", "S_NATION", "S_REGION", "S_SUPPKEY" ]
}, {
- "table" : "SSB.DATES",
- "columns" : [ "D_YEAR", "D_YEARMONTHNUM", "D_YEARMONTH", "D_WEEKNUMINYEAR" ]
+ "table" : "DATES",
+ "columns" : [ "D_YEAR", "D_YEARMONTHNUM", "D_YEARMONTH", "D_WEEKNUMINYEAR", "D_DATEKEY" ]
} ],
"metrics" : [ "LO_REVENUE", "LO_SUPPLYCOST", "V_REVENUE" ],
"last_modified" : 1457444314662,