You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@flink.apache.org by "ASF GitHub Bot (JIRA)" <ji...@apache.org> on 2016/07/28 09:48:20 UTC

[jira] [Commented] (FLINK-4270) 'as' in front of join does not work

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

ASF GitHub Bot commented on FLINK-4270:
---------------------------------------

GitHub user wuchong opened a pull request:

    https://github.com/apache/flink/pull/2306

    [FLINK-4270] [table] fix 'as' in front of join does not work

    Thanks for contributing to Apache Flink. Before you open your pull request, please take the following check list into consideration.
    If your changes take all of the items into account, feel free to open your pull request. For more information and/or questions please refer to the [How To Contribute guide](http://flink.apache.org/how-to-contribute.html).
    In addition to going through the list, please provide a meaningful description of your changes.
    
    - [x] General
      - The pull request references the related JIRA issue ("[FLINK-XXX] Jira title text")
      - The pull request addresses only one issue
      - Each commit in the PR has a meaningful commit message (including the JIRA id)
    
    - [x] Documentation
      - Documentation has been added for new functionality
      - Old documentation affected by the pull request has been updated
      - JavaDoc for public methods has been added
    
    - [x] Tests & Build
      - Functionality added by the pull request is covered by tests
      - `mvn clean verify` has been executed successfully locally or a Travis build has passed
    
    
    The `Project` has a wrong way to construct RelNode. It pushes a new `LogicalProject` to the stack, but not pop the previous RelNode. It has problem when Join two tables. 
    
    When join two tables (with all fields renamed), the stack will look like this before join:
    
    ```
    LogicalProject1
    TableScan1
    LogicalProject0
    TableScan0
    ``` 
    
    After that, join will use  `LogicalProject1` and `TableScan1` which are the same table to create `LogicalJoin`. Then the exception throws.
    
    The correct way to do this is make sure the previous TableScan removed from the stack before we push a new LogicalProject. 
    
    ```
    LogicalProject1
    LogicalProject0
    ``` 
    


You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/wuchong/flink FLINK-4270

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/flink/pull/2306.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #2306
    
----
commit 20412c044103158dabd3de1f7a056018231f9275
Author: Jark Wu <wu...@alibaba-inc.com>
Date:   2016-07-28T09:33:53Z

    [FLINK-4270] [table] fix 'as' in front of join does not work

----


> 'as' in front of join does not work
> -----------------------------------
>
>                 Key: FLINK-4270
>                 URL: https://issues.apache.org/jira/browse/FLINK-4270
>             Project: Flink
>          Issue Type: Bug
>          Components: Table API & SQL
>            Reporter: Timo Walther
>            Assignee: Jark Wu
>
> The following example passes the validation but fails during toRexNode phase:
> {code}
>     val customers = getCustomerDataSet(env).toTable(tEnv)
>       .as('id, 'mktSegment)
>     val orders = getOrdersDataSet(env).toTable(tEnv)
>       .as('orderId, 'custId, 'orderDate, 'shipPrio)
>     val items =
>       orders.join(customers)
>         .where('custId === 'id)
>     items.printOnTaskManager("ok")
> {code}
> Leads to
> {code}
> Exception in thread "main" java.lang.IllegalArgumentException: field [custId] not found; input fields are: [id, mktSegment, id0, mktSegment0]
> 	at org.apache.calcite.tools.RelBuilder.field(RelBuilder.java:299)
> 	at org.apache.calcite.tools.RelBuilder.field(RelBuilder.java:284)
> 	at org.apache.flink.api.table.expressions.ResolvedFieldReference.toRexNode(fieldExpression.scala:59)
> 	at org.apache.flink.api.table.expressions.BinaryComparison$$anonfun$toRexNode$1.apply(comparison.scala:34)
> 	at org.apache.flink.api.table.expressions.BinaryComparison$$anonfun$toRexNode$1.apply(comparison.scala:34)
> 	at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
> 	at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
> 	at scala.collection.immutable.List.foreach(List.scala:318)
> 	at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
> 	at scala.collection.AbstractTraversable.map(Traversable.scala:105)
> 	at org.apache.flink.api.table.expressions.BinaryComparison.toRexNode(comparison.scala:34)
> 	at org.apache.flink.api.table.plan.logical.Filter.construct(operators.scala:158)
> 	at org.apache.flink.api.table.plan.logical.LogicalNode.toRelNode(LogicalNode.scala:78)
> 	at org.apache.flink.api.table.Table.getRelNode(table.scala:66)
> 	at org.apache.flink.api.table.BatchTableEnvironment.translate(BatchTableEnvironment.scala:243)
> 	at org.apache.flink.api.scala.table.BatchTableEnvironment.toDataSet(BatchTableEnvironment.scala:139)
> 	at org.apache.flink.api.scala.table.package$.table2RowDataSet(package.scala:77)
> 	at org.apache.flink.examples.scala.TPCHQuery3Table$.main(TPCHQuery3Table.scala:119)
> 	at org.apache.flink.examples.scala.TPCHQuery3Table.main(TPCHQuery3Table.scala)
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)