Hi Jincheng,

Thanks for adding the public interfaces! I think that it's a very good
start. There are a few points that we need to have more discussions.

   - TableAggregateFunction - this is a very complex beast, definitely the
   most complex user defined objects we introduced so far. I think there are
   quite some interesting questions here. For example, do we allow
   multi-staged TableAggregate in this case? What is the semantics of emit? Is
   it amendments to the previous output, or replacing it? I think that this
   subject itself is worth a discussion to make sure we get the details right.
   - GroupedTable.agg - does the group keys automatically appear in the
   output? how about the case of windowing aggregation?

Regards,
Xiaowei

On Tue, Nov 6, 2018 at 6:25 PM jincheng sun <sunjincheng...@gmail.com>
wrote:

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

Reply via email to