Snowflake JDBC 驱动程序内部错误:无法检索第一个箭头块的行数:null -- 仅发生在 SELECT 语句上

Sar*_*aca 2 snowflake-cloud-data-platform

我已经成功建立了JDBC连接,并且可以成功执行“使用仓库...”之类的语句。当我尝试运行任何 SELECT 语句时,我收到以下错误:

net.snowflake.client.jdbc.SnowflakeSQLLoggedException:JDBC 驱动程序内部错误:无法检索第一个箭头块的行数:null。

我能够看到我的请求成功,并在雪花 UI 中返回了预期的数据。

错误发生在这一行:rs = statement.executeQuery("select TOP 1 EVENT_ID from snowflake.account_usage.login_history");

该语句能够在此行之前执行查询,并且结果集符合预期。任何见解将不胜感激!

小智 14

使用DBeaver连接snowflake也有同样的问题。通过在每个编辑器窗口中设置会话参数来解决此问题,如下所示: ALTER SESSION SET JDBC_QUERY_RESULT_FORMAT='JSON';

该解决方案可以通过在连接设置->初始化中配置引导查询来自动化。对于每个新的编辑器窗口,该会话参数将在初始化期间预设。


Ser*_*giu 6

这可能是由于以下几个原因造成的:

  1. 你用的是什么JDK版本?JDK16 引入了对 JDK 内部的强封装(请参阅JEP 396)如果您使用的是 JDK16,请尝试在启动时在 JVM 级别进行设置:

    -Djdk.module.illegalAccess=permit

这是一种解决方法,直到我们解决以下 Apache Arrow 问题ARROW-12747

  1. 如果您使用使用 JDBC 连接到 Snowflake 的应用程序,则该应用程序可能无法正确解释结果。尝试切换回 JSON 而不是 ARROW 格式,看看是否能解决问题。这可以通过运行在会话级别完成:

    更改会话集 JDBC_QUERY_RESULT_FORMAT='JSON'