1

在使用 Spark SQL 使用 WSO2 DAS 执行批处理分析时,尝试执行以下查询。表“First”、“Middle”和“Third”需要合并并写入表“All_three”。

INSERT OVERWRITE TABLE All_three 
SELECT SYMBOL, VOLUME FROM First 
UNION 
SELECT SYMBOL, VOLUME FROM Middle 
UNION 
SELECT SYMBOL, VOLUME FROM Third;

执行此查询时,WSO2 DAS 上显示以下错误:

ERROR: [1.79] failure: ``limit'' expected but `union' found INSERT OVERWRITE TABLE X1234_All_three SELECT SYMBOL, VOLUME FROM X1234_First UNION SELECT SYMBOL, VOLUME FROM X1234_Middle UNION SELECT SYMBOL, VOLUME FROM X1234_Third ^ 

据我所知,将 LIMIT 与 UNION 一起使用并不是必需的。也尝试将 SELECT 查询括在括号中,但没有成功。我在这里做错了什么?先感谢您!

4

2 回答 2

1

我遇到过同样的问题。

请确保每行末尾都有一个空格。

原因是它没有将 \n 视为 SSMS 或其他查询编辑器之类的空格。

因此它会读取您的查询而不使用空格。因此,它读起来像 SELECT * FROM FirstUNION 而不是 SELECT * FROM First UNION

我的问题已解决,希望对您也有帮助。

于 2016-04-12T10:22:06.573 回答
0

您在此处提到的查询存在问题。请按以下方式更改查询。

INSERT OVERWRITE TABLE All_three select * from (SELECT SYMBOL, VOLUME FROM First UNION SELECT SYMBOL, VOLUME FROM Middle UNION SELECT SYMBOL, VOLUME FROM Third ) temp;

实际上,我们在这里所做的是将联合结果包装到名为temp的临时数据元素中,然后从中选择所有内容。Spark-SQL 解析器仅在插入查询中采用单个选择元素,并且在选择查询结束时它需要一个限制(如果可用)。因此,您需要将后续的 select 语句包装到一个 select 元素中。希望这能解决您的问题。

于 2016-05-06T11:50:18.043 回答