【问题标题】:Spark JDBC Oracle write using Append mode also changing the table schema if Dataframe has different schema如果 Dataframe 具有不同的模式,则使用附加模式的 Spark JDBC Oracle 写入也会更改表模式
【发布时间】:2019-08-29 09:29:09
【问题描述】:
如果 Dataframe 具有不同的架构,则使用附加模式的 Spark JDBC Oracle 写入也会更改表架构。
是否有任何选项可以防止 spark 在追加时更改 oracle 元数据?
【问题讨论】:
标签:
oracle
apache-spark
jdbc
【解决方案1】:
根据spark sql数据源官方文档,见https://spark.apache.org/docs/latest/sql-data-sources-jdbc.html。
您可以使用 createTableColumnTypes :创建表时要使用的数据库列数据类型,而不是默认值。数据类型信息应以与 CREATE TABLE 列语法相同的格式指定(例如:“name CHAR(64), cmets VARCHAR(1024)”)。指定的类型应该是有效的 spark sql 数据类型。此选项仅适用于写作。
// Specifying create table column data types on write
jdbcDF.write
.option("createTableColumnTypes", "name CHAR(64), comments VARCHAR(1024)")
.jdbc("jdbc:postgresql:dbserver", "schema.tablename", connectionProperties)
例如,它使用 postgresql 但您可以使用 oracle jdbc driver 。