到Oracle的数据框使用区分大小写的列创建表 [英] Dataframe to Oracle creates table with case sensitive column
问题描述
火花:2.1.1
我将dataframe
保存为Oracle
表,但是生成的Oracle表具有"区分大小写"列.
I am saving my dataframe
as an Oracle
table but the resultant Oracle table has "case sensitive" columns.
val properties = new java.util.Properties
properties.setProperty("user", ora_username)
properties.setProperty("password", ora_pwd)
properties.setProperty("batchsize", "30000")
properties.setProperty("driver", db_driver)
spark.sql("select * from myTable").repartition(50).write.mode(SaveMode.Overwrite).jdbc(url,"myTable_oracle", properties)
当我在Oracle
中看到
-
Select * from myTable_oracle;
=>有效 -
Select col1 from myTable_oracle;
=> 不起作用 -
Select "col1" from myTable_oracle;
=>可以,但是很烦人
Select * from myTable_oracle;
=> worksSelect col1 from myTable_oracle;
=> Doesn't workSelect "col1" from myTable_oracle;
=> works , but is very annoying
尝试了以下设置,但仍然存在相同的问题:
spark.sqlContext.sql("set spark.sql.caseSensitive=false")
使用相同的代码在Spark 1.6.1
中工作,该代码创建不区分大小写的列的Oracle
表.但是使用Spark 2.1.1
我正面临这个问题.
Same code used to work in Spark 1.6.1
which creates Oracle
table with case-insensitive columns. But with Spark 2.1.1
I am facing this issue.
推荐答案
我发现了问题和解决方案: 从 Spark 2.x 开始,在创建表时,每个columnName都用双引号引起来,因此,当您尝试通过sqlPlus查询时,所得的Oracle表的columnNames区分大小写.
I found the issue and solution : Starting Spark 2.x every columnName gets double quoted while creating table and hence the resultant Oracle table's columnNames become case-sensitive when you try to query them via sqlPlus.
dialect.quoteIdentifier
[,并且此 dialect.quoteIdentifier 是双引号["]
and this dialect.quoteIdentifier is Double quotes ["]
def quoteIdentifier(colName: String): String = {
s""""$colName""""
}