【问题标题】:Spark - get tables from databaseSpark - 从数据库中获取表
【发布时间】:2020-09-18 23:54:31
【问题描述】:

我必须对给定数据库中的所有表执行操作,因此我使用以下代码。

但是,它也给了我视图,有没有一种方法可以只过滤表格?

代码

  def getTables(databaseName: String)(implicit spark: SparkSession): Array[String] = {
    val tables = spark.sql(s"show tables from ${databaseName}").collect().map(_(1).asInstanceOf[String])
    logger.debug(s"${tables.mkString(",")} found")
    tables
  }

另外,`show views 显示错误" ​​

scala> spark.sql("show views from gshah03;").show
org.apache.spark.sql.catalyst.parser.ParseException:
missing 'FUNCTIONS' at 'from'(line 1, pos 11)

== SQL ==
show views from gshah03;
-----------^^^

  at org.apache.spark.sql.catalyst.parser.ParseException.withCommand(ParseDriver.scala:241)
  at org.apache.spark.sql.catalyst.parser.AbstractSqlParser.parse(ParseDriver.scala:117)
  at org.apache.spark.sql.execution.SparkSqlParser.parse(SparkSqlParser.scala:48)
  at org.apache.spark.sql.catalyst.parser.AbstractSqlParser.parsePlan(ParseDriver.scala:69)
  at org.apache.spark.sql.SparkSession.sql(SparkSession.scala:643)
  ... 49 elided

【问题讨论】:

标签: apache-spark apache-spark-sql


【解决方案1】:

试试这个-

  val df = spark.range(1, 5)
    df.createOrReplaceTempView("df_view")
    println(spark.catalog.currentDatabase)
    val db: Database = spark.catalog.getDatabase(spark.catalog.currentDatabase)
    val tables: Dataset[Table] = spark.catalog.listTables(db.name)
    tables.show(false)

    /**
      * default
      * +-------+--------+-----------+---------+-----------+
      * |name   |database|description|tableType|isTemporary|
      * +-------+--------+-----------+---------+-----------+
      * |df_view|null    |null       |TEMPORARY|true       |
      * +-------+--------+-----------+---------+-----------+
      */

【讨论】:

  • 你在做什么所以在这里显示,输出显示view名称。
  • 你可以使用表格类型过滤掉视图,不是吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-17
  • 1970-01-01
  • 2011-06-06
  • 2015-03-20
  • 1970-01-01
  • 1970-01-01
  • 2016-08-25
相关资源
最近更新 更多