Hi, Xiaowei,
Thanks for bring up the discuss of Table API Enhancement Outline !
I quickly looked at the overall content, these are good expressions of our
offline discussions. But from the points of my view, we should add the
usage of public interfaces that we will introduce in this propose. So, I
added the following usage description of interface and operators in
google doc:
1. Map Operator
Map operator is a new operator of Table, Map operator can apply a
scalar function, and can return multi-column. The usage as follows:
val res = tab
.map(fun: ScalarFunction).as(‘a, ‘b, ‘c)
.select(‘a, ‘c)
2. FlatMap Operator
FaltMap operator is a new operator of Table, FlatMap operator can apply
a table function, and can return multi-row. The usage as follows:
val res = tab
.flatMap(fun: TableFunction).as(‘a, ‘b, ‘c)
.select(‘a, ‘c)
3. Agg Operator
Agg operator is a new operator of Table/GroupedTable, Agg operator can
apply a aggregate function, and can return multi-column. The usage as
follows:
val res = tab
.groupBy(‘a) // leave groupBy-Clause out to define global aggregates
.agg(fun: AggregateFunction).as(‘a, ‘b, ‘c)
.select(‘a, ‘c)
4. FlatAgg Operator
FlatAgg operator is a new operator of Table/GroupedTable, FaltAgg
operator can apply a table aggregate function, and can return multi-row.
The usage as follows:
val res = tab
.groupBy(‘a) // leave groupBy-Clause out to define global table
aggregates
.flatAgg(fun: TableAggregateFunction).as(‘a, ‘b, ‘c)
.select(‘a, ‘c)
5. TableAggregateFunction
The behavior of table aggregates is most like GroupReduceFunction did,
which computed for a group of elements, and output a group of elements.
The TableAggregateFunction can be applied on GroupedTable.flatAgg() . The
interface of TableAggregateFunction has a lot of content, so I don't copy
it here, Please look at the detail in google doc:
https://docs.google.com/document/d/19rVeyqveGtV33UZt72GV-DP2rLyNlfs0QNGG0xWjayY/edit
I will be very appreciate to anyone for reviewing and commenting.
Best,
Jincheng