使用 SparkSQL 删除 MySQL 表



我知道我们可以通过以下命令从SparkSQL查询或创建Mysql表。

val data = sqlContext.read.jdbc(urlstring, tablename, properties)
data.write.format("com.databricks.spark.csv").save(result_location)
val dataframe = sqlContext.read.json("users.json")
dataframe.write.jdbc(urlstring, table, properties)

像这样有什么办法可以放下桌子吗?

您可以使用

JDBC驱动程序尝试基本的DROP操作:

val DB_URL: String = ???
val USER: String = ???
val PASS: String = ???
def dropTable(tableName: String) = {
    import java.sql._;
    var conn: Connection = null;
    var stmt: Statement = null;
    try {
      Class.forName("com.mysql.jdbc.Driver");
      println("Connecting to a selected database...");
      conn = DriverManager.getConnection(DB_URL, USER, PASS);
      println("Connected database successfully...");
      println("Deleting table in given database...");
      stmt = conn.createStatement();
      val sql: String = s"DROP TABLE ${tableName} ";
      stmt.executeUpdate(sql);
      println(s"Table ${tableName} deleted in given database...");
    } catch {
      case e: Exception => println("exception caught: " + e);
    } finally {
      ???
    }
}
dropTable("test")

您可以使用 Spark 使用JDBCUtils做到这一点,但这非常简单。

你可以看看写入模式方法

dataframe.write.mode('overwrite').jdbc(urlstring, table, properties)
覆盖

模式意味着将数据帧保存到数据源时,如果数据/表已存在,则现有数据应被数据帧的内容覆盖。

来自: https://spark.apache.org/docs/latest/sql-data-sources-load-save-functions.html#save-modes

此外,如果您不想删除定义,可以放入要截断的属性。

这是一个与 JDBC 编写器相关的选项。启用保存模式时。此选项会导致 Spark 截断现有表,而不是删除并重新创建它。这可以更有效,并防止表元数据(例如,索引)被删除。但是,在某些情况下,例如当新数据具有不同的架构时,它将不起作用。它默认为 false。此选项仅适用于写入。

来自: https://spark.apache.org/docs/latest/sql-data-sources-jdbc.html

相关内容

  • 没有找到相关文章

最新更新