Hi, Thanks for the great design document! It answers my question regarding handling of retraction messages. Overall, I like the proposal. It is well scoped and the proposed changes are well described.
I left a question regarding the handling of time attributes for multi-column output functions. Thanks, Fabian Am Di., 6. Nov. 2018 um 12:16 Uhr schrieb Xiaowei Jiang <xiaow...@gmail.com >: > 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 > > >