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