public List<CubeSegment> listSegmentsForQuery(CubeInstance cube) { List<CubeSegment> r = new ArrayList<>(); for (CubeSegment seg : cube.getSegments(SegmentStatusEnum.READY)) { if (check(seg)) r.add(seg); } return r; }
@Test public void testEmptySegment() { CubeSegment seg = cube.getFirstSegment(); TblColRef col = cube.getModel().findColumn("CUSTOMER.C_NATION"); // a normal hit TupleFilter f = compare(col, FilterOperatorEnum.EQ, "CHINA"); SegmentPruner segmentPruner = new SegmentPruner(f); Assert.assertTrue(segmentPruner.check(seg)); // make the segment empty, it should be pruned seg.setInputRecords(0); Assert.assertFalse(segmentPruner.check(seg)); }
Assert.assertTrue(segmentPruner.check(cubeSegment)); Assert.assertTrue(segmentPruner.check(cubeSegment)); Assert.assertFalse(segmentPruner.check(cubeSegment)); Assert.assertTrue(segmentPruner.check(cubeSegment)); Assert.assertTrue(segmentPruner.check(cubeSegment)); Assert.assertFalse(segmentPruner.check(cubeSegment)); Assert.assertTrue(segmentPruner.check(cubeSegment)); Assert.assertTrue(segmentPruner.check(cubeSegment)); Assert.assertFalse(segmentPruner.check(cubeSegment)); Assert.assertTrue(segmentPruner.check(cubeSegment)); Assert.assertFalse(segmentPruner.check(cubeSegment)); Assert.assertFalse(segmentPruner.check(cubeSegment));
@Test public void testLegacyCubeSeg() { // legacy cube segments does not have DimensionRangeInfo, but with TSRange can do some pruning CubeInstance cube = CubeManager.getInstance(getTestConfig()) .getCube("test_kylin_cube_without_slr_left_join_ready_2_segments"); TblColRef col = cube.getModel().findColumn("TEST_KYLIN_FACT.CAL_DT"); CubeSegment seg = cube.getSegments(SegmentStatusEnum.READY).get(0); TSRange tsRange = seg.getTSRange(); long start = tsRange.start.v; try (SetAndUnsetSystemProp sns = new SetAndUnsetSystemProp("kylin.query.skip-empty-segments", "false")) { { TupleFilter f = compare(col, FilterOperatorEnum.LTE, start); SegmentPruner segmentPruner = new SegmentPruner(f); Assert.assertTrue(segmentPruner.check(seg)); } { TupleFilter f = compare(col, FilterOperatorEnum.LT, start); SegmentPruner segmentPruner = new SegmentPruner(f); Assert.assertFalse(segmentPruner.check(seg)); } } } }
public List<CubeSegment> listSegmentsForQuery(CubeInstance cube) { List<CubeSegment> r = new ArrayList<>(); for (CubeSegment seg : cube.getSegments(SegmentStatusEnum.READY)) { if (check(seg)) r.add(seg); } return r; }