This is an automated email from the ASF dual-hosted git repository. xxyu pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/kylin.git
The following commit(s) were added to refs/heads/main by this push: new 94b109f KYLIN-5027 Fix query for the cube dose not build basecuboid 94b109f is described below commit 94b109f363629a8829e9a90ac6f8853c6fd961b0 Author: yaqian.zhang <598593...@qq.com> AuthorDate: Mon Aug 16 16:54:37 2021 +0800 KYLIN-5027 Fix query for the cube dose not build basecuboid --- .../apache/kylin/cube/CubeCapabilityChecker.java | 25 ++++++++++++++++++++-- .../java/org/apache/kylin/cube/model/CubeDesc.java | 13 +++++++++++ .../kylin/job/execution/ExecutableManager.java | 5 ++++- 3 files changed, 40 insertions(+), 3 deletions(-) diff --git a/core-cube/src/main/java/org/apache/kylin/cube/CubeCapabilityChecker.java b/core-cube/src/main/java/org/apache/kylin/cube/CubeCapabilityChecker.java index 5ba0a2d..5d96628 100644 --- a/core-cube/src/main/java/org/apache/kylin/cube/CubeCapabilityChecker.java +++ b/core-cube/src/main/java/org/apache/kylin/cube/CubeCapabilityChecker.java @@ -24,7 +24,6 @@ import java.util.Iterator; import java.util.List; import java.util.Set; import java.util.Arrays; -import java.util.stream.Collectors; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.StringUtils; @@ -183,11 +182,33 @@ public class CubeCapabilityChecker { } else { HashSet<TblColRef> aggResult = result; for (AggregationGroup aggGroup : cubeDesc.getAggregationGroups()) { - HashSet<TblColRef> tmpAggResult = (HashSet<TblColRef>) result.stream().filter(col -> !Arrays.asList(aggGroup.getIncludes()).contains(col.getCanonicalName())).collect(Collectors.toSet()); + List<String> aggGroupColumn = Arrays.asList(aggGroup.getIncludes()); + HashSet<TblColRef> tmpAggResult = new HashSet<>(dimensionColumns); + Iterator<TblColRef> iterator = result.iterator(); + while (iterator.hasNext()) { + TblColRef col = iterator.next(); + String colName = col.getCanonicalName(); + String[] colInfo = colName.split("\\."); + // colName: database.table.column + if (colInfo.length == 3) { + colName = colInfo[1] + "." + colInfo[2]; + } + // colName: tableAlias:database.table.column + if (col.getTableAlias() != null) { + colName = col.getTableAlias() + "." + colInfo[2]; + } + // aggGroupColumn: [table1Alias.column1,table2Alias.column2,....] + if (aggGroupColumn.contains(colName)) { + tmpAggResult.remove(col); + } + } if (tmpAggResult.size() < aggResult.size()) { aggResult = tmpAggResult; } } + if (aggResult.size() > 0) { + aggResult.removeAll(cubeDesc.listDerivedDimensionColumns()); + } result = aggResult; } return result; diff --git a/core-cube/src/main/java/org/apache/kylin/cube/model/CubeDesc.java b/core-cube/src/main/java/org/apache/kylin/cube/model/CubeDesc.java index 1cc31d0..dc431ef 100644 --- a/core-cube/src/main/java/org/apache/kylin/cube/model/CubeDesc.java +++ b/core-cube/src/main/java/org/apache/kylin/cube/model/CubeDesc.java @@ -255,6 +255,19 @@ public class CubeDesc extends RootPersistentEntity implements IEngineAware { } /** + * @return derived dimension columns + */ + public List<TblColRef> listDerivedDimensionColumns() { + List<TblColRef> result = new ArrayList<TblColRef>(); + for (TblColRef col : dimensionColumns) { + if (isDerived(col)) { + result.add(col); + } + } + return result; + } + + /** * @return dimension columns excluding derived */ public List<TblColRef> listDimensionColumnsExcludingDerived(boolean alsoExcludeExtendedCol) { diff --git a/core-job/src/main/java/org/apache/kylin/job/execution/ExecutableManager.java b/core-job/src/main/java/org/apache/kylin/job/execution/ExecutableManager.java index 66b17f5..5fb5fbd 100644 --- a/core-job/src/main/java/org/apache/kylin/job/execution/ExecutableManager.java +++ b/core-job/src/main/java/org/apache/kylin/job/execution/ExecutableManager.java @@ -570,7 +570,6 @@ public class ExecutableManager { if (endTime != 0) { long interruptTime = System.currentTimeMillis() - endTime + job.getInterruptTime(); info = Maps.newHashMap(getJobOutput(jobId).getInfo()); - getJobOutput(jobId).getInfo().remove(AbstractExecutable.END_TIME); info.put(AbstractExecutable.INTERRUPT_TIME, Long.toString(interruptTime)); info.remove(AbstractExecutable.END_TIME); } @@ -683,6 +682,10 @@ public class ExecutableManager { jobOutput.setInfo(info); } } + if ((ExecutableState.ERROR.equals(oldStatus) || ExecutableState.STOPPED.equals(oldStatus)) + && ExecutableState.READY.equals(newStatus)) { + jobOutput.getInfo().remove(AbstractExecutable.END_TIME); + } if (output != null) { if (output.length() > config.getJobOutputMaxSize()) { output = output.substring(0, config.getJobOutputMaxSize());