关于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
相关产品推荐
相关产品推荐

