Hive:查询表,列名包含关键字和空格

Posted

技术标签:

【中文标题】Hive:查询表,列名包含关键字和空格【英文标题】:Hive : Query Table with column name having a keyword and a space 【发布时间】:2018-02-18 21:09:37 【问题描述】:

我有一个表格测试。它有一个列'abc group' 我想咨询 选择abc group,sum(someothercolumn) 来自abc group的测试组

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

【问题讨论】:

试试双引号。这通常适用于大多数数据库:"abc group". 在这种情况下,如果我在 select 语句中使用双引号,它只会返回“abc group”......但不返回值......如果只有空格但没有关键字,则使用刻度有效列名....因为这里有两个都在创建 isste 【参考方案1】:

在 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 列具有相同值的两组。

【讨论】:

scenario1 和scenario2 不能解决我的问题......所以 abc 组列有许多不同的值......我需要为它们中的每一个提供相应的总和......仅使用刻度失败跨度> 1.2.1 .....这存在于我正在使用的 hdinsight 集群(3.6)中 看起来像 hdinsight 中的错误,因为我已经尝试了有关 HDP-2.5 和 Hive 1.2.1 的所有 hive 查询。请就此问题联系 hdinsight 支持..

以上是关于Hive:查询表,列名包含关键字和空格的主要内容,如果未能解决你的问题,请参考以下文章

hive中关键字作为列名的方法

hive查询结果显示列名且不包含表明

SQL中的一些关键字用法

hive外部表分区

Sql 语句。获取指定表的列名

数据库查询包含于最好用啥符号