如何使用 JDBC 在 Spark 中的其他数据库中获取表的创建语句
Posted
技术标签:
【中文标题】如何使用 JDBC 在 Spark 中的其他数据库中获取表的创建语句【英文标题】:How to get Create Statement of Table in some other database in Spark using JDBC 【发布时间】:2020-08-13 15:45:57 【问题描述】:问题陈述:
我有一个 Impala 数据库,其中存在多个表
我正在创建到 Impala 的 Spark JDBC 连接,并将这些表加载到 spark 数据框中,以进行这样的验证,效果很好:
val df = spark.read.format("jdbc")
.option("url","url")
.option("dbtable","tablename")
.load()
现在下一步,我的实际问题是我需要找到用于在 Impala 本身中创建表的 create 语句
由于我无法运行如下所示的命令,因为它给出了错误,所以无论如何我可以获取 Impala 中存在的表的 show create 语句。
val df = spark.read.format("jdbc")
.option("url","url")
.option("dbtable","show create table tablename")
.load()
【问题讨论】:
【参考方案1】:也许您可以“本机”使用 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...
【讨论】:
问题是我需要 ddl 或 show create 语句的表存在于 mysql 等数据库中。我需要建立一个 jdbc 连接来读取该表,并且 jdbc 仅提供仅需要 select 语句的加载方法。在 .option("dbtable","show create table tablename") 中传递此语句会返回错误。 所以我不明白你的问题,而 Impala 实际上与它无关...... :) 重新表述了问题陈述。希望现在更有意义 您的 Spark 是否在单独的集群上运行? IE。为什么需要 JDBC? 你是绝对正确的。即使我刚才看了你的答案,但我也做了同样的事情,并且能够在早上得到结果。这需要使用普通的旧 Java/Scala JDBC 连接代码而不是 spark API 来解决。我已经接受了你的回答。感谢您的帮助以上是关于如何使用 JDBC 在 Spark 中的其他数据库中获取表的创建语句的主要内容,如果未能解决你的问题,请参考以下文章