Spark不尊重表格的区分大小写

MrG*_*rts 4 postgresql scala apache-spark apache-spark-sql

我有一个火花scala区分大小写的问题.我想从postgres表中读取,其中包含一些字符(大写)但默认情况下spark将名称转换为小写,我收到错误

org.postgresql.util.PSQLException:错误:关系"textlogs"不存在

val opts = Map(
  "url" -> "jdbc:postgresql://localhost:5433/sparkdb",
  "dbtable" -> "TextLogs",
  "user" -> "admin",
  "password" -> "mypassword"
)
val df = spark
           .read
           .format("jdbc")
           .options(opts)
           .load
Run Code Online (Sandbox Code Playgroud)

有没有办法强制火花来尊重区分大小写?

Łuk*_*ski 9

在Postgres中,当您不对引用对象标识符(如表名)进行双引号时,它们将被视为不区分大小写.所以这TextLogs实际上等于textlogs.

为了具有区分大小写的对象标识符,您需要对其进行双引号.在你的情况下,那就是"TextLogs",所以在你的代码中你应该只是将转义的双引号添加到表名:

val opts = Map(
  "url" -> "jdbc:postgresql://localhost:5433/sparkdb",
  "dbtable" -> "\"TextLogs\"",
  "user" -> "admin",
  "password" -> "mypassword"
)
val df = spark
           .read
           .format("jdbc")
           .options(opts)
           .load
Run Code Online (Sandbox Code Playgroud)