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 08:08:33 UTC

[18/27] 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/master
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,