Hiveql 中带有 aggregate/analytic 函数的子查询

subquery with aggregate/analytic function in 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, this Hive column as a subquery select, or this 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;

如何将两者合并为一个 table(新的或旧的)?

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

确切的解决方案即将跟进...