Hi, ????.

       You are right. In Kylin2.2.0, there is an issue. Please check 
https://issues.apache.org/jira/browse/KYLIN-3165. If you want to use the 
feature of the auto merge, you can upgrade to 2.3.0 or the latest version.



?????? Windows 10 ??????<https://go.microsoft.com/fwlink/?LinkId=550986>????



________________________________
??????: ???? <[email protected]>
????????: Thursday, January 31, 2019 11:56:46 AM
??????: dev
????: kylin ????merge ????

??????
     ????????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????????????????????

Reply via email to