gpt4 book ai didi

apache-spark - 如何在不执行 Spark SQL 表达式的情况下验证它?

转载 作者:行者123 更新时间:2023-12-02 08:06:01 25 4
gpt4 key购买 nike

我想验证 Spark-sql 查询在语法上是否正确,而无需在集群上实际运行查询。

实际用例是我正在尝试开发一个用户界面,它接受用户输入 Spark-sql 查询,并且我应该能够验证提供的查询在语法上是否正确。另外,如果在解析查询后,我可以就 Spark 最佳实践给出有关该查询的任何建议,那是最好的。

最佳答案

SparkSqlParser

Spark SQL 使用SparkSqlParser作为 Spark SQL 表达式的解析器。

您可以使用 SparkSession (和 SessionState)访问 SparkSqlParser,如下所示:

val spark: SparkSession = ...
val parser = spark.sessionState.sqlParser

scala> parser.parseExpression("select * from table")
res1: org.apache.spark.sql.catalyst.expressions.Expression = ('select * 'from) AS table#0
<小时/>

提示:为 org.apache.spark.sql.execution.SparkSqlParser 记录器启用 INFO 日志记录级别,以查看内部发生的情况。

SparkSession.sql方法

仅凭这一点并不能为您提供针对错误 SQL 表达式的最防弹盾牌,并且想想 sql方法更适合。

sql(sqlText: String): DataFrame Executes a SQL query using Spark, returning the result as a DataFrame. The dialect that is used for SQL parsing can be configured with 'spark.sql.dialect'.

请参阅下面的操作。

scala> parser.parseExpression("hello world")
res5: org.apache.spark.sql.catalyst.expressions.Expression = 'hello AS world#2

scala> spark.sql("hello world")
org.apache.spark.sql.catalyst.parser.ParseException:
mismatched input 'hello' expecting {'(', 'SELECT', 'FROM', 'ADD', 'DESC', 'WITH', 'VALUES', 'CREATE', 'TABLE', 'INSERT', 'DELETE', 'DESCRIBE', 'EXPLAIN', 'SHOW', 'USE', 'DROP', 'ALTER', 'MAP', 'SET', 'RESET', 'START', 'COMMIT', 'ROLLBACK', 'REDUCE', 'REFRESH', 'CLEAR', 'CACHE', 'UNCACHE', 'DFS', 'TRUNCATE', 'ANALYZE', 'LIST', 'REVOKE', 'GRANT', 'LOCK', 'UNLOCK', 'MSCK', 'EXPORT', 'IMPORT', 'LOAD'}(line 1, pos 0)

== SQL ==
hello world
^^^

at org.apache.spark.sql.catalyst.parser.ParseException.withCommand(ParseDriver.scala:217)
at org.apache.spark.sql.catalyst.parser.AbstractSqlParser.parse(ParseDriver.scala:114)
at org.apache.spark.sql.execution.SparkSqlParser.parse(SparkSqlParser.scala:48)
at org.apache.spark.sql.catalyst.parser.AbstractSqlParser.parsePlan(ParseDriver.scala:68)
at org.apache.spark.sql.SparkSession.sql(SparkSession.scala:638)
... 49 elided

关于apache-spark - 如何在不执行 Spark SQL 表达式的情况下验证它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46973729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com