Apache Calcite中的distinct优化

264 阅读1分钟

 

 

    @Test
    public void selectDistinctWithoutFrom() throws IOException {
        Schema select = distinct(valuesSchema(fields(fieldType("1", "int")), values(1,2)));
        Assert.assertEquals("DistinctSchema(schema=ValuesSchema(values=[2, 2], fieldNames=[FieldSchema(id=1, type=int)]))", select.toString());
        RelNode relNode = toRelNode(select);

        Assert.assertEquals("LogicalValues(type=[RecordType(INTEGER 1)], tuples=[[{ 1 }, { 2 }]])\n",toString(relNode));
    }

当values的值没有重复项的时候,distinct不会生效

    @Test
    public void selectDistinctWithoutFrom() throws IOException {
        Schema select = distinct(valuesSchema(fields(fieldType("1", "int")), values(2,2)));
        Assert.assertEquals("DistinctSchema(schema=ValuesSchema(values=[2, 2], fieldNames=[FieldSchema(id=1, type=int)]))", select.toString());
        RelNode relNode = toRelNode(select);

        Assert.assertEquals("LogicalAggregate(group=[{0}])\n" +
                "  LogicalValues(type=[RecordType(INTEGER 1)], tuples=[[{ 2 }]])\n",toString(relNode));
        Assert.assertEquals("(2)\n", dump(relNode));
    }

当valus带有重复值的时候,distinct就会生效