KYLIN-1926  Loosen the constraint on FK-PK data type check
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 01910d7..f51dce6 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
@@ -789,4 +789,8 @@
     public void setAppendDictCacheSize(int cacheSize) {
         setProperty("kylin.dict.append.cache.size", String.valueOf(cacheSize));
     }
+
+    public boolean getTableJoinTypeCheck() {
+        return Boolean.valueOf(this.getOptional("kylin.table.join.strong.check", "true"));
+    }
 }
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 21d6d22..7e8a41b 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
@@ -26,6 +26,7 @@
 import java.util.Map;

 

 import org.apache.commons.lang.ArrayUtils;

+import org.apache.kylin.common.KylinConfig;

 import org.apache.kylin.common.persistence.ResourceStore;

 import org.apache.kylin.common.persistence.RootPersistentEntity;

 import org.apache.kylin.common.util.StringUtil;

@@ -36,11 +37,13 @@
 import com.fasterxml.jackson.annotation.JsonProperty;

 import com.google.common.collect.Lists;

 import com.google.common.collect.Sets;

+import org.slf4j.Logger;

+import org.slf4j.LoggerFactory;

 

 @SuppressWarnings("serial")

 @JsonAutoDetect(fieldVisibility = Visibility.NONE, getterVisibility = Visibility.NONE, isGetterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)

 public class DataModelDesc extends RootPersistentEntity {

-

+    private static final Logger logger = LoggerFactory.getLogger(DataModelDesc.class);

     public static enum RealizationCapacity {

         SMALL, MEDIUM, LARGE

     }

@@ -292,7 +295,13 @@
             }

             for (int i = 0; i < fkCols.length; i++) {

                 if (!fkCols[i].getDatatype().equals(pkCols[i].getDatatype())) {

-                    throw new IllegalStateException("Primary key " + lookup.getTable() + "." + pkCols[i].getName() + "." + pkCols[i].getDatatype() + " are not consistent with Foreign key " + this.getFactTable() + "." + fkCols[i].getName() + "." + fkCols[i].getDatatype());

+                    final KylinConfig kylinConfig = KylinConfig.getInstanceFromEnv();

+                    final String msg = "Primary key " + lookup.getTable() + "." + pkCols[i].getName() + "." + pkCols[i].getDatatype() + " are not consistent with Foreign key " + this.getFactTable() + "." + fkCols[i].getName() + "." + fkCols[i].getDatatype();

+                    if (kylinConfig.getTableJoinTypeCheck() == true) {

+                        throw new IllegalStateException(msg);

+                    } else {

+                        logger.warn(msg);

+                    }

                 }

             }