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
使用 Spark SQL 解析器:
val parser = spark.sessionState.sqlParser
parser.parseExpression("select * from table")
Run Code Online (Sandbox Code Playgroud)