【问题标题】:WSO2 DAS: SPARK SQL query with UNION producing errorsWSO2 DAS:使用 UNION 产生错误的 SPARK SQL 查询
【发布时间】:2016-05-06 19:50:18
【问题描述】:

在使用 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 查询括在括号中,但没有成功。我在这里做错了什么?提前谢谢!

【问题讨论】:

    标签: mysql apache-spark-sql wso2-das


    【解决方案1】:

    我遇到了同样的问题。

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

    原因是它没有像 SSMS 或其他查询编辑器那样将 \n 视为空格。

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

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

    【讨论】:

    • 是的,在尝试仅应用换行符获得结果之后,我发现了这一点。然而,实际问题是缺少括号和临时数据元素,这可以像@Isuru Wijesinghe 提到的那样解决。
    • 好的。没关系:-)
    【解决方案2】:

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

    插入覆盖表 All_three 选择 * 从 ( SELECT SYMBOL, VOLUME FROM First 联盟 从中间选择符号、音量 联盟 从第三个选择符号、音量 ) 温度;

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

    【讨论】:

    • 是的,这是我的查询的问题。感谢您的帮助!
    猜你喜欢
    • 2014-01-28
    • 2016-02-29
    • 2015-12-08
    • 1970-01-01
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多