Hiveql中具有聚合/分析功能的子查询

时间:2017-10-29 00:46:27

标签: sql hiveql

我想知道这是否合法:

INSERT OVERWRITE TABLE my_table
  SELECT field_1, field_2, 
     (SELECT STDDEV(field_from_my_table) 
      FROM my_table 
      WHERE field_from_my_table !=0)
  FROM my_table
  GROUP BY field_1;

到目前为止,我还没有能够让它发挥作用。根据我的尝试,我得到了无数的错误,大多是随机错误,表明非法语法。例如

cannot recognize input near 'SELECT' 'STDDEV' 

然而,这确实有效:

 INSERT OVERWRITE TABLE my_table
  SELECT field_1, field_2, STDDEV(field_from_my_table) 
  FROM my_table
  GROUP BY field_1;

所以基本上,我只是改变了我喜欢使用STDDEV的方式 - 在有效的版本和没用的版本之间没有其他任何不同。

如果不可能这样做,为什么不呢?如果是,我需要进行哪些更正?任何帮助将不胜感激。谢谢。

编辑:可能是此Nested queries in Hive SQL,此Hive column as a subquery select或此Does Hive support Select in Select?

EDIT2:所以我认为更简单的问题可能是: 这很有效,

 INSERT OVERWRITE TABLE my_table
  SELECT field_1, field_2, STDDEV(field_from_my_table) 
  FROM my_table
  GROUP BY field_1;

这可行(作为交互式查询)

SELECT field_1, STDDEV(field_from_my_table) 
FROM my_table
WHERE field_from_my_table !=0
GROUP BY field_1;

如何将两者合并为一张表(新旧)?

1 个答案:

答案 0 :(得分:0)

所以,简短的回答是我做了一个解决方法。由于我能够将更详细的查询作为交互式查询运行,因此我决定尝试运行所述查询并插入表中。好吧,你得到同样的错误。但是,事实证明,您可以运行查询,将其写入本地文件,然后从本地加载到新表中。这样就不得不在查询中编写一个子查询,我认为在这个特定实例中Hive不支持(或者在你不能成功写一个像我这样的情况下)。

即将推出的确切解决方案......