How to skip "GROUP BY" queries for custom data types during "Re-scan field values now"

Hi!
With our new Exasol driver I get an exception in the log when clicking the "Re-scan field values now" button (see below).
The reason is that Metabase executes a query that groups by a column of the Exasol specific GEOMETRY data type which does not support grouping by, causing the query

SELECT "META"."DATA_TYPES"."GEO" AS "GEO"
FROM "META"."DATA_TYPES"
GROUP BY "META"."DATA_TYPES"."GEO"
ORDER BY "META"."DATA_TYPES"."GEO" ASC
LIMIT 5000

to fail with Feature not supported: GEOMETRY type in GROUP BY.

Everything seems to work fine, but I would like to avoid logging the exception, i.e. can I tell Metabase to not execute this GROUP BY query for GEOMETRY columns?

In sql-jdbc.sync/database-type->base-type I map all custom types to :type/*. Is this correct or should I introduce a new type, e.g. :type/Geometry? The exceptions occurs in both cases.

Thank you in advance for your help!

2022-01-14 16:10:40,422 DEBUG middleware.log :: POST /api/database/2/rescan_values 200 3,3 ms (1 DB calls) App DB connections: 0/7 Jetty threads: 5/50 (2 idle, 0 queued) (69 total active threads) Queries in flight: 0 (0 queued)
2022-01-14 16:10:40,422 INFO sync.util :: STARTING: Cache field values in exasol Database 2 'VirtualBox'
2022-01-14 16:10:40,423 INFO sync.util :: STARTING: step 'update-field-values' for exasol Database 2 'VirtualBox'
2022-01-14 16:10:41,372 ERROR models.field-values :: Error fetching field values
clojure.lang.ExceptionInfo: Error executing query {:sql "-- Metabase\nSELECT \"META\".\"DATA_TYPES\".\"GEO\" AS \"GEO\" FROM \"META\".\"DATA_TYPES\" GROUP BY \"META\".\"DATA_TYPES\".\"GEO\" ORDER BY \"META\".\"DATA_TYPES\".\"GEO\" ASC LIMIT 5000", :params nil, :type :invalid-query}
	at metabase.driver.sql_jdbc.execute$execute_reducible_query$fn__52491.invoke(execute.clj:504)
	at metabase.driver.sql_jdbc.execute$execute_reducible_query.invokeStatic(execute.clj:501)
	at metabase.driver.sql_jdbc.execute$execute_reducible_query.invoke(execute.clj:487)
	at metabase.driver.sql_jdbc.execute$execute_reducible_query.invokeStatic(execute.clj:496)
	at metabase.driver.sql_jdbc.execute$execute_reducible_query.invoke(execute.clj:487)
	at metabase.driver.sql_jdbc$fn__85172.invokeStatic(sql_jdbc.clj:54)
	at metabase.driver.sql_jdbc$fn__85172.invoke(sql_jdbc.clj:52)
	at clojure.lang.MultiFn.invoke(MultiFn.java:244)
	at metabase.query_processor.context$executef.invokeStatic(context.clj:59)
	at metabase.query_processor.context$executef.invoke(context.clj:48)
	at metabase.query_processor.context.default$default_runf.invokeStatic(default.clj:68)
	at metabase.query_processor.context.default$default_runf.invoke(default.clj:66)
	at metabase.query_processor.context$runf.invokeStatic(context.clj:45)
	at metabase.query_processor.context$runf.invoke(context.clj:39)
	at metabase.query_processor.reducible$pivot.invokeStatic(reducible.clj:34)
	at metabase.query_processor.reducible$pivot.invoke(reducible.clj:31)
	at metabase.query_processor.middleware.mbql_to_native$mbql__GT_native$fn__49144.invoke(mbql_to_native.clj:25)
	at metabase.query_processor.middleware.check_features$check_features$fn__49630.invoke(check_features.clj:39)
	at metabase.query_processor.middleware.limit$limit$fn__47517.invoke(limit.clj:37)
	at metabase.query_processor.middleware.cache$maybe_return_cached_results$fn__50004.invoke(cache.clj:204)
	at metabase.query_processor.middleware.optimize_temporal_filters$optimize_temporal_filters$fn__50997.invoke(optimize_temporal_filters.clj:204)
	at metabase.query_processor.middleware.validate_temporal_bucketing$validate_temporal_bucketing$fn__51041.invoke(validate_temporal_bucketing.clj:50)
	at metabase.query_processor.middleware.auto_parse_filter_values$auto_parse_filter_values$fn__49201.invoke(auto_parse_filter_values.clj:43)
	at metabase.query_processor.middleware.wrap_value_literals$wrap_value_literals$fn__39249.invoke(wrap_value_literals.clj:161)
	at metabase.query_processor.middleware.annotate$add_column_info$fn__43680.invoke(annotate.clj:620)
	at metabase.query_processor.middleware.permissions$check_query_permissions$fn__45618.invoke(permissions.clj:108)
	at metabase.query_processor.middleware.pre_alias_aggregations$pre_alias_aggregations$fn__50181.invoke(pre_alias_aggregations.clj:40)
	at metabase.query_processor.middleware.cumulative_aggregations$handle_cumulative_aggregations$fn__46016.invoke(cumulative_aggregations.clj:60)
	at metabase.query_processor.middleware.visualization_settings$update_viz_settings$fn__45954.invoke(visualization_settings.clj:63)
	at metabase.query_processor.middleware.resolve_joined_fields$resolve_joined_fields$fn__47115.invoke(resolve_joined_fields.clj:102)
	at metabase.query_processor.middleware.resolve_joins$resolve_joins$fn__50767.invoke(resolve_joins.clj:171)
	at metabase.query_processor.middleware.add_implicit_joins$add_implicit_joins$fn__50303.invoke(add_implicit_joins.clj:190)
	at metabase.query_processor.middleware.large_int_id$convert_id_to_string$fn__47134.invoke(large_int_id.clj:59)
	at metabase.query_processor.middleware.format_rows$format_rows$fn__50355.invoke(format_rows.clj:74)
	at metabase.query_processor.middleware.add_default_temporal_unit$add_default_temporal_unit$fn__46506.invoke(add_default_temporal_unit.clj:23)
	at metabase.query_processor.middleware.desugar$desugar$fn__45927.invoke(desugar.clj:21)
	at metabase.query_processor.middleware.binning$update_binning_strategy$fn__39149.invoke(binning.clj:229)
	at metabase.query_processor.middleware.resolve_fields$resolve_fields$fn__45261.invoke(resolve_fields.clj:34)
	at metabase.query_processor.middleware.add_dimension_projections$add_remapping$fn__49556.invoke(add_dimension_projections.clj:314)
	at metabase.query_processor.middleware.add_implicit_clauses$add_implicit_clauses$fn__49853.invoke(add_implicit_clauses.clj:147)
	at metabase.query_processor.middleware.upgrade_field_literals$upgrade_field_literals$fn__47502.invoke(upgrade_field_literals.clj:40)
	at metabase.query_processor.middleware.add_source_metadata$add_source_metadata_for_source_queries$fn__46883.invoke(add_source_metadata.clj:123)
	at metabase.query_processor.middleware.reconcile_breakout_and_order_by_bucketing$reconcile_breakout_and_order_by_bucketing$fn__50103.invoke(reconcile_breakout_and_order_by_bucketing.clj:100)
	at metabase.query_processor.middleware.auto_bucket_datetimes$auto_bucket_datetimes$fn__48453.invoke(auto_bucket_datetimes.clj:147)
	at metabase.query_processor.middleware.resolve_source_table$resolve_source_tables$fn__45242.invoke(resolve_source_table.clj:45)
	at metabase.query_processor.middleware.parameters$substitute_parameters$fn__48107.invoke(parameters.clj:111)
	at metabase.query_processor.middleware.resolve_referenced$resolve_referenced_card_resources$fn__45315.invoke(resolve_referenced.clj:79)
	at metabase.query_processor.middleware.expand_macros$expand_macros$fn__51425.invoke(expand_macros.clj:184)
	at metabase.query_processor.middleware.add_timezone_info$add_timezone_info$fn__47886.invoke(add_timezone_info.clj:15)
	at metabase.query_processor.middleware.splice_params_in_response$splice_params_in_response$fn__50370.invoke(splice_params_in_response.clj:32)
	at metabase.query_processor.middleware.resolve_database_and_driver$resolve_database_and_driver$fn__49864$fn__49868.invoke(resolve_database_and_driver.clj:31)
	at metabase.driver$do_with_driver.invokeStatic(driver.clj:60)
	at metabase.driver$do_with_driver.invoke(driver.clj:56)
	at metabase.query_processor.middleware.resolve_database_and_driver$resolve_database_and_driver$fn__49864.invoke(resolve_database_and_driver.clj:25)
	at metabase.query_processor.middleware.fetch_source_query$resolve_card_id_source_tables$fn__45865.invoke(fetch_source_query.clj:274)
	at metabase.query_processor.middleware.store$initialize_store$fn__46053$fn__46054.invoke(store.clj:11)
	at metabase.query_processor.store$do_with_store.invokeStatic(store.clj:44)
	at metabase.query_processor.store$do_with_store.invoke(store.clj:38)
	at metabase.query_processor.middleware.store$initialize_store$fn__46053.invoke(store.clj:10)
	at metabase.query_processor.middleware.validate$validate_query$fn__50153.invoke(validate.clj:10)
	at metabase.query_processor.middleware.normalize_query$normalize$fn__50160.invoke(normalize_query.clj:22)
	at metabase.query_processor.middleware.add_rows_truncated$add_rows_truncated$fn__47832.invoke(add_rows_truncated.clj:35)
	at metabase.query_processor.middleware.results_metadata$record_and_return_metadata_BANG_$fn__49130.invoke(results_metadata.clj:147)
	at metabase.query_processor.reducible$async_qp$qp_STAR___42500$thunk__42501.invoke(reducible.clj:103)
	at metabase.query_processor.reducible$async_qp$qp_STAR___42500.invoke(reducible.clj:109)
	at metabase.query_processor.reducible$async_qp$qp_STAR___42500.invoke(reducible.clj:96)
	at metabase.query_processor.reducible$sync_qp$qp_STAR___42509$fn__42510.invoke(reducible.clj:131)
	at metabase.query_processor.reducible$sync_qp$qp_STAR___42509.invoke(reducible.clj:130)
	at clojure.lang.AFn.applyToHelper(AFn.java:154)
	at clojure.lang.AFn.applyTo(AFn.java:144)
	at clojure.core$apply.invokeStatic(core.clj:669)
	at clojure.core$apply.invoke(core.clj:662)
	at metabase.query_processor$process_query.invokeStatic(query_processor.clj:152)
	at metabase.query_processor$process_query.doInvoke(query_processor.clj:146)
	at clojure.lang.RestFn.invoke(RestFn.java:410)
	at metabase.db.metadata_queries$qp_query$fn__69317.invoke(metadata_queries.clj:21)
	at metabase.db.metadata_queries$qp_query.invokeStatic(metadata_queries.clj:20)
	at metabase.db.metadata_queries$qp_query.invoke(metadata_queries.clj:18)
	at metabase.db.metadata_queries$field_query.invokeStatic(metadata_queries.clj:30)
	at metabase.db.metadata_queries$field_query.invoke(metadata_queries.clj:28)
	at metabase.db.metadata_queries$fn__69337$field_distinct_values__69346$fn__69349.invoke(metadata_queries.clj:75)
	at metabase.db.metadata_queries$fn__69337$field_distinct_values__69346.invoke(metadata_queries.clj:68)
	at metabase.db.metadata_queries$fn__69337$field_distinct_values__69346$fn__69347.invoke(metadata_queries.clj:72)
	at metabase.db.metadata_queries$fn__69337$field_distinct_values__69346.invoke(metadata_queries.clj:68)
	at clojure.lang.Var.invoke(Var.java:384)
	at metabase.models.field_values$distinct_values.invokeStatic(field_values.clj:132)
	at metabase.models.field_values$distinct_values.invoke(field_values.clj:124)
	at metabase.models.field_values$create_or_update_field_values_BANG_.invokeStatic(field_values.clj:154)
	at metabase.models.field_values$create_or_update_field_values_BANG_.doInvoke(field_values.clj:148)
	at clojure.lang.RestFn.invoke(RestFn.java:410)
	at metabase.sync.field_values$fn__69214$update_field_values_for_field_BANG___69219$fn__69220.invoke(field_values.clj:23)
	at metabase.sync.field_values$fn__69214$update_field_values_for_field_BANG___69219.invoke(field_values.clj:21)
	at metabase.sync.field_values$fn__69240$update_field_values_for_table_BANG___69245$fn__69246$fn__69247$fn__69248.invoke(field_values.clj:44)
	at metabase.sync.util$do_with_error_handling.invokeStatic(util.clj:156)
	at metabase.sync.util$do_with_error_handling.invoke(util.clj:149)
	at metabase.sync.field_values$fn__69240$update_field_values_for_table_BANG___69245$fn__69246$fn__69247.invoke(field_values.clj:42)
	at clojure.lang.PersistentVector.reduce(PersistentVector.java:343)
	at clojure.core$reduce.invokeStatic(core.clj:6829)
	at clojure.core$reduce.invoke(core.clj:6812)
	at metabase.sync.field_values$fn__69240$update_field_values_for_table_BANG___69245$fn__69246.invoke(field_values.clj:41)
	at metabase.sync.field_values$fn__69240$update_field_values_for_table_BANG___69245.invoke(field_values.clj:38)
	at clojure.core$map$fn__5884.invoke(core.clj:2757)
	at clojure.lang.LazySeq.sval(LazySeq.java:42)
	at clojure.lang.LazySeq.seq(LazySeq.java:51)
	at clojure.lang.Cons.next(Cons.java:39)
	at clojure.lang.RT.boundedLength(RT.java:1793)
	at clojure.lang.RestFn.applyTo(RestFn.java:130)
	at clojure.core$apply.invokeStatic(core.clj:669)
	at clojure.core$apply.invoke(core.clj:662)
	at metabase.sync.field_values$fn__69267$update_field_values_for_database_BANG___69272$fn__69273.invoke(field_values.clj:52)
	at metabase.sync.field_values$fn__69267$update_field_values_for_database_BANG___69272.invoke(field_values.clj:50)
	at clojure.lang.AFn.applyToHelper(AFn.java:154)
	at clojure.lang.AFn.applyTo(AFn.java:144)
	at clojure.core$apply.invokeStatic(core.clj:669)
	at clojure.core$apply.invoke(core.clj:662)
	at metabase.sync.util$fn__40096$run_step_with_metadata__40101$fn__40105$fn__40107.doInvoke(util.clj:360)
	at clojure.lang.RestFn.invoke(RestFn.java:397)
	at metabase.sync.util$with_start_and_finish_logging_STAR_.invokeStatic(util.clj:99)
	at metabase.sync.util$with_start_and_finish_logging_STAR_.invoke(util.clj:93)
	at metabase.sync.util$with_start_and_finish_debug_logging.invokeStatic(util.clj:116)
	at metabase.sync.util$with_start_and_finish_debug_logging.invoke(util.clj:113)
	at metabase.sync.util$fn__40096$run_step_with_metadata__40101$fn__40105.invoke(util.clj:355)
	at metabase.sync.util$fn__40096$run_step_with_metadata__40101.invoke(util.clj:350)
	at metabase.sync.util$fn__40287$run_sync_operation__40292$fn__40293$fn__40301.invoke(util.clj:451)
	at metabase.sync.util$fn__40287$run_sync_operation__40292$fn__40293.invoke(util.clj:449)
	at metabase.sync.util$fn__40287$run_sync_operation__40292.invoke(util.clj:443)
	at metabase.sync.field_values$fn__69293$update_field_values_BANG___69298$fn__69299$fn__69300.invoke(field_values.clj:67)
	at metabase.sync.util$do_with_error_handling.invokeStatic(util.clj:156)
	at metabase.sync.util$do_with_error_handling.invoke(util.clj:149)
	at clojure.core$partial$fn__5859.invoke(core.clj:2634)
	at metabase.driver$fn__24548.invokeStatic(driver.clj:555)
	at metabase.driver$fn__24548.invoke(driver.clj:555)
	at clojure.lang.MultiFn.invoke(MultiFn.java:239)
	at metabase.sync.util$sync_in_context$fn__40008.invoke(util.clj:135)
	at metabase.sync.util$with_db_logging_disabled$fn__40005.invoke(util.clj:126)
	at metabase.sync.util$with_start_and_finish_logging_STAR_.invokeStatic(util.clj:99)
	at metabase.sync.util$with_start_and_finish_logging_STAR_.invoke(util.clj:93)
	at metabase.sync.util$with_start_and_finish_logging$fn__39994.invoke(util.clj:111)
	at metabase.sync.util$with_sync_events$fn__39989.invoke(util.clj:85)
	at metabase.sync.util$with_duplicate_ops_prevented$fn__39980.invoke(util.clj:64)
	at metabase.sync.util$do_sync_operation.invokeStatic(util.clj:177)
	at metabase.sync.util$do_sync_operation.invoke(util.clj:174)
	at metabase.sync.field_values$fn__69293$update_field_values_BANG___69298$fn__69299.invoke(field_values.clj:65)
	at metabase.sync.field_values$fn__69293$update_field_values_BANG___69298.invoke(field_values.clj:61)
	at metabase.api.database$fn__77231$fn__77233.invoke(database.clj:666)
	at clojure.core$binding_conveyor_fn$fn__5772.invoke(core.clj:2034)
	at clojure.lang.AFn.call(AFn.java:18)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.sql.SQLException: Feature not supported: GEOMETRY type in GROUP BY (Session: 1721838311236960256)
	at com.exasol.jdbc.ExceptionFactory.createSQLException(ExceptionFactory.java:258)
	at com.exasol.jdbc.EXASQLException.getSQLExceptionIntern(EXASQLException.java:50)
	at com.exasol.jdbc.AbstractEXAStatement.execute(AbstractEXAStatement.java:478)
	at com.exasol.jdbc.EXAStatement.execute(EXAStatement.java:289)
	at com.mchange.v2.c3p0.impl.NewProxyStatement.execute(NewProxyStatement.java:75)
	at metabase.driver.sql_jdbc.execute$fn__52411.invokeStatic(execute.clj:368)
	at metabase.driver.sql_jdbc.execute$fn__52411.invoke(execute.clj:366)
	at clojure.lang.MultiFn.invoke(MultiFn.java:239)
	at metabase.driver.sql_jdbc.execute$execute_statement_or_prepared_statement_BANG_.invokeStatic(execute.clj:376)
	at metabase.driver.sql_jdbc.execute$execute_statement_or_prepared_statement_BANG_.invoke(execute.clj:373)
	at metabase.driver.sql_jdbc.execute$execute_reducible_query$fn__52491.invoke(execute.clj:502)
	... 150 more
2022-01-14 16:10:42,279 INFO sync.util :: FINISHED: step 'update-field-values' for exasol Database 2 'VirtualBox' (1,9 s)
2022-01-14 16:10:42,280 INFO sync.util :: FINISHED: Cache field values in exasol Database 2 'VirtualBox' (1,9 s)

Hi @kaklakariada
Try looking at the exception we added to the BigQuery driver for another special type:
https://github.com/metabase/metabase/pull/17907/files
Metabase currently doesn't support Geometry type, which also causes some problems for other drivers:
https://github.com/metabase/metabase/issues/12724

I am not sure how I can apply the changes from the links in this situation. Querying the GEOMETRY column works and returns a string like POINT(2 5). It's just the error message I want to avoid.

According to field_values.clj and function field-should-have-field-values? fields are skipped when their visibility is :hidden :details-only, so the workaround seems to be to modify the field settings, unless you have another idea.

See https://github.com/exasol/metabase-driver/issues/20 for details.

@kaklakariada Yeah points are not supported: https://github.com/metabase/metabase/issues/2327
I would probably ignore the type completely, when Metabase is scanning for values.
Alternatively try doing this, which JSON is not scanned for values:
https://github.com/metabase/metabase/blob/master/modules/drivers/snowflake/src/metabase/driver/snowflake.clj#L111