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:查询表,列名包含关键字和空格的主要内容,如果未能解决你的问题,请参考以下文章