[ 
https://issues.apache.org/jira/browse/FLINK-27519?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17532816#comment-17532816
 ] 

Yao Zhang commented on FLINK-27519:
-----------------------------------

Hi [~martijnvisser] ,

I am not sure about this, as in the latest version of Calcite I find some 
similar codes.  This problem is caused by ProjectToWindowRule. When we use 
HepPlanner and apply this rule from inner nested SQL to outter one, we will get 
duplicated field names for over aggregation fields.

 

> Fix duplicates names when there are multiple levels of over window aggregate
> ----------------------------------------------------------------------------
>
>                 Key: FLINK-27519
>                 URL: https://issues.apache.org/jira/browse/FLINK-27519
>             Project: Flink
>          Issue Type: Bug
>          Components: Table SQL / Planner
>    Affects Versions: 1.15.0
>            Reporter: jinfeng
>            Priority: Major
>
> A similar  issue like 
> [FLINK-22121|https://issues.apache.org/jira/browse/FLINK-22121]
> And can be reproduced by adding this unit test 
> org.apache.flink.table.planner.plan.stream.sql.agg.GroupWindowTest#testWindowAggregateWithAnotherWindowAggregate
> {code:java}
> //代码占位符
> @Test
> def testWindowAggregateWithAnotherWindowAggregate(): Unit = {
>   val sql =
>     """
>       |SELECT CAST(pv AS INT) AS pv, CAST(uv AS INT) AS uv FROM (
>       |  SELECT *, count(distinct(c)) over (partition by a order by b desc) 
> AS uv
>       |  FROM (
>       |    SELECT *, count(*) over (partition by a, c order by b desc) AS pv
>       |    FROM MyTable
>       |  )
>       |)
>       |""".stripMargin
>   util.verifyExecPlan(sql)
> } {code}
> The error message : 
>  
>  
> {code:java}
> //代码占位符
> org.apache.flink.table.api.ValidationException: Field names must be unique. 
> Found duplicates: [w0$o0]    at 
> org.apache.flink.table.types.logical.RowType.validateFields(RowType.java:273)
>     at org.apache.flink.table.types.logical.RowType.<init>(RowType.java:158)
>     at org.apache.flink.table.types.logical.RowType.of(RowType.java:298)
>     at org.apache.flink.table.types.logical.RowType.of(RowType.java:290)
>     at 
> org.apache.flink.table.planner.calcite.FlinkTypeFactory$.toLogicalRowType(FlinkTypeFactory.scala:663)
>     at 
> org.apache.flink.table.planner.plan.nodes.physical.stream.StreamPhysicalOverAggregate.translateToExecNode(StreamPhysicalOverAggregate.scala:57)
>     at 
> org.apache.flink.table.planner.plan.nodes.exec.ExecNodeGraphGenerator.generate(ExecNodeGraphGenerator.java:74)
>     at 
> org.apache.flink.table.planner.plan.nodes.exec.ExecNodeGraphGenerator.generate(ExecNodeGraphGenerator.java:71)
>  {code}
>  
> I think we can add come logical in  FlinkLogicalOverAggregate  to avoid 
> duplicate names of  output rowType. 
>  
>  
>  



--
This message was sent by Atlassian Jira
(v8.20.7#820007)

Reply via email to