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

关于Databricks 2.7.1 JDBC驱动获取嵌套数据结构的问题与解决办法咨询

Databricks 2.7.1 JDBC驱动获取嵌套数据结构的问题与解决办法咨询

我最近在使用Databricks 2.7.1 JDBC驱动处理嵌套数据结构(比如ARRAY或ROW类型)时,遇到了一些不符合预期的行为,想跟大家请教下这是不是已知问题,以及有没有可行的解决办法。

1. 数组类型返回JSON格式的字符串而非数组对象

当通过JDBC查询Databricks中的数组类型字段时,调用ResultSet::getString或ResultSet::getObject会返回看起来像JSON数组的字符串,但实际类型都是java.lang.String,而不是对应的数组对象。

比如这段Java代码:

try (Statement s = connection.createStatement();
    ResultSet rs = s.executeQuery(
        """
        select array(1, 2), array('a', 'b'), array(true, false)
        """
)) {
    while (rs.next()) {
        System.out.println(rs.getString(1));
        System.out.println(rs.getObject(1).getClass());
        System.out.println(rs.getString(2));
        System.out.println(rs.getObject(2).getClass());
        System.out.println(rs.getString(3));
        System.out.println(rs.getObject(3).getClass());
    }
}

执行后输出如下:

[1,2]
class java.lang.String
["a","b"]
class java.lang.String
[true,false]
class java.lang.String

2. ResultSet::getArray方法未实现

我尝试调用标准的ResultSet::getArray方法来获取数组类型,但驱动直接抛出了异常,提示不支持该类型:

java.sql.SQLDataException: [Databricks][JDBC](10400) Invalid type for data - column: 3, type: Array.
    at com.databricks.client.exceptions.ExceptionConverter.toSQLException(Unknown Source)
    at com.databricks.client.jdbc.common.SForwardResultSet.getArray(Unknown Source)
    at org.jooq.testscripts.JDBC.main(JDBC.java:44)

3. 返回的JSON字符串存在格式不合法的情况

更麻烦的是,这些看似JSON的字符串并非总是合法的:

  • 当数组中包含双引号时,转义处理错误:比如执行select array('"'),返回的是["""],而不是预期的["\""]
  • 日期类型的数组元素没有被加引号:执行select array(date '2000-01-01'),返回的是[2000-01-01],这显然不是合法的JSON格式

我的问题

想问下这是不是Databricks 2.7.1 JDBC驱动的已知bug或者限制?有没有什么现成的workaround可以正确解析这些嵌套结构,或者让驱动返回合法的JSON/正确的数组类型?

备注:内容来源于stack exchange,提问作者Lukas Eder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 09:33:00