[
https://issues.apache.org/jira/browse/CALCITE-4250?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
xzh_dz updated CALCITE-4250:
----------------------------
Description:
We often use `RelMetadataQuery` to track column lineage, but failed to get
original column of aggregate operator.
This case can be reproduced as below,
{code:java}
// @Test void testAggregateRelMdColumnOrigins() {
final RelBuilder relBuilder = RelBuilder.create(config().build());
final LogicalProject project = (LogicalProject) relBuilder.scan("EMP")
.project(relBuilder.field("EMPNO"),
relBuilder.field("ENAME"),
relBuilder.field("JOB"),
relBuilder.field("SAL"),
relBuilder.field("DEPTNO")).build();
final LogicalAggregate aggregate = (LogicalAggregate) relBuilder.push(project)
.aggregate(
relBuilder.groupKey(relBuilder.field(1, 0, "DEPTNO")),
relBuilder.count(relBuilder.field(1, 0, "SAL")))
.build();
RelMetadataQuery mq = aggregate.getCluster().getMetadataQuery();
final RelColumnOrigin nameColumn = mq.getColumnOrigin(aggregate , 0);
assertThat(nameColumn.getOriginTable().getRowType().getFieldNames().get(7).equals("DEPTNO"),
is(true));
System.out.println(nameColumn.getOriginColumnOrdinal()); // 5
}
{code}
was:
We often use `RelMetadataQuery` to track column lineage, but failed to get
original column of aggregate operator.
This case can be reproduced as below, the correct column index should be 7, but
get 5.
{code:java}
// @Test void testAggregateRelMdColumnOrigins() {
final RelBuilder relBuilder = RelBuilder.create(config().build());
final LogicalProject project = (LogicalProject) relBuilder.scan("EMP")
.project(relBuilder.field("EMPNO"),
relBuilder.field("ENAME"),
relBuilder.field("JOB"),
relBuilder.field("SAL"),
relBuilder.field("DEPTNO")).build();
final LogicalAggregate aggregate = (LogicalAggregate) relBuilder.push(project)
.aggregate(
relBuilder.groupKey(relBuilder.field(1, 0, "DEPTNO")),
relBuilder.count(relBuilder.field(1, 0, "SAL")))
.build();
RelMetadataQuery mq = aggregate.getCluster().getMetadataQuery();
final RelColumnOrigin nameColumn = mq.getColumnOrigin(aggregate , 0);
assertThat(nameColumn.getOriginTable().getRowType().getFieldNames().get(7).equals("DEPTNO"),
is(true));
System.out.println(nameColumn.getOriginColumnOrdinal()); // 5
}
{code}
> Failed to get original column of aggregate operator
> ---------------------------------------------------
>
> Key: CALCITE-4250
> URL: https://issues.apache.org/jira/browse/CALCITE-4250
> Project: Calcite
> Issue Type: Wish
> Reporter: xzh_dz
> Priority: Major
> Labels: pull-request-available
> Time Spent: 0.5h
> Remaining Estimate: 0h
>
> We often use `RelMetadataQuery` to track column lineage, but failed to get
> original column of aggregate operator.
> This case can be reproduced as below,
> {code:java}
> // @Test void testAggregateRelMdColumnOrigins() {
> final RelBuilder relBuilder = RelBuilder.create(config().build());
> final LogicalProject project = (LogicalProject) relBuilder.scan("EMP")
> .project(relBuilder.field("EMPNO"),
> relBuilder.field("ENAME"),
> relBuilder.field("JOB"),
> relBuilder.field("SAL"),
> relBuilder.field("DEPTNO")).build();
> final LogicalAggregate aggregate = (LogicalAggregate)
> relBuilder.push(project)
> .aggregate(
> relBuilder.groupKey(relBuilder.field(1, 0, "DEPTNO")),
> relBuilder.count(relBuilder.field(1, 0, "SAL")))
> .build();
> RelMetadataQuery mq = aggregate.getCluster().getMetadataQuery();
> final RelColumnOrigin nameColumn = mq.getColumnOrigin(aggregate , 0);
>
> assertThat(nameColumn.getOriginTable().getRowType().getFieldNames().get(7).equals("DEPTNO"),
> is(true));
> System.out.println(nameColumn.getOriginColumnOrdinal()); // 5
> }
> {code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)