有没有一种方法可以验证原始Spark sql查询的语法?

use*_*400 5 scala apache-spark

有没有一种方法可以验证原始Spark SQL查询的语法?

例如,我想知道isValidspark是否提供任何API调用?

val query = "select * from table"
if(isValid(query)) {
    sparkSession.sql(query) 
} else {
    log.error("Invalid Syntax")
}
Run Code Online (Sandbox Code Playgroud)

我尝试了以下

val query = "select * morf table" // Invalid query
val parser = spark.sessionState.sqlParser
try{
    parser.parseExpression(query)
} catch (ParseException ex) {
    throw new Exception(ex); //Exception not getting thrown
}
Dataset<>Row df = sparkSession.sql(query) // Exception gets thrown here
df.writeStream.format("console").start()
Run Code Online (Sandbox Code Playgroud)

问题:parser.parseExpression在我点击之前没有捕获到无效的语法sparkSession.sql。换句话说,它在上面的代码中没有帮助。任何原因?我的整个目标是在将语法错误传递给之前,先捕获语法错误sparkSession.sql

Yeh*_*kon 6

使用 Spark SQL 解析器:

val parser = spark.sessionState.sqlParser
parser.parseExpression("select * from table")
Run Code Online (Sandbox Code Playgroud)