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

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

Github user godfreyhe commented on a diff in the pull request:

    https://github.com/apache/flink/pull/3520#discussion_r106149747
  
    --- Diff: 
flink-libraries/flink-table/src/main/scala/org/apache/flink/table/sources/FilterableTableSource.scala
 ---
    @@ -34,14 +34,24 @@ trait FilterableTableSource {
     
       /**
         * Check and pick all predicates this table source can support. The 
passed in predicates
    -    * have been translated in conjunctive form, and table source and only 
pick those predicates
    -    * that it supports. All unsupported predicates should be give back to 
the framework to do
    -    * further filtering.
    +    * have been translated in conjunctive form, and table source can only 
pick those predicates
    +    * that it supports.
    +    * <p>
    +    * After trying to push predicates down, we should return a new 
[[FilterableTableSource]]
    +    * instance which holds all pushed down predicates. Even if we actually 
pushed nothing down,
    +    * it is recommended that we still return a new 
[[FilterableTableSource]] instance since we will
    +    * mark the returned instance as filter push down has been tried. Also 
we need to return all
    +    * unsupported predicates back to the framework to do further filtering.
    +    * <p>
    +    * We also should note to not changing the form of the predicates 
passed in. It has been
    +    * organized in CNF conjunctive form, and we should only take or leave 
each element in the
    +    * array. Don't try to reorganize the predicates if you are absolutely 
confident with that.
         *
         * @param predicate An array contains conjunctive predicates.
    -    * @return An array contains all unsupported predicates.
    +    * @return A new cloned instance of [[FilterableTableSource]] as well 
as n array of Expression
    +    *         which contains all unsupported predicates.
         */
    -  def applyPredicate(predicate: Array[Expression]): Array[Expression]
    +  def applyPredicate(predicate: Array[Expression]): 
(FilterableTableSource[_], Array[Expression])
    --- End diff --
    
    return `FilterableTableSource[T]` instead of `FilterableTableSource[_]`, 
otherwise in java, table source instance must be cast to 
`FilterableTableSource<?>`


> Add FilterableTableSource interface and translation rule
> --------------------------------------------------------
>
>                 Key: FLINK-3849
>                 URL: https://issues.apache.org/jira/browse/FLINK-3849
>             Project: Flink
>          Issue Type: New Feature
>          Components: Table API & SQL
>            Reporter: Fabian Hueske
>            Assignee: Kurt Young
>
> Add a {{FilterableTableSource}} interface for {{TableSource}} implementations 
> which support filter push-down.
> The interface could look as follows
> {code}
> def trait FilterableTableSource {
>   // returns unsupported predicate expression
>   def setPredicate(predicate: Expression): Expression
> }
> {code}
> In addition we need Calcite rules to push a predicate (or parts of it) into a 
> TableScan that refers to a {{FilterableTableSource}}. We might need to tweak 
> the cost model as well to push the optimizer in the right direction.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to