如何使用JDBC在Spark的其他数据库中获取表的创建语句

问题描述

问题陈述:

  1. 我有一个有多个表的Impala数据库

  2. 我正在创建与Impala的Spark JDBC连接,并将这些表加载到spark数据帧中,以进行这样的验证,效果很好:

     val df = spark.read.format("jdbc")
                  .option("url","url")
                  .option("dbtable","tablename")
                  .load()
    
  3. 下一步,我的实际问题是我需要找到 create语句,该语句用于在Impala本身中创建表

  4. 由于我无法运行如下所示的命令,因为它给出了错误,所以无论如何我都可以获取Impala中存在的表的show create语句。

    val df = spark.read.format("jdbc")
                  .option("url","show create table tablename")
                  .load()
    

解决方法

也许您可以“天然”使用Spark SQL执行类似的操作

val createstmt = spark.sql("show create table <tablename>")

结果数据框将只有一个列(类型字符串),其中包含完整的CREATE TABLE语句。

但是,如果您仍然选择使用JDBC路由,则始终可以选择使用旧的JDBC接口。毕竟,Scala理解一切用Java编写的内容。

import java.sql.*
Connection conn = DriverManager.getConnection("url")
Statement stmt = conn.createStatement()
ResultSet rs = stmt.executeQuery("show create table <tablename>")
...etc...