This is a known issue when using Snowflake with Mendix, especially on Java 17/21. Snowflake returns results in Apache Arrow format by default, but Mendix expects JSON.
Mendix Support recommends forcing Snowflake to return JSON instead:
ALTER USER <your_user> SET JDBC_QUERY_RESULT_FORMAT='JSON';
This is the preferred solution for production, as it ensures compatibility without relying on JVM workarounds.
Snowflake’s newer JDBC drivers return results in Apache Arrow format by default.
Mendix Database Connector / external database calls expect:
JSON-compatible result sets
If Arrow is returned → Mendix cannot deserialize → error.
Run this in Snowflake session or modify connection properties:
ALTER SESSION SET JDBC_QUERY_RESULT_FORMAT='JSON';
Or add connection property:
JDBC_QUERY_RESULT_FORMAT=JSON
This forces Snowflake to return JSON instead of Arrow.
Some suggest adding a JVM flag to disable Arrow globally.
Problems:
It is a workaround, not a clean solution.
Mendix expects structured JSON when using:
So always configure the data source to return compatible format rather than patching JVM.
Use:
ALTER SESSION SET JDBC_QUERY_RESULT_FORMAT='JSON';
or set it in the connection string.
That is the correct, production-ready solution.
You need to modify the connection properties, not the JVM.
In your Database Connector configuration (usually in a constant or connection string), update the JDBC URL like this:
jdbc:snowflake://<account>.snowflakecomputing.com/?JDBC_QUERY_RESULT_FORMAT=JSON
Example:
jdbc:snowflake://abc123.eu-central-1.snowflakecomputing.com/?db=MYDB&schema=PUBLIC&warehouse=WH1&JDBC_QUERY_RESULT_FORMAT=JSON
That’s it.
This forces Snowflake to return JSON instead of Apache Arrow.
If you cannot change the URL, then:
In your microflow before executing query:
ALTER SESSION SET JDBC_QUERY_RESULT_FORMAT='JSON';
Then run your actual SELECT query.
This works too — but URL-level configuration is cleaner.
Avoid adding JVM parameters like:
-Dnet.snowflake.jdbc.disableArrow=true
Reasons:
Set it in:
JDBC URL → JDBC_QUERY_RESULT_FORMAT=JSON
That is the cleanest and most production-ready solution.