public static TblColRef mockup(TableDesc table, int oneBasedColumnIndex, String name, String datatype) { return mockup(table, oneBasedColumnIndex, name, datatype, null); }
static TblColRef tblColRef(int col, String datatype) { return TblColRef.mockup(MOCKUP_TABLE, col + 1, "" + col, datatype); }
private static TblColRef col(int i, TableDesc t) { return TblColRef.mockup(t, i, "Col" + i, "string"); }
protected List<TblColRef> buildGroups() { List<TblColRef> groups = new ArrayList<TblColRef>(); TableDesc t1 = TableDesc.mockup("DEFAULT.TEST_KYLIN_FACT"); TblColRef c1 = TblColRef.mockup(t1, 2, "CAL_DT", "string"); groups.add(c1); TableDesc t2 = TableDesc.mockup("DEFAULT.TEST_CATEGORY_GROUPINGS"); TblColRef c2 = TblColRef.mockup(t2, 14, "META_CATEG_NAME", "string"); groups.add(c2); return groups; }
private static List<TblColRef> mockupTblColRefList() { TableDesc t = TableDesc.mockup("table_a"); List<TblColRef> list = new ArrayList<>(); for (int i = 0; i < userNeedColNames.length; i++) { TblColRef c = TblColRef.mockup(t, i, userNeedColNames[i], "string"); list.add(c); } return list; }
private static List<TblColRef> mockupTblColRefListWithComment(String[] comments) { TableDesc t = TableDesc.mockup("table_a"); List<TblColRef> list = new ArrayList<>(); for (int i = 0; i < userNeedColNames.length; i++) { TblColRef c = TblColRef.mockup(t, i, userNeedColNames[i], "string", comments[i]); list.add(c); } return list; } }
@Test public void verifyConvertFilterConstants1() { GTInfo info = table.getInfo(); TableDesc extTable = TableDesc.mockup("ext"); TblColRef extColA = TblColRef.mockup(extTable, 1, "A", "timestamp"); TblColRef extColB = TblColRef.mockup(extTable, 2, "B", "integer"); CompareTupleFilter fComp1 = compare(extColA, FilterOperatorEnum.GT, "2015-01-14"); CompareTupleFilter fComp2 = compare(extColB, FilterOperatorEnum.EQ, "10"); LogicalTupleFilter filter = and(fComp1, fComp2); List<TblColRef> colMapping = Lists.newArrayList(); colMapping.add(extColA); colMapping.add(extColB); TupleFilter newFilter = GTUtil.convertFilterColumnsAndConstants(filter, info, colMapping, null); assertEquals( "AND [UNKNOWN_MODEL:NULL.GT_MOCKUP_TABLE.0 GT [\\x00\\x00\\x01J\\xE5\\xBD\\x5C\\x00], UNKNOWN_MODEL:NULL.GT_MOCKUP_TABLE.1 EQ [\\x00]]", newFilter.toString()); }
@Test public void verifyConvertFilterConstants4() { GTInfo info = table.getInfo(); TableDesc extTable = TableDesc.mockup("ext"); TblColRef extColA = TblColRef.mockup(extTable, 1, "A", "timestamp"); TblColRef extColB = TblColRef.mockup(extTable, 2, "B", "integer"); CompareTupleFilter fComp1 = compare(extColA, FilterOperatorEnum.GT, "2015-01-14"); CompareTupleFilter fComp2 = compare(extColB, FilterOperatorEnum.IN, "9", "10", "15"); LogicalTupleFilter filter = and(fComp1, fComp2); List<TblColRef> colMapping = Lists.newArrayList(); colMapping.add(extColA); colMapping.add(extColB); // $1 in ("9", "10", "15") has only "10" left TupleFilter newFilter = GTUtil.convertFilterColumnsAndConstants(filter, info, colMapping, null); assertEquals( "AND [UNKNOWN_MODEL:NULL.GT_MOCKUP_TABLE.0 GT [\\x00\\x00\\x01J\\xE5\\xBD\\x5C\\x00], UNKNOWN_MODEL:NULL.GT_MOCKUP_TABLE.1 IN [\\x00]]", newFilter.toString()); }
@Test public void testSerialization() { TblColRef colD = TblColRef.mockup(t, 1, "C1", "decimal"); TblColRef colM = TblColRef.mockup(t, 2, "C2", "string"); BigDecimal value = BigDecimal.valueOf(10L); ColumnTupleFilter colFilter = new ColumnTupleFilter(colD); ConstantTupleFilter constFilter = new ConstantTupleFilter("col"); CompareTupleFilter compareFilter = new CompareTupleFilter(TupleFilter.FilterOperatorEnum.EQ); compareFilter.addChild(colFilter); compareFilter.addChild(constFilter); ColumnTupleExpression colTuple = new ColumnTupleExpression(colM); NumberTupleExpression constTuple = new NumberTupleExpression(value); Pair<TupleFilter, TupleExpression> whenEntry = new Pair<TupleFilter, TupleExpression>(compareFilter, colTuple); CaseTupleExpression caseTuple = new CaseTupleExpression(Lists.newArrayList(whenEntry), constTuple); byte[] result = TupleExpressionSerializer.serialize(caseTuple, StringCodeSystem.INSTANCE); TupleExpression desTuple = TupleExpressionSerializer.deserialize(result, StringCodeSystem.INSTANCE); assertEquals(caseTuple, desTuple); } }
@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()); } }
@Test public void testDateAndTimePartition() { PartitionDesc partitionDesc = new PartitionDesc(); TblColRef col1 = TblColRef.mockup(TableDesc.mockup("DEFAULT.TABLE_NAME"), 1, "DATE_COLUMN", "string"); partitionDesc.setPartitionDateColumnRef(col1); partitionDesc.setPartitionDateColumn(col1.getCanonicalName()); partitionDesc.setPartitionDateFormat("yyyy-MM-dd"); TblColRef col2 = TblColRef.mockup(TableDesc.mockup("DEFAULT.TABLE_NAME"), 2, "HOUR_COLUMN", "string"); partitionDesc.setPartitionTimeColumnRef(col2); partitionDesc.setPartitionTimeColumn(col2.getCanonicalName()); partitionDesc.setPartitionTimeFormat("H"); TSRange range = new TSRange(DateFormat.stringToMillis("2016-02-22 00:00:00"), DateFormat.stringToMillis("2016-02-23 01:00:00")); String condition = partitionConditionBuilder.buildDateRangeCondition(partitionDesc, null, range); Assert.assertEquals( "((UNKNOWN_ALIAS.DATE_COLUMN = '2016-02-22' AND UNKNOWN_ALIAS.HOUR_COLUMN >= '0') OR (UNKNOWN_ALIAS.DATE_COLUMN > '2016-02-22')) AND ((UNKNOWN_ALIAS.DATE_COLUMN = '2016-02-23' AND UNKNOWN_ALIAS.HOUR_COLUMN < '1') OR (UNKNOWN_ALIAS.DATE_COLUMN < '2016-02-23'))", condition); }
@Test public void testTimePartition() { PartitionDesc partitionDesc = new PartitionDesc(); TblColRef col = TblColRef.mockup(TableDesc.mockup("DEFAULT.TABLE_NAME"), 2, "HOUR_COLUMN", "string"); partitionDesc.setPartitionTimeColumnRef(col); partitionDesc.setPartitionTimeColumn(col.getCanonicalName()); partitionDesc.setPartitionTimeFormat("HH"); TSRange range = new TSRange(DateFormat.stringToMillis("2016-02-22 00:00:00"), DateFormat.stringToMillis("2016-02-23 01:00:00")); String condition = partitionConditionBuilder.buildDateRangeCondition(partitionDesc, null, range); Assert.assertEquals("UNKNOWN_ALIAS.HOUR_COLUMN >= '00' AND UNKNOWN_ALIAS.HOUR_COLUMN < '01'", condition); }
@Test public void basicTest() { TableDesc t1 = TableDesc.mockup("DEFAULT.TEST_KYLIN_FACT"); TblColRef column = TblColRef.mockup(t1, 2, "CAL_DT", "date"); CompareTupleFilter compareFilter = new CompareTupleFilter(TupleFilter.FilterOperatorEnum.EQ); ColumnTupleFilter columnFilter = new ColumnTupleFilter(column); compareFilter.addChild(columnFilter); ConstantTupleFilter constantFilter = null; constantFilter = new ConstantTupleFilter("946684800000"); compareFilter.addChild(constantFilter); TimeConditionLiteralsReplacer filterDecorator = new TimeConditionLiteralsReplacer(compareFilter); byte[] bytes = TupleFilterSerializer.serialize(compareFilter, filterDecorator, DictCodeSystem.INSTANCE); CompareTupleFilter compareTupleFilter = (CompareTupleFilter) TupleFilterSerializer.deserialize(bytes, DictCodeSystem.INSTANCE); Assert.assertEquals("2000-01-01", compareTupleFilter.getFirstValue()); } }
@Test public void testDatePartition() { PartitionDesc partitionDesc = new PartitionDesc(); TblColRef col = TblColRef.mockup(TableDesc.mockup("DEFAULT.TABLE_NAME"), 1, "DATE_COLUMN", "string"); partitionDesc.setPartitionDateColumnRef(col); partitionDesc.setPartitionDateColumn(col.getCanonicalName()); partitionDesc.setPartitionDateFormat("yyyy-MM-dd"); TSRange range = new TSRange(DateFormat.stringToMillis("2016-02-22"), DateFormat.stringToMillis("2016-02-23")); String condition = partitionConditionBuilder.buildDateRangeCondition(partitionDesc, null, range); Assert.assertEquals("UNKNOWN_ALIAS.DATE_COLUMN >= '2016-02-22' AND UNKNOWN_ALIAS.DATE_COLUMN < '2016-02-23'", condition); range = new TSRange(0L, 0L); condition = partitionConditionBuilder.buildDateRangeCondition(partitionDesc, null, range); Assert.assertEquals("1=0", condition); }
@Test public void getRewriteFieldType() { TblColRef mockColOfDoubleType = TblColRef.mockup(TableDesc.mockup("mock_table"), 0, "price", "double", ""); TblColRef mockColOfDecimalType = TblColRef.mockup(TableDesc.mockup("mock_table"), 1, "price", "decimal", ""); FunctionDesc function = FunctionDesc.newInstance("SUM", ParameterDesc.newInstance("1"), "bigint"); assertEquals(DataType.getType("bigint"), function.getRewriteFieldType()); function = FunctionDesc.newInstance("COUNT", ParameterDesc.newInstance("1"), "bigint"); assertEquals(DataType.getType("bigint"), function.getRewriteFieldType()); function = FunctionDesc.newInstance("SUM", ParameterDesc.newInstance(mockColOfDoubleType), "double"); assertEquals(DataType.getType("double"), function.getRewriteFieldType()); function = FunctionDesc.newInstance("MAX", ParameterDesc.newInstance(mockColOfDecimalType), "double"); assertEquals(DataType.getType("decimal"), function.getRewriteFieldType()); function = FunctionDesc.newInstance("MIN", ParameterDesc.newInstance(mockColOfDecimalType), "double"); assertEquals(DataType.getType("decimal"), function.getRewriteFieldType()); function = FunctionDesc.newInstance(FunctionDesc.FUNC_PERCENTILE, ParameterDesc.newInstance(mockColOfDecimalType), "double"); assertEquals(DataType.ANY, function.getRewriteFieldType()); }
public static TblColRef mockup(TableDesc table, int oneBasedColumnIndex, String name, String datatype) { return mockup(table, oneBasedColumnIndex, name, datatype, null); }
static TblColRef tblColRef(int col, String datatype) { return TblColRef.mockup(MOCKUP_TABLE, col + 1, "" + col, datatype); }