分组查询时,select的字段是否一定要都在group by中吗?

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

分组查询时,select的字段是否一定要都在group by中吗?

bulterman
Hi ALL,
    我用Flink SQL 建了一张表,主键也设置了,执行形如"select * from test_table group by 主键 " 会报Expression 'XXX' is not being group的错误,通常来说按主键group by的话不是可以确定唯一性的吗? 难道是因为建表语句中flink的主键约束模式只支持 NOT ENFROCED吗?  这里有点不太明白
Reply | Threaded
Open this post in threaded view
|

Re: 分组查询时,select的字段是否一定要都在group by中吗?

Leonard Xu
Hi, bulterman

你的分析是对的,group by pk的query是可以优化到筛选全部列的,这可以是个优化点,只是flink 现在还没有做, 和 Flink pk的 NOT ENFORCED 并没有关系,NOT NEOFRCED是说Flink不持有数据,不像数据库持有数据可以在读取时做校验。 个人感觉这是个小的优化点,如果很急需可以考虑在社区开个issue.


祝好,
Leonard Xu
 

> 在 2020年12月1日,13:40,bulterman <[hidden email]> 写道:
>
> Hi ALL,
>    我用Flink SQL 建了一张表,主键也设置了,执行形如"select * from test_table group by 主键 " 会报Expression 'XXX' is not being group的错误,通常来说按主键group by的话不是可以确定唯一性的吗? 难道是因为建表语句中flink的主键约束模式只支持 NOT ENFROCED吗?  这里有点不太明白

Reply | Threaded
Open this post in threaded view
|

Re: 分组查询时,select的字段是否一定要都在group by中吗?

nobleyd
但是如果都按照主键group by了,为什么还需要group by呢?直接select不就可以。

Leonard Xu <[hidden email]> 于2020年12月1日周二 下午2:35写道:

> Hi, bulterman
>
> 你的分析是对的,group by pk的query是可以优化到筛选全部列的,这可以是个优化点,只是flink 现在还没有做, 和 Flink pk的
> NOT ENFORCED 并没有关系,NOT NEOFRCED是说Flink不持有数据,不像数据库持有数据可以在读取时做校验。
> 个人感觉这是个小的优化点,如果很急需可以考虑在社区开个issue.
>
>
> 祝好,
> Leonard Xu
>
>
> > 在 2020年12月1日,13:40,bulterman <[hidden email]> 写道:
> >
> > Hi ALL,
> >    我用Flink SQL 建了一张表,主键也设置了,执行形如"select * from test_table group by 主键 "
> 会报Expression 'XXX' is not being group的错误,通常来说按主键group by的话不是可以确定唯一性的吗?
> 难道是因为建表语句中flink的主键约束模式只支持 NOT ENFROCED吗?  这里有点不太明白
>
>
Reply | Threaded
Open this post in threaded view
|

Re: 分组查询时,select的字段是否一定要都在group by中吗?

鑫 刘
In reply to this post by Leonard Xu
传统上 SQL 都会要求 select group 中 select 的列要么是统计列,要么是 group by ,列是定义结果集的,不是直接对应表字段(想一下如果 from 自一个结果集)。以前 MySQL 可以 group by pk only ,后来高版本也改掉了。

________________________________
From: Leonard Xu <[hidden email]>
Sent: Tuesday, December 1, 2020 6:34 AM
To: user-zh <[hidden email]>
Subject: Re: 分组查询时,select的字段是否一定要都在group by中吗?

Hi, bulterman

你的分析是对的,group by pk的query是可以优化到筛选全部列的,这可以是个优化点,只是flink 现在还没有做, 和 Flink pk的 NOT ENFORCED 并没有关系,NOT NEOFRCED是说Flink不持有数据,不像数据库持有数据可以在读取时做校验。 个人感觉这是个小的优化点,如果很急需可以考虑在社区开个issue.


祝好,
Leonard Xu


> 在 2020年12月1日,13:40,bulterman <[hidden email]> 写道:
>
> Hi ALL,
>    我用Flink SQL 建了一张表,主键也设置了,执行形如"select * from test_table group by 主键 " 会报Expression 'XXX' is not being group的错误,通常来说按主键group by的话不是可以确定唯一性的吗? 难道是因为建表语句中flink的主键约束模式只支持 NOT ENFROCED吗?  这里有点不太明白