测试 Spark SQL 语句的解析
Posted
技术标签:
【中文标题】测试 Spark SQL 语句的解析【英文标题】:Testing parsing of Spark SQL statements 【发布时间】:2020-11-30 23:52:34 【问题描述】:我目前正在用 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)
通过,但是当将查询更改为简单选择时:
val query =
"""SELECT
| a_column
| FROM a_table
| """.stripMargin
val parser = spark.sessionState.sqlParser
val queryParsingResult = Try(parser.parseExpression(query))
assert(queryParsingResult.isSuccess)
此测试失败,并出现“不匹配的输入 'FROM' 预期 ,'-'”异常。
我尝试了这种方法的几种不同变体,但似乎无济于事。 有没有办法将这些语句解析为单元测试的一部分?此外,对于更复杂的查询,我是否需要提供对 hivemeta 存储的访问权限,以便查询解析器能够理解表的底层数据架构?
【问题讨论】:
【参考方案1】:我认为您正在寻找 parser.parsePlan
而不是 parser.parseExpression
。第二个查询没有显示parsePlan
的错误。
但是,请注意
SELECT a_column
a_table
是一个有效的查询,相当于SELECT a_column AS a_table
。
【讨论】:
以上是关于测试 Spark SQL 语句的解析的主要内容,如果未能解决你的问题,请参考以下文章