This is an automated email from the ASF dual-hosted git repository. xxyu pushed a commit to branch kylin5_beta in repository https://gitbox.apache.org/repos/asf/kylin.git
commit f7f8affee6785a894a223a26785f83872e24a4e3 Author: Pengfei Zhan <dethr...@gmail.com> AuthorDate: Fri Mar 31 18:05:02 2023 +0800 KYLIN-5632 Rename, move package or drop some useless class --- .../kylin/metadata/cube/model/NDataflow.java | 4 +- .../org/apache/kylin/metadata/model/Segments.java | 15 ++--- .../kylin/metadata/project/NProjectLoader.java | 25 +++---- .../metadata/realization/CapabilityResult.java | 53 +++++---------- .../{cube => }/realization/HybridRealization.java | 10 +-- .../kylin/metadata/realization/IRealization.java | 2 +- .../metadata/realization/IRealizationFilter.java | 24 ------- .../apache/kylin/query/relnode/OLAPContext.java | 2 +- .../routing/{rules => }/PartitionPruningRule.java | 4 +- .../apache/kylin/query/routing/QueryRouter.java | 6 +- .../kylin/query/routing/RealizationChooser.java | 13 +--- ...e.java => RemoveIncapableRealizationsRule.java} | 6 +- .../routing/{rules => }/SegmentPruningRule.java | 4 +- .../query/routing/rules/RealizationSortRule.java | 46 ------------- .../rules/RemoveBlackoutRealizationsRule.java | 78 ---------------------- .../kylin/query/util/ICutContextStrategy.java | 2 +- ...trategy.java => ContextInitialCutStrategy.java} | 2 +- ...textStrategy.java => ContextReCutStrategy.java} | 2 +- .../kylin/query/util/QueryContextCutter.java | 6 +- .../kylin/engine/spark/job/SegmentBuildJob.java | 10 +-- .../kylin/query/runtime/plan/TableScanPlan.scala | 12 ++-- 21 files changed, 64 insertions(+), 262 deletions(-) diff --git a/src/core-metadata/src/main/java/org/apache/kylin/metadata/cube/model/NDataflow.java b/src/core-metadata/src/main/java/org/apache/kylin/metadata/cube/model/NDataflow.java index 96ab966b08..39c5048f1e 100644 --- a/src/core-metadata/src/main/java/org/apache/kylin/metadata/cube/model/NDataflow.java +++ b/src/core-metadata/src/main/java/org/apache/kylin/metadata/cube/model/NDataflow.java @@ -301,7 +301,7 @@ public class NDataflow extends RootPersistentEntity implements Serializable, IRe } @Override - public boolean isReady() { + public boolean isOnline() { return getStatus() == RealizationStatusEnum.ONLINE; } @@ -579,7 +579,7 @@ public class NDataflow extends RootPersistentEntity implements Serializable, IRe } public boolean hasReadySegments() { - return isReady() && CollectionUtils.isNotEmpty(getQueryableSegments()); + return isOnline() && CollectionUtils.isNotEmpty(getQueryableSegments()); } public void initAllSegLayoutInfo() { diff --git a/src/core-metadata/src/main/java/org/apache/kylin/metadata/model/Segments.java b/src/core-metadata/src/main/java/org/apache/kylin/metadata/model/Segments.java index 7de194cca8..13e1b1bac2 100644 --- a/src/core-metadata/src/main/java/org/apache/kylin/metadata/model/Segments.java +++ b/src/core-metadata/src/main/java/org/apache/kylin/metadata/model/Segments.java @@ -32,13 +32,12 @@ import java.util.stream.Collectors; import org.apache.kylin.common.KylinConfig; import org.apache.kylin.common.util.ClassUtil; import org.apache.kylin.common.util.Pair; -import org.apache.kylin.metadata.cube.model.NDataSegment; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import org.apache.kylin.guava30.shaded.common.annotations.VisibleForTesting; import org.apache.kylin.guava30.shaded.common.base.Preconditions; import org.apache.kylin.guava30.shaded.common.collect.Lists; +import org.apache.kylin.metadata.cube.model.NDataSegment; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import lombok.val; import lombok.var; @@ -246,11 +245,9 @@ public class Segments<T extends ISegment> extends ArrayList<T> implements Serial public Segments<T> getBuildingSegments() { Segments<T> buildingSegments = new Segments(); - if (null != this) { - for (T segment : this) { - if (SegmentStatusEnum.NEW == segment.getStatus()) { - buildingSegments.add(segment); - } + for (T segment : this) { + if (SegmentStatusEnum.NEW == segment.getStatus()) { + buildingSegments.add(segment); } } return buildingSegments; diff --git a/src/core-metadata/src/main/java/org/apache/kylin/metadata/project/NProjectLoader.java b/src/core-metadata/src/main/java/org/apache/kylin/metadata/project/NProjectLoader.java index 430fd12f64..4f5572e70a 100644 --- a/src/core-metadata/src/main/java/org/apache/kylin/metadata/project/NProjectLoader.java +++ b/src/core-metadata/src/main/java/org/apache/kylin/metadata/project/NProjectLoader.java @@ -29,27 +29,24 @@ import javax.annotation.Nullable; import org.apache.commons.lang3.StringUtils; import org.apache.kylin.common.KylinConfig; +import org.apache.kylin.guava30.shaded.common.base.Preconditions; +import org.apache.kylin.guava30.shaded.common.collect.Lists; +import org.apache.kylin.metadata.cube.model.NDataflow; +import org.apache.kylin.metadata.cube.model.NDataflowManager; import org.apache.kylin.metadata.model.ColumnDesc; import org.apache.kylin.metadata.model.FunctionDesc; +import org.apache.kylin.metadata.model.FusionModel; +import org.apache.kylin.metadata.model.FusionModelManager; import org.apache.kylin.metadata.model.MeasureDesc; +import org.apache.kylin.metadata.model.NDataModel; +import org.apache.kylin.metadata.model.NDataModelManager; +import org.apache.kylin.metadata.model.NTableMetadataManager; import org.apache.kylin.metadata.model.TableDesc; import org.apache.kylin.metadata.model.TableRef; import org.apache.kylin.metadata.model.TblColRef; +import org.apache.kylin.metadata.realization.HybridRealization; import org.apache.kylin.metadata.realization.IRealization; import org.apache.kylin.metadata.realization.NRealizationRegistry; -import org.apache.kylin.metadata.cube.model.NDataflow; -import org.apache.kylin.metadata.cube.model.NDataflowManager; -import org.apache.kylin.metadata.cube.realization.HybridRealization; -import org.apache.kylin.metadata.model.FusionModel; -import org.apache.kylin.metadata.model.FusionModelManager; -import org.apache.kylin.metadata.model.NDataModel; -import org.apache.kylin.metadata.model.NDataModelManager; -import org.apache.kylin.metadata.model.NTableMetadataManager; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import org.apache.kylin.guava30.shaded.common.base.Preconditions; -import org.apache.kylin.guava30.shaded.common.collect.Lists; import lombok.val; import lombok.extern.slf4j.Slf4j; @@ -106,7 +103,7 @@ public class NProjectLoader { List<IRealization> existingRealizations = realizations.stream().filter(r -> modelIds.contains(r.getUuid())) .collect(Collectors.toList()); for (IRealization r : existingRealizations) { - if (!r.isReady()) + if (!r.isOnline()) continue; NDataModel model = r.getModel(); for (MeasureDesc m : r.getMeasures()) { diff --git a/src/core-metadata/src/main/java/org/apache/kylin/metadata/realization/CapabilityResult.java b/src/core-metadata/src/main/java/org/apache/kylin/metadata/realization/CapabilityResult.java index 1ed974ef5e..95ba127c50 100644 --- a/src/core-metadata/src/main/java/org/apache/kylin/metadata/realization/CapabilityResult.java +++ b/src/core-metadata/src/main/java/org/apache/kylin/metadata/realization/CapabilityResult.java @@ -21,12 +21,11 @@ package org.apache.kylin.metadata.realization; import java.util.Collection; import java.util.List; +import org.apache.kylin.guava30.shaded.common.collect.Lists; import org.apache.kylin.metadata.model.FunctionDesc; import org.apache.kylin.metadata.model.MeasureDesc; import org.apache.kylin.metadata.model.TblColRef; -import org.apache.kylin.guava30.shaded.common.collect.Lists; - import lombok.Getter; import lombok.Setter; @@ -35,7 +34,9 @@ public class CapabilityResult { /** * Is capable or not */ - public boolean capable = false; + @Getter + @Setter + private boolean capable = false; /** * selected capable candidate, like Lookup or layout @@ -68,7 +69,7 @@ public class CapabilityResult { */ public List<CapabilityInfluence> influences = Lists.newArrayListWithCapacity(1); - public static interface CapabilityInfluence { + public interface CapabilityInfluence { /** * Suggest a multiplier to influence query cost */ @@ -100,11 +101,20 @@ public class CapabilityResult { } } - public static enum IncapableType { - UNMATCHED_DIMENSION, UNMATCHED_AGGREGATION, UNSUPPORT_MASSIN, UNSUPPORT_RAWQUERY, LIMIT_PRECEDE_AGGR, II_UNMATCHED_FACT_TABLE, TABLE_INDEX_MISSING_COLS, NOT_EXIST_SNAPSHOT + public enum IncapableType { + UNMATCHED_DIMENSION, + + LIMIT_PRECEDE_AGGR, + + TABLE_INDEX_MISSING_COLS, + + NOT_EXIST_SNAPSHOT } + @Getter + @Setter public static class IncapableCause { + private IncapableType incapableType; private Collection<TblColRef> unmatchedDimensions; private Collection<FunctionDesc> unmatchedAggregations; @@ -116,41 +126,10 @@ public class CapabilityResult { return incapableCause; } - public static IncapableCause unmatchedAggregations(Collection<FunctionDesc> unmatchedAggregations) { - IncapableCause incapableCause = new IncapableCause(); - incapableCause.setIncapableType(IncapableType.UNMATCHED_AGGREGATION); - incapableCause.setUnmatchedAggregations(unmatchedAggregations); - return incapableCause; - } - public static IncapableCause create(IncapableType incapableType) { IncapableCause incapableCause = new IncapableCause(); incapableCause.setIncapableType(incapableType); return incapableCause; } - - public IncapableType getIncapableType() { - return incapableType; - } - - public void setIncapableType(IncapableType incapableType) { - this.incapableType = incapableType; - } - - public Collection<TblColRef> getUnmatchedDimensions() { - return unmatchedDimensions; - } - - public void setUnmatchedDimensions(Collection<TblColRef> unmatchedDimensions) { - this.unmatchedDimensions = unmatchedDimensions; - } - - public Collection<FunctionDesc> getUnmatchedAggregations() { - return unmatchedAggregations; - } - - public void setUnmatchedAggregations(Collection<FunctionDesc> unmatchedAggregations) { - this.unmatchedAggregations = unmatchedAggregations; - } } } diff --git a/src/core-metadata/src/main/java/org/apache/kylin/metadata/cube/realization/HybridRealization.java b/src/core-metadata/src/main/java/org/apache/kylin/metadata/realization/HybridRealization.java similarity index 96% rename from src/core-metadata/src/main/java/org/apache/kylin/metadata/cube/realization/HybridRealization.java rename to src/core-metadata/src/main/java/org/apache/kylin/metadata/realization/HybridRealization.java index 8e2c73dd74..fbd01d6c78 100644 --- a/src/core-metadata/src/main/java/org/apache/kylin/metadata/cube/realization/HybridRealization.java +++ b/src/core-metadata/src/main/java/org/apache/kylin/metadata/realization/HybridRealization.java @@ -16,7 +16,7 @@ * limitations under the License. */ -package org.apache.kylin.metadata.cube.realization; +package org.apache.kylin.metadata.realization; import java.util.ArrayList; import java.util.LinkedHashSet; @@ -37,10 +37,6 @@ import org.apache.kylin.metadata.model.NDataModel; import org.apache.kylin.metadata.model.NDataModelManager; import org.apache.kylin.metadata.model.SegmentRange; import org.apache.kylin.metadata.model.TblColRef; -import org.apache.kylin.metadata.realization.CapabilityResult; -import org.apache.kylin.metadata.realization.IRealization; -import org.apache.kylin.metadata.realization.QueryableSeg; -import org.apache.kylin.metadata.realization.SQLDigest; import lombok.Getter; import lombok.extern.slf4j.Slf4j; @@ -86,7 +82,7 @@ public class HybridRealization implements IRealization { columns.addAll(realization.getAllColumns()); dimensions.addAll(realization.getAllDimensions()); allMeasures.addAll(realization.getMeasures()); - if (realization.isReady()) + if (realization.isOnline()) isReady = true; if (dateRangeStart == 0 || realization.getDateRangeStart() < dateRangeStart) @@ -253,7 +249,7 @@ public class HybridRealization implements IRealization { } @Override - public boolean isReady() { + public boolean isOnline() { return isReady; } diff --git a/src/core-metadata/src/main/java/org/apache/kylin/metadata/realization/IRealization.java b/src/core-metadata/src/main/java/org/apache/kylin/metadata/realization/IRealization.java index ea8229e6fb..772dfc0b68 100644 --- a/src/core-metadata/src/main/java/org/apache/kylin/metadata/realization/IRealization.java +++ b/src/core-metadata/src/main/java/org/apache/kylin/metadata/realization/IRealization.java @@ -61,7 +61,7 @@ public interface IRealization extends IStorageAware { String getProject(); - boolean isReady(); + boolean isOnline(); String getUuid(); diff --git a/src/core-metadata/src/main/java/org/apache/kylin/metadata/realization/IRealizationFilter.java b/src/core-metadata/src/main/java/org/apache/kylin/metadata/realization/IRealizationFilter.java deleted file mode 100644 index 3f3007488d..0000000000 --- a/src/core-metadata/src/main/java/org/apache/kylin/metadata/realization/IRealizationFilter.java +++ /dev/null @@ -1,24 +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.kylin.metadata.realization; - -public interface IRealizationFilter { - - boolean accept(IRealization real); -} diff --git a/src/query-common/src/main/java/org/apache/kylin/query/relnode/OLAPContext.java b/src/query-common/src/main/java/org/apache/kylin/query/relnode/OLAPContext.java index dbf66783c6..e2d00d77b3 100644 --- a/src/query-common/src/main/java/org/apache/kylin/query/relnode/OLAPContext.java +++ b/src/query-common/src/main/java/org/apache/kylin/query/relnode/OLAPContext.java @@ -47,7 +47,6 @@ import org.apache.kylin.metadata.cube.cuboid.NLayoutCandidate; import org.apache.kylin.metadata.cube.model.DimensionRangeInfo; import org.apache.kylin.metadata.cube.model.NDataSegment; import org.apache.kylin.metadata.cube.model.NDataflow; -import org.apache.kylin.metadata.cube.realization.HybridRealization; import org.apache.kylin.metadata.model.FunctionDesc; import org.apache.kylin.metadata.model.JoinDesc; import org.apache.kylin.metadata.model.MeasureDesc; @@ -58,6 +57,7 @@ import org.apache.kylin.metadata.model.TblColRef; import org.apache.kylin.metadata.model.graph.JoinsGraph; import org.apache.kylin.metadata.query.NativeQueryRealization; import org.apache.kylin.metadata.query.QueryMetrics; +import org.apache.kylin.metadata.realization.HybridRealization; import org.apache.kylin.metadata.realization.IRealization; import org.apache.kylin.metadata.realization.SQLDigest; import org.apache.kylin.metadata.tuple.Tuple; diff --git a/src/query-common/src/main/java/org/apache/kylin/query/routing/rules/PartitionPruningRule.java b/src/query-common/src/main/java/org/apache/kylin/query/routing/PartitionPruningRule.java similarity index 98% rename from src/query-common/src/main/java/org/apache/kylin/query/routing/rules/PartitionPruningRule.java rename to src/query-common/src/main/java/org/apache/kylin/query/routing/PartitionPruningRule.java index 7e300d0f43..c028906e47 100644 --- a/src/query-common/src/main/java/org/apache/kylin/query/routing/rules/PartitionPruningRule.java +++ b/src/query-common/src/main/java/org/apache/kylin/query/routing/PartitionPruningRule.java @@ -16,7 +16,7 @@ * limitations under the License. */ -package org.apache.kylin.query.routing.rules; +package org.apache.kylin.query.routing; import java.util.Collection; import java.util.Collections; @@ -49,8 +49,6 @@ import org.apache.kylin.metadata.model.TblColRef; import org.apache.kylin.metadata.realization.CapabilityResult; import org.apache.kylin.query.relnode.OLAPContext; import org.apache.kylin.query.relnode.OLAPTableScan; -import org.apache.kylin.query.routing.Candidate; -import org.apache.kylin.query.routing.RoutingRule; import org.apache.kylin.query.util.RexUtils; import lombok.extern.slf4j.Slf4j; diff --git a/src/query-common/src/main/java/org/apache/kylin/query/routing/QueryRouter.java b/src/query-common/src/main/java/org/apache/kylin/query/routing/QueryRouter.java index 4682dd522f..9b3d4c03f7 100644 --- a/src/query-common/src/main/java/org/apache/kylin/query/routing/QueryRouter.java +++ b/src/query-common/src/main/java/org/apache/kylin/query/routing/QueryRouter.java @@ -21,9 +21,6 @@ package org.apache.kylin.query.routing; import java.util.List; import org.apache.kylin.guava30.shaded.common.collect.Lists; -import org.apache.kylin.query.routing.rules.PartitionPruningRule; -import org.apache.kylin.query.routing.rules.RemoveUncapableRealizationsRule; -import org.apache.kylin.query.routing.rules.SegmentPruningRule; /** * @author xjiang @@ -38,7 +35,7 @@ public class QueryRouter { static { LAYOUT_CHOOSING_RULES.add(new SegmentPruningRule()); LAYOUT_CHOOSING_RULES.add(new PartitionPruningRule()); - LAYOUT_CHOOSING_RULES.add(new RemoveUncapableRealizationsRule()); + LAYOUT_CHOOSING_RULES.add(new RemoveIncapableRealizationsRule()); } public static void applyRules(Candidate candidate) { @@ -46,4 +43,5 @@ public class QueryRouter { rule.apply(candidate); } } + } diff --git a/src/query-common/src/main/java/org/apache/kylin/query/routing/RealizationChooser.java b/src/query-common/src/main/java/org/apache/kylin/query/routing/RealizationChooser.java index b66014072b..e6fe2878bd 100644 --- a/src/query-common/src/main/java/org/apache/kylin/query/routing/RealizationChooser.java +++ b/src/query-common/src/main/java/org/apache/kylin/query/routing/RealizationChooser.java @@ -78,7 +78,6 @@ import org.apache.kylin.metadata.cube.model.LayoutEntity; import org.apache.kylin.metadata.cube.model.NDataSegment; import org.apache.kylin.metadata.cube.model.NDataflowManager; import org.apache.kylin.metadata.cube.model.NIndexPlanManager; -import org.apache.kylin.metadata.cube.realization.HybridRealization; import org.apache.kylin.metadata.model.FunctionDesc; import org.apache.kylin.metadata.model.FusionModelManager; import org.apache.kylin.metadata.model.ISourceAware; @@ -96,6 +95,7 @@ import org.apache.kylin.metadata.model.graph.JoinsGraph; import org.apache.kylin.metadata.project.NProjectLoader; import org.apache.kylin.metadata.project.NProjectManager; import org.apache.kylin.metadata.realization.CapabilityResult; +import org.apache.kylin.metadata.realization.HybridRealization; import org.apache.kylin.metadata.realization.IRealization; import org.apache.kylin.metadata.realization.NoRealizationFoundException; import org.apache.kylin.metadata.realization.NoStreamingRealizationFoundException; @@ -335,7 +335,7 @@ public class RealizationChooser { public static Candidate selectRealization(OLAPContext olapContext, IRealization realization, Map<String, String> matchedJoinGraphAliasMap) { - if (!realization.isReady()) { + if (!realization.isOnline()) { logger.warn("Realization {} is not ready", realization); return null; } @@ -732,7 +732,7 @@ public class RealizationChooser { boolean streamingEnabled = kylinConfig.streamingEnabled(); for (IRealization real : realizations) { boolean skip = false; - if (!real.isReady()) { + if (!real.isOnline()) { skip = true; logger.warn("Offline model({}/{}) with fact table {} cannot be queried.", project, real, factTable); } else if (isModelViewBounded(context, real)) { @@ -765,11 +765,4 @@ public class RealizationChooser { private static boolean omitFusionModel(boolean turnOnStreaming, IRealization real) { return !turnOnStreaming && real.getModel().isFusionModel(); } - - public static Map<String, String> matchJoins(NDataModel model, OLAPContext ctx) { - KylinConfig projectConfig = NProjectManager.getProjectConfig(ctx.olapSchema.getProjectName()); - boolean isPartialInnerJoin = projectConfig.isQueryMatchPartialInnerJoinModel(); - boolean isPartialNonEquiJoin = projectConfig.partialMatchNonEquiJoins(); - return matchJoins(model, ctx, isPartialInnerJoin, isPartialNonEquiJoin); - } } diff --git a/src/query-common/src/main/java/org/apache/kylin/query/routing/rules/RemoveUncapableRealizationsRule.java b/src/query-common/src/main/java/org/apache/kylin/query/routing/RemoveIncapableRealizationsRule.java similarity index 92% rename from src/query-common/src/main/java/org/apache/kylin/query/routing/rules/RemoveUncapableRealizationsRule.java rename to src/query-common/src/main/java/org/apache/kylin/query/routing/RemoveIncapableRealizationsRule.java index 96d75b9855..284f8e31b7 100644 --- a/src/query-common/src/main/java/org/apache/kylin/query/routing/rules/RemoveUncapableRealizationsRule.java +++ b/src/query-common/src/main/java/org/apache/kylin/query/routing/RemoveIncapableRealizationsRule.java @@ -16,13 +16,11 @@ * limitations under the License. */ -package org.apache.kylin.query.routing.rules; +package org.apache.kylin.query.routing; import org.apache.kylin.guava30.shaded.common.collect.BiMap; import org.apache.kylin.guava30.shaded.common.collect.HashBiMap; import org.apache.kylin.metadata.realization.CapabilityResult; -import org.apache.kylin.query.routing.Candidate; -import org.apache.kylin.query.routing.RoutingRule; import org.apache.kylin.query.util.ComputedColumnRewriter; import org.apache.kylin.query.util.QueryAliasMatchInfo; @@ -31,7 +29,7 @@ import lombok.extern.slf4j.Slf4j; /** */ @Slf4j -public class RemoveUncapableRealizationsRule extends RoutingRule { +public class RemoveIncapableRealizationsRule extends RoutingRule { @Override public void apply(Candidate candidate) { if (candidate.getCapability() != null) { diff --git a/src/query-common/src/main/java/org/apache/kylin/query/routing/rules/SegmentPruningRule.java b/src/query-common/src/main/java/org/apache/kylin/query/routing/SegmentPruningRule.java similarity index 99% rename from src/query-common/src/main/java/org/apache/kylin/query/routing/rules/SegmentPruningRule.java rename to src/query-common/src/main/java/org/apache/kylin/query/routing/SegmentPruningRule.java index 4f7c7c33e4..6c104655b1 100644 --- a/src/query-common/src/main/java/org/apache/kylin/query/routing/rules/SegmentPruningRule.java +++ b/src/query-common/src/main/java/org/apache/kylin/query/routing/SegmentPruningRule.java @@ -16,7 +16,7 @@ * limitations under the License. */ -package org.apache.kylin.query.routing.rules; +package org.apache.kylin.query.routing; import java.util.ArrayList; import java.util.Calendar; @@ -67,8 +67,6 @@ import org.apache.kylin.metadata.project.NProjectManager; import org.apache.kylin.metadata.realization.CapabilityResult; import org.apache.kylin.metadata.realization.IRealization; import org.apache.kylin.query.relnode.OLAPContext; -import org.apache.kylin.query.routing.Candidate; -import org.apache.kylin.query.routing.RoutingRule; import org.apache.kylin.query.util.RexUtils; import lombok.val; diff --git a/src/query-common/src/main/java/org/apache/kylin/query/routing/rules/RealizationSortRule.java b/src/query-common/src/main/java/org/apache/kylin/query/routing/rules/RealizationSortRule.java deleted file mode 100644 index 03af63e07a..0000000000 --- a/src/query-common/src/main/java/org/apache/kylin/query/routing/rules/RealizationSortRule.java +++ /dev/null @@ -1,46 +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.kylin.query.routing.rules; - -import java.util.List; - -import org.apache.kylin.query.routing.Candidate; -import org.apache.kylin.query.routing.RoutingRule; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - */ -public class RealizationSortRule extends RoutingRule { - private static final Logger logger = LoggerFactory.getLogger(RealizationSortRule.class); - - @Override - public void apply(List<Candidate> candidates) { - if (candidates.isEmpty()) - return; - StringBuilder sb = new StringBuilder(); - for (Candidate candidate : candidates) { - sb.append(candidate.getRealization().getCanonicalName()).append(" cost ") - .append(candidate.getCapability().cost).append(". "); - } - logger.debug(sb.toString()); - - candidates.sort(Candidate.COMPARATOR); - } -} diff --git a/src/query-common/src/main/java/org/apache/kylin/query/routing/rules/RemoveBlackoutRealizationsRule.java b/src/query-common/src/main/java/org/apache/kylin/query/routing/rules/RemoveBlackoutRealizationsRule.java deleted file mode 100644 index 70b0b85cdb..0000000000 --- a/src/query-common/src/main/java/org/apache/kylin/query/routing/rules/RemoveBlackoutRealizationsRule.java +++ /dev/null @@ -1,78 +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.kylin.query.routing.rules; - -import java.util.List; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; - -import org.apache.kylin.common.KylinConfig; -import org.apache.kylin.common.util.ClassUtil; -import org.apache.kylin.metadata.realization.IRealization; -import org.apache.kylin.metadata.realization.IRealizationFilter; -import org.apache.kylin.query.routing.Candidate; -import org.apache.kylin.query.routing.RoutingRule; - -import org.apache.kylin.guava30.shaded.common.collect.Sets; - -/** - */ -public class RemoveBlackoutRealizationsRule extends RoutingRule { - private static Set<String> blackList = Sets.newHashSet(); - private static Set<String> whiteList = Sets.newHashSet(); - - private static ConcurrentHashMap<KylinConfig, IRealizationFilter> filters = new ConcurrentHashMap<>(); - - public static boolean accept(IRealization real) { - String canonicalName = real.getCanonicalName(); - if (blackList.contains(canonicalName)) - return false; - if (!whiteList.isEmpty() && !whiteList.contains(canonicalName)) - return false; - - String filterClz = real.getConfig().getQueryRealizationFilter(); - if (filterClz != null) { - if (!getFilterImpl(real.getConfig()).accept(real)) - return false; - } - - return true; - } - - private static IRealizationFilter getFilterImpl(KylinConfig conf) { - IRealizationFilter filter = filters.get(conf); - if (filter == null) { - try { - Class<? extends IRealizationFilter> clz = ClassUtil.forName(conf.getQueryRealizationFilter(), - IRealizationFilter.class); - filter = clz.getConstructor(KylinConfig.class).newInstance(conf); - } catch (Exception e) { - throw new RuntimeException(e); - } - filters.put(conf, filter); - } - return filter; - } - - @Override - public void apply(List<Candidate> candidates) { - candidates.removeIf(candidate -> !accept(candidate.getRealization())); - } - -} diff --git a/src/query-common/src/main/java/org/apache/kylin/query/util/ICutContextStrategy.java b/src/query-common/src/main/java/org/apache/kylin/query/util/ICutContextStrategy.java index 0b8b80dbe9..4968c44503 100644 --- a/src/query-common/src/main/java/org/apache/kylin/query/util/ICutContextStrategy.java +++ b/src/query-common/src/main/java/org/apache/kylin/query/util/ICutContextStrategy.java @@ -21,9 +21,9 @@ package org.apache.kylin.query.util; import java.util.List; import org.apache.calcite.rel.RelNode; +import org.apache.kylin.query.relnode.KapRel; import org.apache.kylin.query.relnode.OLAPContext; import org.apache.kylin.query.relnode.OLAPRel; -import org.apache.kylin.query.relnode.KapRel; public interface ICutContextStrategy { diff --git a/src/query/src/main/java/org/apache/kylin/query/util/FirstRoundContextCutStrategy.java b/src/query/src/main/java/org/apache/kylin/query/util/ContextInitialCutStrategy.java similarity index 97% rename from src/query/src/main/java/org/apache/kylin/query/util/FirstRoundContextCutStrategy.java rename to src/query/src/main/java/org/apache/kylin/query/util/ContextInitialCutStrategy.java index 094f1fd834..3f4d146b95 100644 --- a/src/query/src/main/java/org/apache/kylin/query/util/FirstRoundContextCutStrategy.java +++ b/src/query/src/main/java/org/apache/kylin/query/util/ContextInitialCutStrategy.java @@ -30,7 +30,7 @@ import org.apache.kylin.query.relnode.OLAPRel; import lombok.extern.slf4j.Slf4j; @Slf4j -public class FirstRoundContextCutStrategy implements ICutContextStrategy { +public class ContextInitialCutStrategy implements ICutContextStrategy { @Override public List<OLAPRel> cutOffContext(OLAPRel rootRel, RelNode parentOfRoot) { diff --git a/src/query/src/main/java/org/apache/kylin/query/util/QueryReCutContextStrategy.java b/src/query/src/main/java/org/apache/kylin/query/util/ContextReCutStrategy.java similarity index 97% rename from src/query/src/main/java/org/apache/kylin/query/util/QueryReCutContextStrategy.java rename to src/query/src/main/java/org/apache/kylin/query/util/ContextReCutStrategy.java index 98ea861af6..5eb1a4f798 100644 --- a/src/query/src/main/java/org/apache/kylin/query/util/QueryReCutContextStrategy.java +++ b/src/query/src/main/java/org/apache/kylin/query/util/ContextReCutStrategy.java @@ -33,7 +33,7 @@ import lombok.Setter; @Getter @Setter -public class QueryReCutContextStrategy implements ICutContextStrategy { +public class ContextReCutStrategy implements ICutContextStrategy { private CutContextImplementor reCutter; diff --git a/src/query/src/main/java/org/apache/kylin/query/util/QueryContextCutter.java b/src/query/src/main/java/org/apache/kylin/query/util/QueryContextCutter.java index 68d6338abc..0355fb60bd 100644 --- a/src/query/src/main/java/org/apache/kylin/query/util/QueryContextCutter.java +++ b/src/query/src/main/java/org/apache/kylin/query/util/QueryContextCutter.java @@ -55,8 +55,8 @@ public class QueryContextCutter { * @return The cut OLAPContext with selected realizations, which is a subset of OLAPContext.getThreadLocalContexts(). */ public static List<OLAPContext> selectRealization(RelNode root, boolean isReCutBanned) { - FirstRoundContextCutStrategy firstRoundStrategy = new FirstRoundContextCutStrategy(); - QueryReCutContextStrategy reCutStrategy = new QueryReCutContextStrategy(); + ContextInitialCutStrategy firstRoundStrategy = new ContextInitialCutStrategy(); + ContextReCutStrategy reCutStrategy = new ContextReCutStrategy(); QueryContextCutter.cutContext(firstRoundStrategy, (KapRel) root.getInput(0), root); int retryCutTimes = 0; @@ -120,7 +120,7 @@ public class QueryContextCutter { if (strategy.needCutOff(rootOfSubCtxTree)) { strategy.cutOffContext(rootOfSubCtxTree, queryRoot); } - if (strategy instanceof FirstRoundContextCutStrategy) { + if (strategy instanceof ContextInitialCutStrategy) { ContextUtil.dumpCalcitePlan("EXECUTION PLAN AFTER OLAPCONTEXT IS SET IN FIRST ROUND", queryRoot, log); } else { ContextUtil.dumpCalcitePlan("EXECUTION PLAN AFTER OLAPCONTEXT IS RE-CUT OFF ", queryRoot, log); diff --git a/src/spark-project/engine-spark/src/main/scala/org/apache/kylin/engine/spark/job/SegmentBuildJob.java b/src/spark-project/engine-spark/src/main/scala/org/apache/kylin/engine/spark/job/SegmentBuildJob.java index a9a1a6f52f..05e0f55327 100644 --- a/src/spark-project/engine-spark/src/main/scala/org/apache/kylin/engine/spark/job/SegmentBuildJob.java +++ b/src/spark-project/engine-spark/src/main/scala/org/apache/kylin/engine/spark/job/SegmentBuildJob.java @@ -18,8 +18,6 @@ package org.apache.kylin.engine.spark.job; -import org.apache.kylin.guava30.shaded.common.base.Throwables; -import org.apache.kylin.guava30.shaded.common.collect.Lists; import lombok.extern.slf4j.Slf4j; import lombok.val; import org.apache.commons.lang3.StringUtils; @@ -29,14 +27,13 @@ import org.apache.kylin.common.KylinConfig; import org.apache.kylin.common.persistence.transaction.UnitOfWork; import org.apache.kylin.common.util.HadoopUtil; import org.apache.kylin.engine.spark.builder.SnapshotBuilder; -import org.apache.kylin.engine.spark.job.LogJobInfoUtils; -import org.apache.kylin.engine.spark.job.SegmentJob; -import org.apache.kylin.engine.spark.job.SparkJobConstants; import org.apache.kylin.engine.spark.job.exec.BuildExec; import org.apache.kylin.engine.spark.job.stage.BuildParam; import org.apache.kylin.engine.spark.job.stage.StageExec; -import org.apache.kylin.metadata.cube.model.NBatchConstants; +import org.apache.kylin.guava30.shaded.common.base.Throwables; +import org.apache.kylin.guava30.shaded.common.collect.Lists; import org.apache.kylin.job.execution.ExecutableState; +import org.apache.kylin.metadata.cube.model.NBatchConstants; import org.apache.kylin.metadata.cube.model.NDataSegment; import org.apache.kylin.metadata.cube.model.NDataflow; import org.apache.kylin.metadata.cube.model.NDataflowManager; @@ -49,7 +46,6 @@ import java.io.IOException; import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.concurrent.atomic.AtomicLong; import java.util.stream.Stream; import static org.apache.kylin.engine.spark.job.StageType.BUILD_DICT; diff --git a/src/spark-project/sparder/src/main/scala/org/apache/kylin/query/runtime/plan/TableScanPlan.scala b/src/spark-project/sparder/src/main/scala/org/apache/kylin/query/runtime/plan/TableScanPlan.scala index 544f20c2c2..ae2ab230ff 100644 --- a/src/spark-project/sparder/src/main/scala/org/apache/kylin/query/runtime/plan/TableScanPlan.scala +++ b/src/spark-project/sparder/src/main/scala/org/apache/kylin/query/runtime/plan/TableScanPlan.scala @@ -17,6 +17,9 @@ */ package org.apache.kylin.query.runtime.plan +import java.util.concurrent.ConcurrentHashMap +import java.{lang, util} + import org.apache.kylin.common.{KapConfig, KylinConfig, QueryContext} import org.apache.kylin.engine.spark.utils.{LogEx, LogUtils} import org.apache.kylin.guava30.shaded.common.base.Joiner @@ -24,22 +27,19 @@ import org.apache.kylin.guava30.shaded.common.collect.{Lists, Sets} import org.apache.kylin.metadata.cube.cuboid.NLayoutCandidate import org.apache.kylin.metadata.cube.gridtable.NLayoutToGridTableMapping import org.apache.kylin.metadata.cube.model.{LayoutEntity, NDataSegment, NDataflow} -import org.apache.kylin.metadata.cube.realization.HybridRealization import org.apache.kylin.metadata.model._ -import org.apache.kylin.metadata.realization.IRealization +import org.apache.kylin.metadata.realization.{HybridRealization, IRealization} import org.apache.kylin.metadata.tuple.TupleInfo import org.apache.kylin.query.implicits.sessionToQueryContext import org.apache.kylin.query.relnode.{KapRel, OLAPContext} import org.apache.kylin.query.util.{RuntimeHelper, SparderDerivedUtil} -import org.apache.spark.sql.{Column, DataFrame, Row, SparderEnv, SparkOperation, SparkSession} +import org.apache.spark.sql._ import org.apache.spark.sql.execution.utils.SchemaProcessor import org.apache.spark.sql.functions.col import org.apache.spark.sql.manager.SparderLookupManager -import org.apache.spark.sql.types.{ArrayType, DataTypes, DoubleType, StringType, StructField, StructType} +import org.apache.spark.sql.types._ import org.apache.spark.sql.util.SparderTypeUtil -import java.util.concurrent.ConcurrentHashMap -import java.{lang, util} import scala.collection.JavaConverters._