2017-10-29 94 views
0

合计/解析功能我不知道这是否是合法的:子查询与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; 

如何将两者合并为一个表(新的还是旧的)?

+0

你说的工作没有,因为它有多个语法错误。你也应该说什么“不起作用”的意思。你有错误吗?它会返回意外的结果吗? –

+0

对不起,这是在蜂巢。我忘了分号吗? –

+1

语法错误:'field 2'。 'GROUP BY,','选择field1,field'/group by field1'。你的代码也缺少'insert'的列表(这是可选的,但应该是最佳实践)。 –

回答

0

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

即将推出的具体解决方案...