Hive必须使用UNION ALL

时间:2016-05-31 06:42:07

标签: sql hadoop hive

我对Hive UNION ALL规范有疑问。

此查询是有效的Hive查询。

SELECT
  1 as id,
  'Tom' as name

此作业按预期返回正确的一个记录结果。

+----------+----------------+
|    id    |      name      |
+----------+----------------+
|     1    |      Tom       |
+----------+----------------+

但是当这个查询与UNION ALL一起提交时,我正面临一个问题。

SELECT
  id,
  name
FROM
  members
UNION ALL
SELECT
  1 as id,
  'Tom' as name,

此SQL会产生Error: java.lang.IllegalArgumentException: Can not create a Path from an empty string异常。我发现UNION ALL的所有子查询都必须包含FROM的实际数据源。例如,上面的查询可以在重写后按预期工作。

SELECT
  id,
  name
FROM
  members
UNION ALL
SELECT
  1 as id,
 'Tom' as name
FROM (
  SELECT COUNT(1) FROM members
) t

这是SQL或Hive的规范吗?我们不能在没有FROM子句的情况下运行查询吗?或者这是Hive本身的错误? Hive I使用的版本是Hadoop 2.4的0.13。

1 个答案:

答案 0 :(得分:1)

所有SELECT语句都需要FROM条款。

即使您的第一个查询SELECT 1 as id, 'Tom' as name也会出现错误,如下所示:enter image description here

然而,如果我们运行SELECT 1 as id, 'Tom' as name FROM table1,其中table1是我的数据库中的表,那么我们得到如下结果: enter image description here

因此,上述两个查询证明所有FROM语句中都需要SELECT子句。

无关紧要UNION ALL或其他。

这是Hive数据库的功能。

我希望这可以帮助你!!!

相关问题