[
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)