scala测试sparksql语句的解析

clj7thdc  于 2021-05-16  发布在  Spark
关注(0)|答案(1)|浏览(417)

我目前正在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存储的访问,以便查询解析器能够理解表的底层数据模式?

i34xakig

i34xakig1#

我想你在找 parser.parsePlan 而不是 parser.parseExpression . 第二个查询没有显示的错误 parsePlan .
但是,请注意

SELECT a_column
a_table

是有效查询,相当于 SELECT a_column AS a_table .

相关问题