the Table API `limit` is confused

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

the Table API `limit` is confused

John Fang
Hi,

   In order to support  ORDER BY OFFSET FETCH, we add the Table API
`limit`. But the api is confused. For example: "table.limit(3)" means
unlimited number of records beginning with the 4th record. In fact I prefer
"table.limit(3)" means taking the first `3` rows.
  So I prefer to use the API "offset().fetch()" support ORDER BY OFFSET
FETCH. Of course, the "table.limit(n)" equivalent with the
"table.offset(0).fetch(n)",

--

Regards

John Fang
Reply | Threaded
Open this post in threaded view
|

Re: the Table API `limit` is confused

John Fang
Now the Table don't support the limit operator without  orderBy operator.

On Thu, Oct 12, 2017 at 2:30 PM, John Fang <[hidden email]> wrote:

> Hi,
>
>    In order to support  ORDER BY OFFSET FETCH, we add the Table API
> `limit`. But the api is confused. For example: "table.limit(3)" means
> unlimited number of records beginning with the 4th record. In fact I prefer
> "table.limit(3)" means taking the first `3` rows.
>   So I prefer to use the API "offset().fetch()" support ORDER BY OFFSET
> FETCH. Of course, the "table.limit(n)" equivalent with the
> "table.offset(0).fetch(n)",
>
> --
>
> Regards
>
> John Fang
>
>
>



--

Regards

John Fang
Reply | Threaded
Open this post in threaded view
|

Re: the Table API `limit` is confused

Fabian Hueske-2
Hi John,

I agree that the Table.limit(offset) method is confusing and that the
semantics should rather be to specify the fetch parameter than the offset
parameter.
However, we can not easily change the behavior of an existing function. The
only way to evolve the functionality is to add new methods and deprecated
the old limit() method.

I also think that it would be better to have separate methods for offset()
and fetch().
We can even implement it in a way that all these combinations are valid:

table.orderBy().offset()
table.orderBy().fetch()
table.orderBy().offset().fetch()
table.orderBy().fetch().offset()

I have created FLINK-7821 to add offset() and fetch() and deprecate
limit(offset) and limit(offset, fetch).
I'll also create a PR for the issue very soon; PR reviews are welcome.

The requirement for orderBy() exists to ensure that queries are
deterministic.

Best, Fabian


2017-10-12 8:39 GMT+02:00 John Fang <[hidden email]>:

> Now the Table don't support the limit operator without  orderBy operator.
>
> On Thu, Oct 12, 2017 at 2:30 PM, John Fang <[hidden email]> wrote:
>
> > Hi,
> >
> >    In order to support  ORDER BY OFFSET FETCH, we add the Table API
> > `limit`. But the api is confused. For example: "table.limit(3)" means
> > unlimited number of records beginning with the 4th record. In fact I
> prefer
> > "table.limit(3)" means taking the first `3` rows.
> >   So I prefer to use the API "offset().fetch()" support ORDER BY OFFSET
> > FETCH. Of course, the "table.limit(n)" equivalent with the
> > "table.offset(0).fetch(n)",
> >
> > --
> >
> > Regards
> >
> > John Fang
> >
> >
> >
>
>
>
> --
>
> Regards
>
> John Fang
>
Reply | Threaded
Open this post in threaded view
|

Re: the Table API `limit` is confused

John Fang
Hi Fabian,
   Thank you for your replay.

On Thu, Oct 12, 2017 at 4:18 PM, Fabian Hueske <[hidden email]> wrote:

> Hi John,
>
> I agree that the Table.limit(offset) method is confusing and that the
> semantics should rather be to specify the fetch parameter than the offset
> parameter.
> However, we can not easily change the behavior of an existing function. The
> only way to evolve the functionality is to add new methods and deprecated
> the old limit() method.
>
> I also think that it would be better to have separate methods for offset()
> and fetch().
> We can even implement it in a way that all these combinations are valid:
>
> table.orderBy().offset()
> table.orderBy().fetch()
> table.orderBy().offset().fetch()
> table.orderBy().fetch().offset()
>
> I have created FLINK-7821 to add offset() and fetch() and deprecate
> limit(offset) and limit(offset, fetch).
> I'll also create a PR for the issue very soon; PR reviews are welcome.
>
> The requirement for orderBy() exists to ensure that queries are
> deterministic.
>
> Best, Fabian
>
>
> 2017-10-12 8:39 GMT+02:00 John Fang <[hidden email]>:
>
> > Now the Table don't support the limit operator without  orderBy operator.
> >
> > On Thu, Oct 12, 2017 at 2:30 PM, John Fang <[hidden email]> wrote:
> >
> > > Hi,
> > >
> > >    In order to support  ORDER BY OFFSET FETCH, we add the Table API
> > > `limit`. But the api is confused. For example: "table.limit(3)" means
> > > unlimited number of records beginning with the 4th record. In fact I
> > prefer
> > > "table.limit(3)" means taking the first `3` rows.
> > >   So I prefer to use the API "offset().fetch()" support ORDER BY OFFSET
> > > FETCH. Of course, the "table.limit(n)" equivalent with the
> > > "table.offset(0).fetch(n)",
> > >
> > > --
> > >
> > > Regards
> > >
> > > John Fang
> > >
> > >
> > >
> >
> >
> >
> > --
> >
> > Regards
> >
> > John Fang
> >
>



--

Regards

John Fang