在 group by 子句中也包含 backticks(`)。
我通过重新创建您的场景尝试了以下查询
hive> select * from so;
+------------+------+--+
| abc group | sal |
+------------+------+--+
| abc | 10 |
| def | 20 |
| abc | 20 |
| def | 30 |
+------------+------+--+
现在我正在尝试在 abc group 上进行分组
列和 sum(sal)
hive> select `abc group`,sum(sal) sum from so group by `abc group`;
+------------+------+--+
| abc group | sum |
+------------+------+--+
| abc | 30 |
| def | 50 |
+------------+------+--+
场景 1:-
如果您将您的 abc 组列括在 单(或)双引号中,那么 hive 将它们视为字符串文字值,当我们与反引号(`)进行比较时,结果会有所不同。
hive> select "abc group",sum(sal) sum from so group by "abc group";
+------------+------+--+
| _c0 | sum |
+------------+------+--+
| abc group | 80 |
+------------+------+--+
所以在上面的例子中,我用双引号将 abc 组括起来,将 hive 视为字符串并进行分组,因此 sum(sal) 为 80。
场景 2:-
在此方案中,按 abc 组列分组,但选择具有“abc 组”值。
hive> select "abc group",sum(sal) sum from so group by `abc group`;
+------------+------+--+
| _c0 | sum |
+------------+------+--+
| abc group | 30 |
| abc group | 50 |
+------------+------+--+
hive 根据 abc 组列数据进行分组,但在选择中我们没有提到带有 backticks(`) 的 abc 组,但我们在其中保留了字符串 value("abc group")。所以对于 _c0 列具有相同值的两组。