You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by tw...@apache.org on 2018/10/10 11:20:07 UTC
[flink] branch release-1.6 updated: [FLINK-10379][docs,
table] Fix TableFunction docs
This is an automated email from the ASF dual-hosted git repository.
twalthr pushed a commit to branch release-1.6
in repository https://gitbox.apache.org/repos/asf/flink.git
The following commit(s) were added to refs/heads/release-1.6 by this push:
new 2ee1609 [FLINK-10379][docs,table] Fix TableFunction docs
2ee1609 is described below
commit 2ee160965db9a3342ce3a6a1c159fc3cd82dfa54
Author: Piotr Nowojski <pi...@gmail.com>
AuthorDate: Mon Sep 24 16:19:44 2018 +0200
[FLINK-10379][docs,table] Fix TableFunction docs
Old syntax of joining with Table Functions in Java Table API:
```
// Register the function.
tableEnv.registerFunction("split", new Split("#"));
myTable.join("split(a) as (word, length)");
```
is no longer supported and this the reason why the documentation needed to be updated. Currently supported syntax is:
```
orders.join(new Table(tEnv, "split(a)");
```
This closes #6744.
---
docs/dev/table/sql.md | 2 +-
docs/dev/table/tableApi.md | 25 +++++++++++-----------
docs/dev/table/udfs.md | 8 ++++---
.../flink/table/functions/TableFunction.scala | 2 +-
4 files changed, 20 insertions(+), 17 deletions(-)
diff --git a/docs/dev/table/sql.md b/docs/dev/table/sql.md
index 98ee6de..33c9aed 100644
--- a/docs/dev/table/sql.md
+++ b/docs/dev/table/sql.md
@@ -478,7 +478,7 @@ FROM Orders CROSS JOIN UNNEST(tags) AS t (tag)
</tr>
<tr>
<td>
- <strong>Join with User Defined Table Functions (UDTF)</strong><br>
+ <strong>Join with Table Function</strong><br>
<span class="label label-primary">Batch</span> <span class="label label-primary">Streaming</span>
</td>
<td>
diff --git a/docs/dev/table/tableApi.md b/docs/dev/table/tableApi.md
index 961138f..5eeb86b 100644
--- a/docs/dev/table/tableApi.md
+++ b/docs/dev/table/tableApi.md
@@ -552,28 +552,28 @@ Table result = left.join(right)
</tr>
<tr>
<td>
- <strong>TableFunction Inner Join</strong><br>
+ <strong>Inner Join with Table Function</strong><br>
<span class="label label-primary">Batch</span> <span class="label label-primary">Streaming</span>
</td>
<td>
<p>Joins a table with a the results of a table function. Each row of the left (outer) table is joined with all rows produced by the corresponding call of the table function. A row of the left (outer) table is dropped, if its table function call returns an empty result.
</p>
{% highlight java %}
-// register function
+// register User-Defined Table Function
TableFunction<String> split = new MySplitUDTF();
-tEnv.registerFunction("split", split);
+tableEnv.registerFunction("split", split);
// join
Table orders = tableEnv.scan("Orders");
Table result = orders
- .join(new Table(tEnv, "split(c)").as("s", "t", "v"))
+ .join(new Table(tableEnv, "split(c)").as("s", "t", "v"))
.select("a, b, s, t, v");
{% endhighlight %}
</td>
</tr>
<tr>
<td>
- <strong>TableFunction Left Outer Join</strong><br>
+ <strong>Left Outer Join with Table Function</strong><br>
<span class="label label-primary">Batch</span> <span class="label label-primary">Streaming</span>
</td>
<td>
@@ -581,14 +581,14 @@ Table result = orders
<p><b>Note:</b> Currently, the predicate of a table function left outer join can only be empty or literal <code>true</code>.</p>
</p>
{% highlight java %}
-// register function
+// register User-Defined Table Function
TableFunction<String> split = new MySplitUDTF();
-tEnv.registerFunction("split", split);
+tableEnv.registerFunction("split", split);
// join
Table orders = tableEnv.scan("Orders");
Table result = orders
- .leftOuterJoin(new Table(tEnv, "split(c)").as("s", "t", "v"))
+ .leftOuterJoin(new Table(tableEnv, "split(c)").as("s", "t", "v"))
.select("a, b, s, t, v");
{% endhighlight %}
</td>
@@ -654,6 +654,7 @@ val fullOuterResult = left.fullOuterJoin(right, 'a === 'd).select('a, 'b, 'e)
<p><b>Note:</b> Time-windowed joins are a subset of regular joins that can be processed in a streaming fashion.</p>
<p>A time-windowed join requires at least one equi-join predicate and a join condition that bounds the time on both sides. Such a condition can be defined by two appropriate range predicates (<code><, <=, >=, ></code>) or a single equality predicate that compares <a href="streaming.html#time-attributes">time attributes</a> of the same type (i.e., processing time or event time) of both input tables.</p>
+
<p>For example, the following predicates are valid window join conditions:</p>
<ul>
@@ -673,14 +674,14 @@ val result = left.join(right)
</tr>
<tr>
<td>
- <strong>TableFunction Inner Join</strong><br>
+ <strong>Inner Join with Table Function</strong><br>
<span class="label label-primary">Batch</span> <span class="label label-primary">Streaming</span>
</td>
<td>
<p>Joins a table with a the results of a table function. Each row of the left (outer) table is joined with all rows produced by the corresponding call of the table function. A row of the left (outer) table is dropped, if its table function call returns an empty result.
</p>
{% highlight scala %}
-// instantiate function
+// instantiate User-Defined Table Function
val split: TableFunction[_] = new MySplitUDTF()
// join
@@ -692,14 +693,14 @@ val result: Table = table
</tr>
<tr>
<td>
- <strong>TableFunction Left Outer Join</strong><br>
+ <strong>Left Outer Join with Table Function</strong><br>
<span class="label label-primary">Batch</span> <span class="label label-primary">Streaming</span></td>
<td>
<p>Joins a table with a the results of a table function. Each row of the left (outer) table is joined with all rows produced by the corresponding call of the table function. If a table function call returns an empty result, the corresponding outer row is preserved and the result padded with null values.
<p><b>Note:</b> Currently, the predicate of a table function left outer join can only be empty or literal <code>true</code>.</p>
</p>
{% highlight scala %}
-// instantiate function
+// instantiate User-Defined Table Function
val split: TableFunction[_] = new MySplitUDTF()
// join
diff --git a/docs/dev/table/udfs.md b/docs/dev/table/udfs.md
index 7dce800..20bf49d 100644
--- a/docs/dev/table/udfs.md
+++ b/docs/dev/table/udfs.md
@@ -141,7 +141,7 @@ Similar to a user-defined scalar function, a user-defined table function takes z
In order to define a table function one has to extend the base class `TableFunction` in `org.apache.flink.table.functions` and implement (one or more) evaluation methods. The behavior of a table function is determined by its evaluation methods. An evaluation method must be declared `public` and named `eval`. The `TableFunction` can be overloaded by implementing multiple methods named `eval`. The parameter types of the evaluation methods determine all valid parameters of the table functio [...]
-In the Table API, a table function is used with `.join(Expression)` or `.leftOuterJoin(Expression)` for Scala users and `.join(String)` or `.leftOuterJoin(String)` for Java users. The `join` operator (cross) joins each row from the outer table (table on the left of the operator) with all rows produced by the table-valued function (which is on the right side of the operator). The `leftOuterJoin` operator joins each row from the outer table (table on the left of the operator) with all rows [...]
+In the Table API, a table function is used with `.join(Table)` or `.leftOuterJoin(Table)`. The `join` operator (cross) joins each row from the outer table (table on the left of the operator) with all rows produced by the table-valued function (which is on the right side of the operator). The `leftOuterJoin` operator joins each row from the outer table (table on the left of the operator) with all rows produced by the table-valued function (which is on the right side of the operator) and p [...]
The following example shows how to define table-valued function, register it in the TableEnvironment, and call it in a query. Note that you can configure your table function via a constructor before it is registered:
@@ -171,8 +171,10 @@ Table myTable = ... // table schema: [a: String]
tableEnv.registerFunction("split", new Split("#"));
// Use the table function in the Java Table API. "as" specifies the field names of the table.
-myTable.join("split(a) as (word, length)").select("a, word, length");
-myTable.leftOuterJoin("split(a) as (word, length)").select("a, word, length");
+myTable.join(new Table(tableEnv, "split(a) as (word, length)"))
+ .select("a, word, length");
+myTable.leftOuterJoin(new Table(tableEnv, "split(a) as (word, length)"))
+ .select("a, word, length");
// Use the table function in SQL with LATERAL and TABLE keywords.
// CROSS JOIN a table function (equivalent to "join" in Table API).
diff --git a/flink-libraries/flink-table/src/main/scala/org/apache/flink/table/functions/TableFunction.scala b/flink-libraries/flink-table/src/main/scala/org/apache/flink/table/functions/TableFunction.scala
index d80ec47..489b0e6 100644
--- a/flink-libraries/flink-table/src/main/scala/org/apache/flink/table/functions/TableFunction.scala
+++ b/flink-libraries/flink-table/src/main/scala/org/apache/flink/table/functions/TableFunction.scala
@@ -69,7 +69,7 @@ import org.apache.flink.util.Collector
*
* // for Java users
* tEnv.registerFunction("split", new Split()) // register table function first
- * table.join("split(a) as (s)").select("a, s")
+ * table.join(new Table(tEnv, "split(a) as (s)")).select("a, s")
*
* // for SQL users
* tEnv.registerFunction("split", new Split()) // register table function first