Google BigQuery JDBC 1.1.0 – BigQueryJdbcSqlFeatureNotSupportedException when reading STRING columns

Has anyone successfully used the Google BigQuery JDBC 1.1.0 driver with KNIME 5.12?

Is there any configuration to force KNIME to use ResultSet.getString() instead of getNString()?

Or is this already a known compatibility issue?

Any help would be appreciated.

Thanks!

More details:
Environment

  • KNIME Analytics Platform 5.12.0

  • Google BigQuery Connector

  • Google BigQuery JDBC Driver 1.1.0

  • Tested both:

    • regular driver + dependencies

    • Uber JAR (google-cloud-bigquery-jdbc-1.1.0-all.jar)

  • Same behavior with both.

What works

  • Authentication

  • Connection

  • Metadata browsing

  • Listing datasets

  • Listing tables

  • Listing columns

  • DB Loader / DB Writer (writing to BigQuery)

  • Scalar queries such as:

SELECT 1;
SELECT CURRENT_DATE();
SELECT CAST(1 AS INT64);
SELECT CAST(1.23 AS FLOAT64);
SELECT CAST(TRUE AS BOOL);

What fails

Any query returning a STRING value fails.

Even the simplest possible query:

SELECT CAST('PT' AS STRING) AS country;

or

SELECT country
FROM `project.dataset.table`;

throws:

com.google.cloud.bigquery.exception.BigQueryJdbcSqlFeatureNotSupportedException:
This method is not implemented.

The problem is independent of:

  • tables

  • views

  • query complexity

  • number of rows

  • metadata

  • type mapping

I reproduced it even with a table containing a single row:

CREATE OR REPLACE TABLE dataset.test_knime AS
SELECT 'PT' AS country;

Reading that table still fails.

Stack trace

The important part is:

Caused by: com.google.cloud.bigquery.exception.BigQueryJdbcSqlFeatureNotSupportedException:
This method is not implemented.

at com.google.cloud.bigquery.jdbc.BigQueryNoOpsResultSet.getNString(...)
at com.google.cloud.bigquery.jdbc.BigQueryBaseResultSet.getNString(...)
at org.knime.database.connection.wrappers.AbstractResultSetWrapper.getNString(...)

It appears that KNIME is calling:

ResultSet.getNString(...)

while the Google JDBC driver intentionally throws SQLFeatureNotSupportedException because getNString() is not implemented.