[ 
https://issues.apache.org/jira/browse/FLINK-5386?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15826006#comment-15826006
 ] 

Fabian Hueske commented on FLINK-5386:
--------------------------------------

Yes, that's what I would propose.

{{GroupedTable}} has an optional window attribute (optional because you can 
also say {{tab.groupBy().select()}} which results in a grouped non-windowed 
aggregation).
When we later add row windows (SQL OVER-style) to the Table API, we add a 
{{select()}} method to {{WindowedTable}}.

I think there is one open question. How do we handle the case if  
{{WindowedTable.groupBy()}} does not reference a window alias. 
I see three options:

1. Fail and ask for a window alias
2. Accept and use the window defined in the {{WindowTable}} (this makes the 
window alias optional)
3. Accept and compute a non-windowed grouped aggregate

I think failing might be the best approach (together with enforcing window 
aliases in {{window()}}). 
This would be the most explicit approach. The other two cases might result in 
behavior which is unexpected by users.

What do you think [~sunjincheng121] and [~wshaox...@gmail.com]?


> Refactoring Window Clause
> -------------------------
>
>                 Key: FLINK-5386
>                 URL: https://issues.apache.org/jira/browse/FLINK-5386
>             Project: Flink
>          Issue Type: Sub-task
>          Components: Table API & SQL
>            Reporter: sunjincheng
>            Assignee: sunjincheng
>
> Similar to the SQL, window clause is defined "as" a symbol which is 
> explicitly used in groupby/over. We are proposing to refactor the way to 
> write groupby+window tableAPI as follows: 
> {code}
> val windowedTable = table
>  .window(Slide over 10.milli every 5.milli as 'w1)
>  .window(Tumble over 5.milli  as 'w2)
>  .groupBy('w1, 'key)
>  .select('string, 'int.count as 'count, 'w1.start)
>  .groupBy( 'w2, 'key)
>  .select('string, 'count.sum as sum2)
>  .window(Tumble over 5.milli  as 'w3)
>  .groupBy( 'w3) // windowAll
>  .select('sum2, 'w3.start, 'w3.end)
> {code}
> In this way, we can remove both GroupWindowedTable and the window() method in 
> GroupedTable which makes the API a bit clean. In addition, for row-window, we 
> anyway need to define window clause as a symbol. This change will make the 
> API of window and row-window consistent, example for row-window:
> {code}
>   .window(RowXXXWindow as ‘x, RowYYYWindow as ‘y)
>   .select(‘a, ‘b.count over ‘x as ‘xcnt, ‘c.count over ‘y as ‘ycnt, ‘x.start, 
> ‘x.end)
> {code}
> What do you think? [~fhueske] [~twalthr]



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to