From 71e0238f25f21628f2214a1c1e9a46930846370f Mon Sep 17 00:00:00 2001 From: "Ma,Gang" Date: Wed, 25 Oct 2017 13:11:47 +0800 Subject: [PATCH] KYLIN-2965 RealizationChooser cost calculation logic different with CubeInstance --- .../java/org/apache/kylin/query/routing/RealizationChooser.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/query/src/main/java/org/apache/kylin/query/routing/RealizationChooser.java b/query/src/main/java/org/apache/kylin/query/routing/RealizationChooser.java index 4b52de6..29ccce7 100644 --- a/query/src/main/java/org/apache/kylin/query/routing/RealizationChooser.java +++ b/query/src/main/java/org/apache/kylin/query/routing/RealizationChooser.java @@ -36,6 +36,7 @@ import org.apache.kylin.metadata.model.TableRef; import org.apache.kylin.metadata.model.TblColRef; import org.apache.kylin.metadata.project.ProjectManager; import org.apache.kylin.metadata.realization.IRealization; +import org.apache.kylin.metadata.realization.RealizationType; import org.apache.kylin.query.relnode.OLAPContext; import org.apache.kylin.query.relnode.OLAPTableScan; import org.apache.kylin.query.routing.rules.RemoveBlackoutRealizationsRule; @@ -248,7 +249,13 @@ public class RealizationChooser { this.priority = Candidate.PRIORITIES.get(real.getType()); // ref CubeInstance.getCost() - int c = real.getAllDimensions().size() * CubeInstance.COST_WEIGHT_DIMENSION + int countedDimensionNum; + if (RealizationType.CUBE == real.getType()) { + countedDimensionNum = ((CubeInstance) real).getRowKeyColumnCount(); + } else { + countedDimensionNum = real.getAllDimensions().size(); + } + int c = countedDimensionNum * CubeInstance.COST_WEIGHT_DIMENSION + real.getMeasures().size() * CubeInstance.COST_WEIGHT_MEASURE; for (JoinTableDesc join : real.getModel().getJoinTables()) { if (join.getJoin().isInnerJoin()) -- 2.6.4