我目前正在scala(scala 2.12.12)中编写spark应用程序(spark 3.0.1),并希望对sql语句进行单元测试,以检查它们是否可以正确解析。例如,我想检查一下:
SELECT a_column
From a_table
正确解析,同时
SELECT a_column
a_table
应该失败
我尝试了以下方法:
val query =
"""SELECT
| *
| FROM a_table
| """.stripMargin
val parser = spark.sessionState.sqlParser
val queryParsingResult = Try(parser.parseExpression(query))
assert(queryParsingResult.isSuccess)
但是,当将查询更改为简单的select时:
val query =
"""SELECT
| a_column
| FROM a_table
| """.stripMargin
val parser = spark.sessionState.sqlParser
val queryParsingResult = Try(parser.parseExpression(query))
assert(queryParsingResult.isSuccess)
此测试失败,来自“expecting{,'-'}”异常的“mismatched input”。
我尝试过几种不同的方法,但似乎没有成功。有没有办法将这些语句作为单元测试的一部分进行解析?对于更复杂的查询,我是否需要提供对hivemeta存储的访问,以便查询解析器能够理解表的底层数据模式?
1条答案
按热度按时间i34xakig1#
我想你在找
parser.parsePlan
而不是parser.parseExpression
. 第二个查询没有显示的错误parsePlan
.但是,请注意
是有效查询,相当于
SELECT a_column AS a_table
.