Spark3.2.0通过JDBC连接SpliceMachine查询长度受限报错
问题重现
我们使用Spark 3.2.0通过JDBC连接Splice Machine数据库拉取数据,驱动版本为com.splicemachine:db-client:2.7.0.1815,代码示例如下:
val url_upd = "jdbc:splice://sl73caehdp0225.visa.com:1527/splicedb;user=***;password=a***" val query = "select top 5 ENCRPT_PYMT_CRD_ACCT_NUM_NORM from optd.ttd_cs_dtl CS where TRAN_CD IN ('01','04','05','06','10','11')" val jdbcDF = spark.read.format("jdbc") .option("url", url_upd) .option("driver", "com.splicemachine.db.jdbc.ClientDriver") .option("query", query) .load();
当查询语句长度超过111字符时,会抛出如下错误:
"A connection could not be established because the database name '' is larger than the maximum length allowed by the network protocol."
相同的连接配置和查询语句在Spark 2.3中可正常运行。
解决方案
1. 用dbtable参数替代query,将查询包装为子查询
Spark 3.x对JDBC的query参数处理逻辑和2.3存在差异,会导致Splice驱动误解析参数内容。将查询语句包装成子查询,通过dbtable参数传递可绕过该问题:
val url_upd = "jdbc:splice://sl73caehdp0225.visa.com:1527/splicedb;user=***;password=a***" val subQuery = "(select top 5 ENCRPT_PYMT_CRD_ACCT_NUM_NORM from optd.ttd_cs_dtl CS where TRAN_CD IN ('01','04','05','06','10','11')) as temp_table" val jdbcDF = spark.read.format("jdbc") .option("url", url_upd) .option("driver", "com.splicemachine.db.jdbc.ClientDriver") .option("dbtable", subQuery) .load();
2. 升级Splice驱动版本
当前使用的2.7.0.1815版本驱动可能对Spark 3.x的JDBC参数处理兼容性不足,尝试升级到最新的Splice Machine JDBC驱动,大概率能修复该兼容性问题。
内容的提问来源于stack exchange,提问作者Avishek Shaw
相关产品推荐
相关产品推荐

