You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 22:40:22