From e495aeb2d9e7e72c6f58fa225aee173750bf8f4a Mon Sep 17 00:00:00 2001 From: Zhong Date: Thu, 14 Jul 2016 16:27:01 +0800 Subject: [PATCH] KYLIN-1855: Exclude those joins in whose related lookup tables no dimensions are used in cube --- .../kylin/cube/model/CubeJoinedFlatTableDesc.java | 24 ++++++++++++++-------- .../java/org/apache/kylin/job/JoinedFlatTable.java | 10 +++++---- .../kylin/metadata/model/IJoinedFlatTableDesc.java | 1 + 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/core-cube/src/main/java/org/apache/kylin/cube/model/CubeJoinedFlatTableDesc.java b/core-cube/src/main/java/org/apache/kylin/cube/model/CubeJoinedFlatTableDesc.java index a1d468a..2aaa380 100644 --- a/core-cube/src/main/java/org/apache/kylin/cube/model/CubeJoinedFlatTableDesc.java +++ b/core-cube/src/main/java/org/apache/kylin/cube/model/CubeJoinedFlatTableDesc.java @@ -18,18 +18,12 @@ package org.apache.kylin.cube.model; -import java.util.List; -import java.util.Map; +import java.util.*; import org.apache.kylin.common.util.BytesSplitter; import org.apache.kylin.cube.CubeSegment; import org.apache.kylin.cube.cuboid.Cuboid; -import org.apache.kylin.metadata.model.DataModelDesc; -import org.apache.kylin.metadata.model.FunctionDesc; -import org.apache.kylin.metadata.model.IJoinedFlatTableDesc; -import org.apache.kylin.metadata.model.IntermediateColumnDesc; -import org.apache.kylin.metadata.model.MeasureDesc; -import org.apache.kylin.metadata.model.TblColRef; +import org.apache.kylin.metadata.model.*; import com.google.common.collect.Lists; import com.google.common.collect.Maps; @@ -50,10 +44,13 @@ public class CubeJoinedFlatTableDesc implements IJoinedFlatTableDesc { private Map columnIndexMap; + private List cubeJoins; + public CubeJoinedFlatTableDesc(CubeDesc cubeDesc, CubeSegment cubeSegment) { this.cubeDesc = cubeDesc; this.cubeSegment = cubeSegment; this.columnIndexMap = Maps.newHashMap(); + this.cubeJoins = new ArrayList(cubeDesc.getDimensions().size()); parseCubeDesc(); } @@ -138,6 +135,12 @@ public class CubeJoinedFlatTableDesc implements IJoinedFlatTableDesc { } columnCount = columnIndex; + + for (DimensionDesc d : cubeDesc.getDimensions()) { + if (d.getJoin() != null) { + cubeJoins.add(d.getJoin()); + } + } } private int contains(List columnList, TblColRef c) { @@ -186,6 +189,11 @@ public class CubeJoinedFlatTableDesc implements IJoinedFlatTableDesc { return cubeDesc.getModel(); } + @Override + public List getUsedJoinsSet() { + return cubeJoins; + } + private static String colName(String canonicalColName) { return canonicalColName.replace(".", "_"); } diff --git a/core-job/src/main/java/org/apache/kylin/job/JoinedFlatTable.java b/core-job/src/main/java/org/apache/kylin/job/JoinedFlatTable.java index 31c92b6..347c6a6 100644 --- a/core-job/src/main/java/org/apache/kylin/job/JoinedFlatTable.java +++ b/core-job/src/main/java/org/apache/kylin/job/JoinedFlatTable.java @@ -19,10 +19,7 @@ package org.apache.kylin.job; import java.io.File; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; +import java.util.*; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; @@ -172,6 +169,8 @@ public class JoinedFlatTable { } private static void appendJoinStatement(IJoinedFlatTableDesc intermediateTableDesc, StringBuilder sql, Map tableAliasMap) { + List cubeJoins = intermediateTableDesc.getUsedJoinsSet(); + Set dimTableCache = new HashSet(); DataModelDesc dataModelDesc = intermediateTableDesc.getDataModel(); @@ -181,6 +180,9 @@ public class JoinedFlatTable { for (LookupDesc lookupDesc : dataModelDesc.getLookups()) { JoinDesc join = lookupDesc.getJoin(); + if (!cubeJoins.contains(join)) { + continue; + } if (join != null && join.getType().equals("") == false) { String joinType = join.getType().toUpperCase(); String dimTableName = lookupDesc.getTable(); diff --git a/core-metadata/src/main/java/org/apache/kylin/metadata/model/IJoinedFlatTableDesc.java b/core-metadata/src/main/java/org/apache/kylin/metadata/model/IJoinedFlatTableDesc.java index a9a687f..5088c9c 100644 --- a/core-metadata/src/main/java/org/apache/kylin/metadata/model/IJoinedFlatTableDesc.java +++ b/core-metadata/src/main/java/org/apache/kylin/metadata/model/IJoinedFlatTableDesc.java @@ -30,4 +30,5 @@ public interface IJoinedFlatTableDesc { DataModelDesc getDataModel(); + List getUsedJoinsSet(); } -- 2.5.4 (Apple Git-61)