2016-03-07 76 views
1

当使用Spark SQL对WSO2 DAS执行批量分析时,试图执行以下查询。表'First','Middle'和'Third'需要合并并写入'All_three'表中。执行此查询时,对WSO2 DAS显示WSO2 DAS:使用UNION生成错误的SPARK SQL查询

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

以下错误:

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^

与UNION使用限制是不是必须的,以我的知识。将括号内的SELECT查询也尝试过了,但没有奏效。我在这里做错了什么?先谢谢你!

回答

1

我有同样的问题。

请确保您在每行末尾都有空格。

原因是它不会将\ n视为像SSMS或其他查询编辑器这样的空白字符。

因此它读取没有空白的查询。 因此,它看起来像SELECT * FROM FirstUNION不像SELECT * FROM First UNION

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

+0

是的,我发现这是困难的方式试图获得结果只应用新的行字符。然而,实际的问题被认为是没有括号和临时数据元素,可以像@Isuru Wijesinghe提到的那样解决。 –

+0

好的。这很好:-) –

0

这里提到的查询存在问题。请如下更改查询。

INSERT OVERWRITE TABLE All_three SELECT * FROM(SELECT SYMBOL,体积为第一 UNION SELECT SYMBOL,VOLUME从中 UNION SELECT SYMBOL,体积为第三 )温度;

其实我们就是在这里做,包裹工会结果为临时数据元素称为临时,并从那里选择的一切。 Spark-SQL解析器仅在插入查询中使用单个select元素,并且在选择查询结束时它期望有一个限制(如果可用)。因此,您需要将随后的select语句包装到一个select元素中。希望这能解决你的问题。

+0

是的,这被认为是我的查询问题。谢谢您的帮助! –