我有一个查询,它使用union all来组合来自两个表的数据。 union all之前的第一个查询返回记录,但第二个查询不返回任何记录(仅此次运行的记录为零。我们可能有下一次加载的记录)。问题是,当我没有第二个查询中的任何记录时,hive会抛出Nullpointer异常。
select col1,col2,col3 from A
union all
select col1,col2,col3 from B
我在A表中有记录。但是,B表中的记录数可能因每个负载而异。当B表中有记录时,查询工作正常。
我知道这是一个事实,这是一个错误,直到版本0.12。但是我使用的是版本0.14。任何想法可能是根本原因。
注意:我的B表已分区。当我删除分区时,我没有遇到任何问题。但需要分区。
答案 0 :(得分:0)
这可能会迟到但你是否尝试过另一种方式?
select col1,col2,col3 from B
union all
select col1,col2,col3 from A
我有完全相同的问题。与空集合的联盟给出了NPE。但空集联合一些非空集似乎对我来说很好。这可能不是解决此问题的最佳方法,而是在下一版本的hive中修复此问题之前的解决方法。
答案 1 :(得分:0)
似乎将Hive引擎更改为MapReduce会解决此问题。只需在查询之前使用 set hive.execution.engine = mr; 。这对Hive 1.1有用。
另外,由于关于这个问题的互联网上有几个帖子,这里有一些东西没有为我解决:
用一个大的SELECT围绕UNION ALL语句(也无论你是否将表'foo'或'AS foo'别名): SELECT * FROM(从A中选择col1,col2,col3 联合所有 从B中选择col1,col2,col3 )foo
答案 2 :(得分:0)
在配置单元版本为hive-2.3.7的情况下,我也遇到了同样的问题。它仅使用MR引擎即可工作
set hive.execution.engine=mr;