@Test public void testFindMustEqualColsAndValues() { TableDesc tbl = TableDesc.mockup("mockup_table"); TblColRef colA = TblColRef.mockup(tbl, 0, "A", "bigint"); TblColRef colB = TblColRef.mockup(tbl, 1, "B", "char(256)"); Set<TblColRef> cols = Sets.newHashSet(colA, colB); { TupleFilter f = compare(colA, FilterOperatorEnum.EQ, "1234"); Assert.assertEquals(map(colA, "1234"), f.findMustEqualColsAndValues(cols)); } { TupleFilter f = compare(colA, FilterOperatorEnum.ISNULL); Assert.assertEquals(map(colA, null), f.findMustEqualColsAndValues(cols)); } { TupleFilter f = and(compare(colA, FilterOperatorEnum.ISNULL), compare(colB, FilterOperatorEnum.EQ, "1234")); Assert.assertEquals(map(colA, null, colB, "1234"), f.findMustEqualColsAndValues(cols)); Assert.assertTrue(not(f).findMustEqualColsAndValues(cols).isEmpty()); } { TupleFilter f = compare(colA, FilterOperatorEnum.LT, "1234"); Assert.assertTrue(f.findMustEqualColsAndValues(cols).isEmpty()); } }
TupleFilter f = compare(qtyCol, FilterOperatorEnum.EQ, revCol); SegmentPruner segmentPruner = new SegmentPruner(f); Assert.assertTrue(segmentPruner.check(cubeSegment)); TupleFilter f = compare(qtyCol, FilterOperatorEnum.ISNULL); SegmentPruner segmentPruner = new SegmentPruner(f); Assert.assertTrue(segmentPruner.check(cubeSegment)); TupleFilter f = compare(qtyCol, FilterOperatorEnum.LT, constFilter_LO_QUANTITY1); SegmentPruner segmentPruner = new SegmentPruner(f); Assert.assertFalse(segmentPruner.check(cubeSegment)); TupleFilter f = compare(qtyCol, FilterOperatorEnum.LTE, constFilter_LO_QUANTITY1); SegmentPruner segmentPruner = new SegmentPruner(f); Assert.assertTrue(segmentPruner.check(cubeSegment)); TupleFilter f = compare(qtyCol, FilterOperatorEnum.LT, constFilter_LO_QUANTITY2); SegmentPruner segmentPruner = new SegmentPruner(f); Assert.assertTrue(segmentPruner.check(cubeSegment)); TupleFilter f = compare(qtyCol, FilterOperatorEnum.GT, constFilter_LO_QUANTITY2); SegmentPruner segmentPruner = new SegmentPruner(f); Assert.assertFalse(segmentPruner.check(cubeSegment)); TupleFilter f = compare(qtyCol, FilterOperatorEnum.GTE, constFilter_LO_QUANTITY2); SegmentPruner segmentPruner = new SegmentPruner(f); Assert.assertTrue(segmentPruner.check(cubeSegment)); TupleFilter f = compare(qtyCol, FilterOperatorEnum.GT, constFilter_LO_QUANTITY1);
@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)); }
@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)); } } } }