如何从 SQL 查询中获取表名? [英] How to get table names from SQL query?

查看:40
本文介绍了如何从 SQL 查询中获取表名?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使用 Scala 从 Spark 中的 sql 查询中获取所有表名称.

I want to get all the tables names from a sql query in Spark using Scala.

假设用户发送一个 SQL 查询,它看起来像:

Lets say user sends a SQL query which looks like:

select * from table_1 as a left join table_2 as b on a.id=b.id

我想获得所有表格列表,例如 table_1table_2.

I would like to get all tables list like table_1 and table_2.

正则表达式是唯一的选择吗?

Is regex the only option ?

推荐答案

非常感谢@Swapnil Chougule 答案.这启发我提供了一种在结构化查询中收集所有表的惯用方法.

Thanks a lot @Swapnil Chougule for the answer. That inspired me to offer an idiomatic way of collecting all the tables in a structured query.

scala> spark.version
res0: String = 2.3.1

def getTables(query: String): Seq[String] = {
  val logicalPlan = spark.sessionState.sqlParser.parsePlan(query)
  import org.apache.spark.sql.catalyst.analysis.UnresolvedRelation
  logicalPlan.collect { case r: UnresolvedRelation => r.tableName }
}

val query = "select * from table_1 as a left join table_2 as b on a.id=b.id"
scala> getTables(query).foreach(println)
table_1
table_2

这篇关于如何从 SQL 查询中获取表名?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆