Snowflakeでクエリを実行しようとしましたが、接続は成功しているにもかかわらずデータを取得できず、"java.lang.NoClassDefFoundError" エラーが発生しました。
以下のようなエラーが表示されます:
"JDBC driver internal error: exception creating result java.lang.NoClassDefFoundError: Could not initialize class net.snowflake.client.jdbc.internal.apache.arrow.memory.util.MemoryUtil at net.snowflake.client.jdbc.internal.apache.arrow.memory.ArrowBuf.getDirectBuffer(ArrowBuf.java: 234).".
以下のSPLクエリを実行して、該当するエラーログを確認します。
SPL:
index=_internal *dbx* *snowflake*
エラー:
error: exception creating result java.lang.NoClassDefFoundError: Could not initialize class net. snowflake.c lient.jdbc.internal.apache.arrow.memory.util.MemoryUtil at net.snowflake.client.jdbc.internal.apache.arrow.memory.ArrowBuf.ge
tDirectBuffer(ArrowBuf.java:234).error: exception creating result java.lang.NoClassDefFo
not initialize class net.snowflake.client.jdbc.internal.apache.arrow.memory.util.MemoryUtil at net.snowflake.
client.jdbc.internal.apache.arrow.memory.ArrowBuf.getDirectBuffer(ArrowBuf.java:234).
Snowflake JDBCドライバーは、クエリ結果の取得や処理時に「Arrow」形式を使用します。デフォルトの結果形式は数年前(v3.11.0)に「JSON」から「Arrow」に変更されました。
このエラーは、JDBCドライバーが公式にサポート・テストされていないOSで発生することが多く、原因はArrowライブラリが正しくインストールされていないか、OSがArrowをサポートしていないことにあります。
NoClassDefFoundErrorを解決する最初のステップは、Arrowライブラリが正しくインストールされていることを確認することです。
Arrowライブラリのインストールが不可能、またはOSがArrowをサポートしていない場合は、JDBCのデフォルト結果形式をオーバーライドするために、JDBC_QUERY_RESULT_FORMATプロパティを設定します。推奨される設定方法はアカウントレベルではなく、セッションまたはユーザーレベルで設定することです。
以下のALTER文でアカウントまたはユーザーレベルで設定できます。
ALTER ACCOUNT SET JDBC_QUERY_RESULT_FORMAT='JSON';
ALTER ACCOUNT UNSET JDBC_QUERY_RESULT_FORMAT; //To revert the changeALTER USER <user_name> SET JDBC_QUERY_RESULT_FORMAT='JSON';
ALTER USER <user_name> UNSET JDBC_QUERY_RESULT_FORMAT; //To revert the change
セッションレベルではJavaコード内で直接設定可能です。簡単な例は以下の通りです。
Statement = connection.createStatement();
Statement.executeQuery("ALTER SESSION SET JDBC_QUERY_RESULT_FORMAT='JSON'");
※本ページはこちらのページを翻訳したものです。内容に齟齬や不一致がある場合英語版が優先されます。
| Revision | Publish Date | Comments |
|---|---|---|
1.0 |
01-Oct-2026
|
Initial Release |