【发布时间】:2020-07-17 23:27:16
【问题描述】:
我正在尝试使用 Spark JDBC 从 SAS IOM 中读取数据。问题是SAS JDBC驱动有点奇怪,所以我需要创建自己的方言:
object SasDialect extends JdbcDialect {
override def canHandle(url: String): Boolean = url.startsWith("jdbc:sasiom")
override def quoteIdentifier(colName: String): String = "\"" + colName + "\"n"
}
然而,这还不够。 SAS区分列标签(=人类可读的名称)和列名称(=您在SQL查询中使用的名称),但似乎spark使用列标签而不是模式发现中的名称,请参阅下面的JdbcUtils提取:
while (i < ncols) {
val columnName = rsmd.getColumnLabel(i + 1)
这会导致 SQL 错误,因为它试图在生成的 SQL 代码中使用人类可读的列名。
要使 SAS IOM JDBC 正常工作,这需要是 getColumnName 而不是 getColumnLabel。有没有办法在方言中指定这个?除了包装整个 com.sas.rio.MVADriver 和 resultsetmeta 之外,我真的找不到方法来解决这个问题
弗兰克
【问题讨论】:
标签: apache-spark sas