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 2018/02/04 00:51:16 UTC
[13/50] [abbrv] kylin git commit: minor,
restore OLAPToEnumerableConverter to original
minor, restore OLAPToEnumerableConverter to original
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/a4acb4d5
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/a4acb4d5
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/a4acb4d5
Branch: refs/heads/sync
Commit: a4acb4d53ef74f8e59f46f550143c599c546ff30
Parents: f73219c
Author: Roger Shi <ro...@hotmail.com>
Authored: Wed Jan 3 22:21:28 2018 +0800
Committer: Li Yang <li...@apache.org>
Committed: Fri Jan 26 22:54:58 2018 +0800
----------------------------------------------------------------------
.../apache/calcite/plan/OLAPRelMdRowCount.java | 174 ----------------
.../calcite/plan/OLAPRelMetadataProvider.java | 39 ----
.../org/apache/calcite/plan/RelOptCluster.java | 199 -------------------
.../src/test/resources/query/sql/query110.sql | 58 ++++++
.../relnode/OLAPToEnumerableConverter.java | 2 +-
5 files changed, 59 insertions(+), 413 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/kylin/blob/a4acb4d5/atopcalcite/src/main/java/org/apache/calcite/plan/OLAPRelMdRowCount.java
----------------------------------------------------------------------
diff --git a/atopcalcite/src/main/java/org/apache/calcite/plan/OLAPRelMdRowCount.java b/atopcalcite/src/main/java/org/apache/calcite/plan/OLAPRelMdRowCount.java
deleted file mode 100644
index 751561f..0000000
--- a/atopcalcite/src/main/java/org/apache/calcite/plan/OLAPRelMdRowCount.java
+++ /dev/null
@@ -1,174 +0,0 @@
-package org.apache.calcite.plan;
-
-import org.apache.calcite.adapter.enumerable.EnumerableLimit;
-import org.apache.calcite.plan.volcano.RelSubset;
-import org.apache.calcite.rel.RelNode;
-import org.apache.calcite.rel.SingleRel;
-import org.apache.calcite.rel.core.Aggregate;
-import org.apache.calcite.rel.core.Calc;
-import org.apache.calcite.rel.core.Filter;
-import org.apache.calcite.rel.core.Intersect;
-import org.apache.calcite.rel.core.Join;
-import org.apache.calcite.rel.core.Minus;
-import org.apache.calcite.rel.core.Project;
-import org.apache.calcite.rel.core.SemiJoin;
-import org.apache.calcite.rel.core.Sort;
-import org.apache.calcite.rel.core.TableScan;
-import org.apache.calcite.rel.core.Union;
-import org.apache.calcite.rel.core.Values;
-import org.apache.calcite.rel.metadata.ReflectiveRelMetadataProvider;
-import org.apache.calcite.rel.metadata.RelMdRowCount;
-import org.apache.calcite.rel.metadata.RelMetadataProvider;
-import org.apache.calcite.rel.metadata.RelMetadataQuery;
-import org.apache.calcite.util.BuiltInMethod;
-
-public class OLAPRelMdRowCount extends RelMdRowCount {
- public static final RelMetadataProvider SOURCE = ReflectiveRelMetadataProvider
- .reflectiveSource(BuiltInMethod.ROW_COUNT.method, new OLAPRelMdRowCount());
-
- //avoid case like sql/query60.sql, which will generate plan:
- /*
- EnumerableLimit(fetch=[3])
- OLAPToEnumerableConverter
- OLAPAggregateRel(group=[{0}], SUM_PRICE=[SUM($1)], CNT_1=[COUNT()], TOTAL_ITEMS=[SUM($2)])
- */
- private boolean shouldIntercept(RelNode rel) {
- for (RelNode input : rel.getInputs()) {
- if (input instanceof RelSubset) {
- RelSubset relSubset = (RelSubset) input;
- if (relSubset.getBest() != null
- && relSubset.getBest().getClass().getCanonicalName().endsWith("OLAPToEnumerableConverter")) {
- return true;
- }
- }
- }
- return false;
- }
-
- @Override
- public Double getRowCount(RelNode rel, RelMetadataQuery mq) {
- if (shouldIntercept(rel))
- return 1E10;
- return super.getRowCount(rel, mq);
- }
-
- @Override
- public Double getRowCount(RelSubset subset, RelMetadataQuery mq) {
- if (shouldIntercept(subset))
- return 1E10;
-
- return super.getRowCount(subset, mq);
- }
-
- @Override
- public Double getRowCount(Union rel, RelMetadataQuery mq) {
- if (shouldIntercept(rel))
- return 1E10;
-
- return super.getRowCount(rel, mq);
- }
-
- @Override
- public Double getRowCount(Intersect rel, RelMetadataQuery mq) {
- if (shouldIntercept(rel))
- return 1E10;
-
- return super.getRowCount(rel, mq);
- }
-
- @Override
- public Double getRowCount(Minus rel, RelMetadataQuery mq) {
- if (shouldIntercept(rel))
- return 1E10;
-
- return super.getRowCount(rel, mq);
- }
-
- @Override
- public Double getRowCount(Filter rel, RelMetadataQuery mq) {
- if (shouldIntercept(rel))
- return 1E10;
-
- return super.getRowCount(rel, mq);
- }
-
- @Override
- public Double getRowCount(Calc rel, RelMetadataQuery mq) {
- if (shouldIntercept(rel))
- return 1E10;
-
- return super.getRowCount(rel, mq);
- }
-
- @Override
- public Double getRowCount(Project rel, RelMetadataQuery mq) {
- if (shouldIntercept(rel))
- return 1E10;
-
- return super.getRowCount(rel, mq);
- }
-
- @Override
- public Double getRowCount(Sort rel, RelMetadataQuery mq) {
- if (shouldIntercept(rel))
- return 1E10;
-
- return super.getRowCount(rel, mq);
- }
-
- @Override
- public Double getRowCount(EnumerableLimit rel, RelMetadataQuery mq) {
- if (shouldIntercept(rel))
- return 1E10;
-
- return super.getRowCount(rel, mq);
- }
-
- @Override
- public Double getRowCount(SingleRel rel, RelMetadataQuery mq) {
- if (shouldIntercept(rel))
- return 1E10;
-
- return super.getRowCount(rel, mq);
- }
-
- @Override
- public Double getRowCount(Join rel, RelMetadataQuery mq) {
- if (shouldIntercept(rel))
- return 1E10;
-
- return super.getRowCount(rel, mq);
- }
-
- @Override
- public Double getRowCount(SemiJoin rel, RelMetadataQuery mq) {
- if (shouldIntercept(rel))
- return 1E10;
-
- return super.getRowCount(rel, mq);
- }
-
- @Override
- public Double getRowCount(Aggregate rel, RelMetadataQuery mq) {
- if (shouldIntercept(rel))
- return 1E10;
-
- return super.getRowCount(rel, mq);
- }
-
- @Override
- public Double getRowCount(TableScan rel, RelMetadataQuery mq) {
- if (shouldIntercept(rel))
- return 1E10;
-
- return super.getRowCount(rel, mq);
- }
-
- @Override
- public Double getRowCount(Values rel, RelMetadataQuery mq) {
- if (shouldIntercept(rel))
- return 1E10;
-
- return super.getRowCount(rel, mq);
- }
-}
http://git-wip-us.apache.org/repos/asf/kylin/blob/a4acb4d5/atopcalcite/src/main/java/org/apache/calcite/plan/OLAPRelMetadataProvider.java
----------------------------------------------------------------------
diff --git a/atopcalcite/src/main/java/org/apache/calcite/plan/OLAPRelMetadataProvider.java b/atopcalcite/src/main/java/org/apache/calcite/plan/OLAPRelMetadataProvider.java
deleted file mode 100644
index ad944db..0000000
--- a/atopcalcite/src/main/java/org/apache/calcite/plan/OLAPRelMetadataProvider.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package org.apache.calcite.plan;
-
-import org.apache.calcite.rel.metadata.ChainedRelMetadataProvider;
-import org.apache.calcite.rel.metadata.RelMdAllPredicates;
-import org.apache.calcite.rel.metadata.RelMdCollation;
-import org.apache.calcite.rel.metadata.RelMdColumnOrigins;
-import org.apache.calcite.rel.metadata.RelMdColumnUniqueness;
-import org.apache.calcite.rel.metadata.RelMdDistinctRowCount;
-import org.apache.calcite.rel.metadata.RelMdDistribution;
-import org.apache.calcite.rel.metadata.RelMdExplainVisibility;
-import org.apache.calcite.rel.metadata.RelMdExpressionLineage;
-import org.apache.calcite.rel.metadata.RelMdMaxRowCount;
-import org.apache.calcite.rel.metadata.RelMdMemory;
-import org.apache.calcite.rel.metadata.RelMdMinRowCount;
-import org.apache.calcite.rel.metadata.RelMdNodeTypes;
-import org.apache.calcite.rel.metadata.RelMdParallelism;
-import org.apache.calcite.rel.metadata.RelMdPercentageOriginalRows;
-import org.apache.calcite.rel.metadata.RelMdPopulationSize;
-import org.apache.calcite.rel.metadata.RelMdPredicates;
-import org.apache.calcite.rel.metadata.RelMdSelectivity;
-import org.apache.calcite.rel.metadata.RelMdSize;
-import org.apache.calcite.rel.metadata.RelMdTableReferences;
-import org.apache.calcite.rel.metadata.RelMdUniqueKeys;
-
-import com.google.common.collect.ImmutableList;
-
-public class OLAPRelMetadataProvider extends ChainedRelMetadataProvider {
- public static final OLAPRelMetadataProvider INSTANCE = new OLAPRelMetadataProvider();
-
- public OLAPRelMetadataProvider() {
- super(ImmutableList.of(RelMdPercentageOriginalRows.SOURCE, RelMdColumnOrigins.SOURCE,
- RelMdExpressionLineage.SOURCE, RelMdTableReferences.SOURCE, RelMdNodeTypes.SOURCE,
- OLAPRelMdRowCount.SOURCE, RelMdMaxRowCount.SOURCE, RelMdMinRowCount.SOURCE, RelMdUniqueKeys.SOURCE,
- RelMdColumnUniqueness.SOURCE, RelMdPopulationSize.SOURCE, RelMdSize.SOURCE, RelMdParallelism.SOURCE,
- RelMdDistribution.SOURCE, RelMdMemory.SOURCE, RelMdDistinctRowCount.SOURCE, RelMdSelectivity.SOURCE,
- RelMdExplainVisibility.SOURCE, RelMdPredicates.SOURCE, RelMdAllPredicates.SOURCE,
- RelMdCollation.SOURCE));
- }
-}
http://git-wip-us.apache.org/repos/asf/kylin/blob/a4acb4d5/atopcalcite/src/main/java/org/apache/calcite/plan/RelOptCluster.java
----------------------------------------------------------------------
diff --git a/atopcalcite/src/main/java/org/apache/calcite/plan/RelOptCluster.java b/atopcalcite/src/main/java/org/apache/calcite/plan/RelOptCluster.java
deleted file mode 100644
index 62a3ef5..0000000
--- a/atopcalcite/src/main/java/org/apache/calcite/plan/RelOptCluster.java
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to you under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.calcite.plan;
-
-import org.apache.calcite.rel.RelNode;
-import org.apache.calcite.rel.core.CorrelationId;
-import org.apache.calcite.rel.metadata.DefaultRelMetadataProvider;
-import org.apache.calcite.rel.metadata.MetadataFactory;
-import org.apache.calcite.rel.metadata.MetadataFactoryImpl;
-import org.apache.calcite.rel.metadata.RelMetadataProvider;
-import org.apache.calcite.rel.metadata.RelMetadataQuery;
-import org.apache.calcite.rel.type.RelDataTypeFactory;
-import org.apache.calcite.rex.RexBuilder;
-import org.apache.calcite.rex.RexNode;
-
-import com.google.common.base.Preconditions;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.atomic.AtomicInteger;
-
-/*
- * OVERRIDE POINT:
- * - grep OLAPRelMetadataProvider();
- */
-/**
- * An environment for related relational expressions during the
- * optimization of a query.
- */
-public class RelOptCluster {
- //~ Instance fields --------------------------------------------------------
-
- private final RelDataTypeFactory typeFactory;
- private final RelOptPlanner planner;
- private final AtomicInteger nextCorrel;
- private final Map<String, RelNode> mapCorrelToRel;
- private RexNode originalExpression;
- private final RexBuilder rexBuilder;
- private RelMetadataProvider metadataProvider;
- private MetadataFactory metadataFactory;
- private final RelTraitSet emptyTraitSet;
- private RelMetadataQuery mq;
-
- //~ Constructors -----------------------------------------------------------
-
- /**
- * Creates a cluster.
- */
- @Deprecated // to be removed before 2.0
- RelOptCluster(
- RelOptQuery query,
- RelOptPlanner planner,
- RelDataTypeFactory typeFactory,
- RexBuilder rexBuilder) {
- this(planner, typeFactory, rexBuilder, query.nextCorrel,
- query.mapCorrelToRel);
- }
-
- /**
- * Creates a cluster.
- *
- * <p>For use only from {@link #create} and {@link RelOptQuery}.
- */
- RelOptCluster(RelOptPlanner planner, RelDataTypeFactory typeFactory,
- RexBuilder rexBuilder, AtomicInteger nextCorrel,
- Map<String, RelNode> mapCorrelToRel) {
- this.nextCorrel = nextCorrel;
- this.mapCorrelToRel = mapCorrelToRel;
- this.planner = Preconditions.checkNotNull(planner);
- this.typeFactory = Preconditions.checkNotNull(typeFactory);
- this.rexBuilder = rexBuilder;
- this.originalExpression = rexBuilder.makeLiteral("?");
-
- // set up a default rel metadata provider,
- // giving the planner first crack at everything
- setMetadataProvider(OLAPRelMetadataProvider.INSTANCE);
- this.emptyTraitSet = planner.emptyTraitSet();
- assert emptyTraitSet.size() == planner.getRelTraitDefs().size();
- }
-
- /** Creates a cluster. */
- public static RelOptCluster create(RelOptPlanner planner,
- RexBuilder rexBuilder) {
- return new RelOptCluster(planner, rexBuilder.getTypeFactory(),
- rexBuilder, new AtomicInteger(0), new HashMap<String, RelNode>());
- }
-
- //~ Methods ----------------------------------------------------------------
-
- @Deprecated // to be removed before 2.0
- public RelOptQuery getQuery() {
- return new RelOptQuery(planner, nextCorrel, mapCorrelToRel);
- }
-
- @Deprecated // to be removed before 2.0
- public RexNode getOriginalExpression() {
- return originalExpression;
- }
-
- @Deprecated // to be removed before 2.0
- public void setOriginalExpression(RexNode originalExpression) {
- this.originalExpression = originalExpression;
- }
-
- public RelOptPlanner getPlanner() {
- return planner;
- }
-
- public RelDataTypeFactory getTypeFactory() {
- return typeFactory;
- }
-
- public RexBuilder getRexBuilder() {
- return rexBuilder;
- }
-
- public RelMetadataProvider getMetadataProvider() {
- return metadataProvider;
- }
-
- /**
- * Overrides the default metadata provider for this cluster.
- *
- * @param metadataProvider custom provider
- */
- public void setMetadataProvider(RelMetadataProvider metadataProvider) {
- this.metadataProvider = metadataProvider;
- this.metadataFactory = new MetadataFactoryImpl(metadataProvider);
- }
-
- public MetadataFactory getMetadataFactory() {
- return metadataFactory;
- }
-
- /** Returns the current RelMetadataQuery.
- *
- * <p>This method might be changed or moved in future.
- * If you have a {@link RelOptRuleCall} available,
- * for example if you are in a {@link RelOptRule#onMatch(RelOptRuleCall)}
- * method, then use {@link RelOptRuleCall#getMetadataQuery()} instead. */
- public RelMetadataQuery getMetadataQuery() {
- if (mq == null) {
- mq = RelMetadataQuery.instance();
- }
- return mq;
- }
-
- /**
- * Should be called whenever the current {@link RelMetadataQuery} becomes
- * invalid. Typically invoked from {@link RelOptRuleCall#transformTo}.
- */
- public void invalidateMetadataQuery() {
- mq = null;
- }
-
- /**
- * Constructs a new id for a correlating variable. It is unique within the
- * whole query.
- */
- public CorrelationId createCorrel() {
- return new CorrelationId(nextCorrel.getAndIncrement());
- }
-
- /** Returns the default trait set for this cluster. */
- public RelTraitSet traitSet() {
- return emptyTraitSet;
- }
-
- /** @deprecated For {@code traitSetOf(t1, t2)},
- * use {@link #traitSet}().replace(t1).replace(t2). */
- @Deprecated // to be removed before 2.0
- public RelTraitSet traitSetOf(RelTrait... traits) {
- RelTraitSet traitSet = emptyTraitSet;
- for (RelTrait trait : traits) {
- traitSet = traitSet.replace(trait);
- }
- return traitSet;
- }
-
- public RelTraitSet traitSetOf(RelTrait trait) {
- return emptyTraitSet.replace(trait);
- }
-}
-
-// End RelOptCluster.java
http://git-wip-us.apache.org/repos/asf/kylin/blob/a4acb4d5/kylin-it/src/test/resources/query/sql/query110.sql
----------------------------------------------------------------------
diff --git a/kylin-it/src/test/resources/query/sql/query110.sql b/kylin-it/src/test/resources/query/sql/query110.sql
new file mode 100644
index 0000000..07cd3b2
--- /dev/null
+++ b/kylin-it/src/test/resources/query/sql/query110.sql
@@ -0,0 +1,58 @@
+--
+-- Licensed to the Apache Software Foundation (ASF) under one
+-- or more contributor license agreements. See the NOTICE file
+-- distributed with this work for additional information
+-- regarding copyright ownership. The ASF licenses this file
+-- to you under the Apache License, Version 2.0 (the
+-- "License"); you may not use this file except in compliance
+-- with the License. You may obtain a copy of the License at
+--
+-- http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+--
+SELECT TEST_KYLIN_FACT.CAL_DT as TEST_KYLIN_FACT_CAL_DT,
+ TEST_KYLIN_FACT.ORDER_ID as TEST_KYLIN_FACT_ORDER_ID,
+ TEST_ORDER.TEST_DATE_ENC as TEST_ORDER_TEST_DATE_ENC,
+ TEST_ORDER.TEST_TIME_ENC as TEST_ORDER_TEST_TIME_ENC,
+ TEST_KYLIN_FACT.LEAF_CATEG_ID as TEST_KYLIN_FACT_LEAF_CATEG_ID,
+ TEST_KYLIN_FACT.LSTG_SITE_ID as TEST_KYLIN_FACT_LSTG_SITE_ID,
+ TEST_CATEGORY_GROUPINGS.META_CATEG_NAME as TEST_CATEGORY_GROUPINGS_META_CATEG_NAME,
+ TEST_CATEGORY_GROUPINGS.CATEG_LVL2_NAME as TEST_CATEGORY_GROUPINGS_CATEG_LVL2_NAME,
+ TEST_CATEGORY_GROUPINGS.CATEG_LVL3_NAME as TEST_CATEGORY_GROUPINGS_CATEG_LVL3_NAME,
+ TEST_KYLIN_FACT.LSTG_FORMAT_NAME as TEST_KYLIN_FACT_LSTG_FORMAT_NAME,
+ TEST_KYLIN_FACT.SLR_SEGMENT_CD as TEST_KYLIN_FACT_SLR_SEGMENT_CD,
+ TEST_KYLIN_FACT.SELLER_ID as TEST_KYLIN_FACT_SELLER_ID,
+ SELLER_ACCOUNT.ACCOUNT_BUYER_LEVEL as SELLER_ACCOUNT_ACCOUNT_BUYER_LEVEL,
+ SELLER_ACCOUNT.ACCOUNT_SELLER_LEVEL as SELLER_ACCOUNT_ACCOUNT_SELLER_LEVEL,
+ SELLER_ACCOUNT.ACCOUNT_COUNTRY as SELLER_ACCOUNT_ACCOUNT_COUNTRY,
+ SELLER_COUNTRY.NAME as SELLER_COUNTRY_NAME,
+ TEST_ORDER.BUYER_ID as TEST_ORDER_BUYER_ID,
+ BUYER_ACCOUNT.ACCOUNT_BUYER_LEVEL as BUYER_ACCOUNT_ACCOUNT_BUYER_LEVEL,
+ BUYER_ACCOUNT.ACCOUNT_SELLER_LEVEL as BUYER_ACCOUNT_ACCOUNT_SELLER_LEVEL,
+ BUYER_ACCOUNT.ACCOUNT_COUNTRY as BUYER_ACCOUNT_ACCOUNT_COUNTRY,
+ year(TEST_KYLIN_FACT.CAL_DT) as TEST_KYLIN_FACT_DEAL_YEAR
+ FROM "DEFAULT".TEST_KYLIN_FACT as TEST_KYLIN_FACT
+ LEFT JOIN "DEFAULT".TEST_ORDER as TEST_ORDER
+ ON TEST_KYLIN_FACT.ORDER_ID = TEST_ORDER.ORDER_ID
+ LEFT JOIN EDW.TEST_CAL_DT as TEST_CAL_DT
+ ON TEST_KYLIN_FACT.CAL_DT = TEST_CAL_DT.CAL_DT
+ LEFT JOIN "DEFAULT".TEST_CATEGORY_GROUPINGS as TEST_CATEGORY_GROUPINGS
+ ON TEST_KYLIN_FACT.LEAF_CATEG_ID = TEST_CATEGORY_GROUPINGS.LEAF_CATEG_ID AND TEST_KYLIN_FACT.LSTG_SITE_ID = TEST_CATEGORY_GROUPINGS.SITE_ID
+ LEFT JOIN EDW.TEST_SITES as TEST_SITES
+ ON TEST_KYLIN_FACT.LSTG_SITE_ID = TEST_SITES.SITE_ID
+ LEFT JOIN EDW.TEST_SELLER_TYPE_DIM as TEST_SELLER_TYPE_DIM
+ ON TEST_KYLIN_FACT.SLR_SEGMENT_CD = TEST_SELLER_TYPE_DIM.SELLER_TYPE_CD
+ LEFT JOIN "DEFAULT".TEST_ACCOUNT as SELLER_ACCOUNT
+ ON TEST_KYLIN_FACT.SELLER_ID = SELLER_ACCOUNT.ACCOUNT_ID
+ LEFT JOIN "DEFAULT".TEST_ACCOUNT as BUYER_ACCOUNT
+ ON TEST_ORDER.BUYER_ID = BUYER_ACCOUNT.ACCOUNT_ID
+ LEFT JOIN "DEFAULT".TEST_COUNTRY as SELLER_COUNTRY
+ ON SELLER_ACCOUNT.ACCOUNT_COUNTRY = SELLER_COUNTRY.COUNTRY
+ LEFT JOIN "DEFAULT".TEST_COUNTRY as BUYER_COUNTRY
+ ON BUYER_ACCOUNT.ACCOUNT_COUNTRY = BUYER_COUNTRY.COUNTRY
+ WHERE 1=1
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/kylin/blob/a4acb4d5/query/src/main/java/org/apache/kylin/query/relnode/OLAPToEnumerableConverter.java
----------------------------------------------------------------------
diff --git a/query/src/main/java/org/apache/kylin/query/relnode/OLAPToEnumerableConverter.java b/query/src/main/java/org/apache/kylin/query/relnode/OLAPToEnumerableConverter.java
index 697827f..89c9041 100644
--- a/query/src/main/java/org/apache/kylin/query/relnode/OLAPToEnumerableConverter.java
+++ b/query/src/main/java/org/apache/kylin/query/relnode/OLAPToEnumerableConverter.java
@@ -58,7 +58,7 @@ public class OLAPToEnumerableConverter extends ConverterImpl implements Enumerab
@Override
public RelOptCost computeSelfCost(RelOptPlanner planner, RelMetadataQuery mq) {
// huge cost to ensure OLAPToEnumerableConverter only appears once in rel tree
- return planner.getCostFactory().makeCost(1E10, 0, 0);
+ return planner.getCostFactory().makeCost(1E100, 0, 0);
}
@Override