Spark SQL 2.1 是不是支持将临时表或配置单元表写入 Mysql/Oracle?

Posted

技术标签:

【中文标题】Spark SQL 2.1 是不是支持将临时表或配置单元表写入 Mysql/Oracle?【英文标题】:Does Spark SQL 2.1 support write temp table or hive table to Mysql/Oracle?Spark SQL 2.1 是否支持将临时表或配置单元表写入 Mysql/Oracle? 【发布时间】:2019-03-29 04:26:06 【问题描述】:

我使用的是 Spark SQL 2.1,

我能够从 mysql/oracle 读取数据作为 Spark SQL 中的临时视图:

val url = "jdbc:mysql://localhost:3306/db1"
val user = "root"
val pass = "root"
val sql =
  s"""
      CREATE OR REPLACE TEMPORARY VIEW foobar
      USING org.apache.spark.sql.jdbc
      OPTIONS (url '$url', dbtable '(select id, name, now() from db1.company) as x', user '$user', password '$pass', numPartitions '3')
  """.stripMargin(' ')

val session = SparkSession.builder().appName("SparkSQL003").master("local[4]").getOrCreate()

session.sql(sql)

我的问题是 Spark SQL 2.1 是否支持使用纯 sql 将临时视图或 Hive 表写回 oracle/mysql

【问题讨论】:

【参考方案1】:

我在这里发布我的发现,Spark SQL 在 2.1.0 中支持此功能

  test("SparkSQL006") 
    val url = "jdbc:mysql://localhost:3306/db1"
    val user = "root"
    val pass = "root"
    val sql =
      s"""
          CREATE OR REPLACE TEMPORARY VIEW foobar
          USING org.apache.spark.sql.jdbc
          OPTIONS (url '$url', dbtable 'db1.company', user '$user', password '$pass', numPartitions '3')
      """.stripMargin(' ')

    val session = SparkSession.builder().appName("SparkSQL003").master("local[4]").getOrCreate()

    import session.implicits._
    session.createDataset(Seq((100,"IBM"), (200, "Apply"))).createOrReplaceTempView("t")

    session.sql(sql)

    session.sql(
      """
         insert into foobar select * from t
      """.stripMargin(' '))

  

【讨论】:

以上是关于Spark SQL 2.1 是不是支持将临时表或配置单元表写入 Mysql/Oracle?的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server删除库中所有临时表或用户表

Spark - 如何将约 20TB 的数据从 DataFrame 写入配置单元表或 hdfs?

CTE、子查询、临时表或表变量之间是不是存在性能差异?

Spark SQL实战(07)-Data Sources

SQL Server根据表或视图批量生成插入语句并BCP导出成文本

如何将 Excel 中的数据插入 Spark SQL 中的临时表中