Hive 在配置单元中的WHERE子句之后是否应用GROUPBY子句?

Hive 在配置单元中的WHERE子句之后是否应用GROUPBY子句?,hive,hiveql,Hive,Hiveql,假设我有以下SQL: select user_group, count(*) from table where user_group is not null group by user_group 进一步假设99%的数据具有空用户组 这将在GROUP BY之前丢弃null行,还是一个较差的减速机最终将丢弃99%的行 我希望是前者。这会更有意义 如果你说蜂巢版本会发生什么,你会得到额外的积分。我们正在使用0.11并迁移到0.13 如果您可以指向任何确认的文档,则可获得额外的积分。此查询将丢弃GR

假设我有以下SQL:

select user_group, count(*)
from table
where user_group is not null
group by user_group
进一步假设99%的数据具有空用户组

这将在GROUP BY之前丢弃null行,还是一个较差的减速机最终将丢弃99%的行

我希望是前者。这会更有意义

如果你说蜂巢版本会发生什么,你会得到额外的积分。我们正在使用0.11并迁移到0.13


如果您可以指向任何确认的文档,则可获得额外的积分。

此查询将丢弃GROUP BY操作之前带有NULL的行。 希望此链接有用:-

顺序

FROM & JOINs determine & filter rows
WHERE more filters on the rows
GROUP BY combines those rows into groups
HAVING filters groups
SELECT
ORDER BY arranges the remaining rows/groups
第一步总是FROM子句。在您的例子中,这是非常直接的,因为只有一个表,并且不需要担心任何复杂的联接。在带有联接的查询中,将在第一步中计算这些联接。连接被组装起来以决定检索哪些行,ON子句条件是决定从每个表中连接哪些行的标准。FROM子句的结果是中间结果。您可以将其视为一个临时表,由满足所有连接条件的组合行组成。(在您的情况下,临时表实际上并没有构建,因为优化器知道它可以直接访问您的表,而不必连接到任何其他表。)

下一步是WHERE子句。在带有WHERE子句的查询中,根据WHERE条件对中间结果中的每一行进行求值,并将其丢弃或保留。因此,在转到GROUPBY子句之前,null将被丢弃

接下来是分组讨论。如果存在GROUPBY子句,则中间结果现在被划分为多个组,GROUPBY子句中列中的每个值组合对应一个组

现在是HAVING子句。HAVING子句对每个组操作一次,并且删除组中不满足HAVING子句的所有行

接下来是选择。从GROUPBY和HAVING子句生成的新中间结果行中,SELECT现在组装它需要的列

最后,最后一步是orderby子句