You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

执行Spark插入查询时遇ParseException错误:input 'with'无可行替代方案求助

解决Spark SQL INSERT语句中的ParseException错误

Hey Lara,我来帮你搞定这个Spark SQL的语法错误!

你遇到的org.apache.spark.sql.catalyst.parser.ParseException: No viable alternative at input 'with' to insert in a table错误,本质是Spark SQL不支持把WITH子句(公共表表达式CTE)放在INSERT INTO语句的后面,它的语法规则要求CTE必须位于整个INSERT语句的最开头。

错误的原语句

INSERT INTO users partition(date) WITH existentes AS (SELECT COUNT(1) AS name FROM users WHERE date=20160303)

修正后的正确写法

根据你的需求(先定义CTE再插入数据),需要把WITH子句移到最前面,同时还要确保插入的字段和表结构匹配(比如分区字段date需要在插入的结果集中):

WITH existentes AS (
    -- 这里把AS name改成AS count_name更贴合语义,避免和表字段混淆
    SELECT COUNT(1) AS count_name 
    FROM users 
    WHERE date=20160303
)
INSERT INTO users PARTITION(date)
-- 插入时需要指定分区值,同时匹配表的其他字段
SELECT count_name, 20160303 FROM existentes;

额外说明

错误提示里的no viable alternative at input 'with'其实就是Spark SQL的语法解析器无法识别INSERT INTO后面紧跟WITH的结构,只要调整CTE的位置到语句最开头,就能解决这个问题啦。

内容的提问来源于stack exchange,提问作者Lara

火山引擎 最新活动