我在使用 Spark 通过自定义 JDBC 读取数据时遇到问题。我将如何覆盖通过 jdbc url 推断的 sql 方言?
有问题的数据库是 vitess (https://github.com/youtube/vitess)它运行一个 mysql 变体,所以我想指定一个 mysql 方言。
jdbc url 以 jdbc:vitess/ 开头
否则,DataFrameReader 会推断使用“””作为引用标识符的默认方言。因此,通过spark.read.jdbc 的查询将发送为
从表中选择“id”、“col2”、“col3”、“etc”
它选择字符串表示形式而不是列值
代替
从表中选择 id、col2、col3 等
也许已经太晚了。但接下来就是答案:
创建自定义方言,就像我对 ClickHouse 数据库所做的那样(我的 jdbc 连接 url 看起来像这样 jdbc:clickhouse://localhost:8123)
private object ClickHouseDialect extends JdbcDialect {
//override here quoting logic as you wish
override def quoteIdentifier(colName: String): String = colName
override def canHandle(url: String): Boolean = url.startsWith("jdbc:clickhouse")
}
并将其注册到代码中的某个位置,如下所示:
JdbcDialects.registerDialect(ClickHouseDialect)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)