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 <cheng.w...@kyligence.io> Authored: Fri Jun 30 18:09:18 2017 +0800 Committer: liyang-gmt8 <liy...@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,