Hive:查询表,列名具有关键字和空格

时间:2018-02-18 21:09:37

标签: hive hiveql

我有桌面测试。它有一个专栏' abc group' 我想要一个查询 选择abc group,sum(someothercolumn) 来自abc group

的测试组

即使使用反引号(`),查询也会失败。 hive开始将列名称中的组视为组关键字

1 个答案:

答案 0 :(得分:0)

还在group by子句中包含反引号(`)

我通过重新创建您的方案尝试了以下查询

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   |
+------------+------+--+

<强> Scenario1: - 如果您将abc组列包含在单引号(或)双引号中,则hive会将它们视为字符串文字值,并且当我们与反引号(`)进行比较时结果会有所不同。

hive> select "abc group",sum(sal) sum from so group by "abc group";
+------------+------+--+
|    _c0     | sum  |
+------------+------+--+
| abc group  | 80   |
+------------+------+--+

所以在上面的例子中,我将双引号hc中的abc组视为字符串并按组进行,因此sum(sal) 80

<强> Scenario2: -
在此方案组中按abc group列,但在select中具有“abc group”值。

  hive> select "abc group",sum(sal) sum from so group by `abc group`;
    +------------+------+--+
    |    _c0     | sum  |
    +------------+------+--+
    | abc group  | 30   |
    | abc group  | 50   |
    +------------+------+--+

hive根据abc组列数据进行分组但是在select中我们没有提到带有反引号(`)的abc组但是我们保留了字符串值(“abc group”)。因此,对于_c0列具有相同值的两个组。