Hi Lin, Could you please describe the problem you found in detail? Thanks!
Best regards, Shaofeng Shi 史少锋 Apache Kylin PMC Work email: [email protected] Kyligence Inc: https://kyligence.io/ Apache Kylin FAQ: https://kylin.apache.org/docs/gettingstarted/faq.html Join Kylin user mail group: [email protected] Join Kylin dev mail group: [email protected] 王林 <[email protected]> 于2019年1月31日周四 上午11:57写道: > 你好: > 通过查看kylin自动merge功能未起作用通过跟踪源码: > 当自动merge时触发: > public void updateOnNewSegmentReady(String cubeName) { > final KylinConfig kylinConfig = KylinConfig.getInstanceFromEnv(); > String serverMode = kylinConfig.getServerMode(); > if (Constant.SERVER_MODE_JOB.equals(serverMode.toLowerCase()) > || > Constant.SERVER_MODE_ALL.equals(serverMode.toLowerCase())) { > CubeInstance cube = getCubeManager().getCube(cubeName); > if (cube != null) { > CubeSegment seg = cube.getLatestBuiltSegment(); > if (seg != null && seg.getStatus() == > SegmentStatusEnum.READY) { > keepCubeRetention(cubeName); > mergeCubeSegment(cubeName); > } > } > } > } > > > > private void mergeCubeSegment(String cubeName) { > CubeInstance cube = getCubeManager().getCube(cubeName); > if (!cube.needAutoMerge()) > return; > > > synchronized (CubeService.class) { > try { > cube = getCubeManager().getCube(cubeName); > SegmentRange offsets = cube.autoMergeCubeSegments(); > if (offsets != null) { > CubeSegment newSeg = > getCubeManager().mergeSegments(cube, null, offsets, > true);//这个触发是流式cube的merge。但是我的cube不是流式cube。报异常。 > logger.debug("Will submit merge job on " + newSeg); > DefaultChainedExecutable job = > EngineFactory.createBatchMergeJob(newSeg, "SYSTEM"); > getExecutableManager().addJob(job); > } else { > logger.debug("Not ready for merge on cube " + > cubeName); > } > } catch (IOException e) { > logger.error("Failed to auto merge cube " + cubeName, e); > } > } > } > > > > public CubeSegment mergeSegments(CubeInstance cube, TSRange tsRange, > SegmentRange segRange, boolean force) > throws IOException { > if (cube.getSegments().isEmpty()) > throw new IllegalArgumentException("Cube " + cube + " has no > segments"); > > > checkInputRanges(tsRange, segRange); > checkBuildingSegment(cube); > checkCubeIsPartitioned(cube); > > > if (cube.getSegments().getFirstSegment().isOffsetCube()) { > // offset cube, merge by date range? > if (segRange == null && tsRange != null) { > Pair<CubeSegment, CubeSegment> pair = > cube.getSegments(SegmentStatusEnum.READY) > .findMergeOffsetsByDateRange(tsRange, > Long.MAX_VALUE); > if (pair == null) > throw new IllegalArgumentException("Find no segments > to merge by " + tsRange + " for cube " + cube); > segRange = new > SegmentRange(pair.getFirst().getSegRange().start, > pair.getSecond().getSegRange().end); > } > tsRange = null; > Preconditions.checkArgument(segRange != null); > } else { > segRange = null; > Preconditions.checkArgument(tsRange != null);//抛出异常 > } > > > > 通过跟踪代码,自动合并有问题,我使用的是kylin2.2.x源码,是否存在问题?
