ClickHouse / metabase-clickhouse-driver

ClickHouse database driver for the Metabase business intelligence front-end
Apache License 2.0
461 stars 84 forks source link

No method in multimethod 'connection-details->spec' for dispatch value: :clickhouse #228

Closed mkherlakian closed 4 months ago

mkherlakian commented 4 months ago

Describe the bug

We're getting the following error message on the latest Metabase release (1.49.0-RC2) and driver version 1.3.4:

No method in multimethod 'connection-details->spec' for dispatch value: :clickhouse

Expected behaviour

Error log

:running_time 0,
:row_count 0,
:error "No method in multimethod   'connection-details->spec' for dispatch value: :clickhouse",
:context :question,
:card_id 284,
"query_processor.reducible$async_qp$qp_STAR___62566$fn__62570.invoke(reducible.clj:131)"],
"query_processor.reducible$async_qp$qp_STAR___62566$thunk__62568.invoke(reducible.clj:126)"
"query_processor.middleware.catch_exceptions$catch_exceptions$fn__72635.invoke(catch_exceptions.clj:171)"
"query_processor.middleware.process_userland_query$process_userland_query$fn__72034.invoke(process_userland_query.clj:156)"
"query_processor.middleware.constraints$mark_needs_default_userland_constraints$fn__70868.invoke(constraints.clj:104)"
"query_processor.middleware.enterprise$handle_audit_app_internal_queries_middleware$fn__71749.invoke(enterprise.clj:103)"
"query_processor.middleware.enterprise$fn__71738$handle_audit_app_internal_queries__71739$fn__71741.invoke(enterprise.clj:96)"
"query_processor.middleware.normalize_query$normalize$fn__72103.invoke(normalize_query.clj:38)"
"query_processor.middleware.resolve_database_and_driver$resolve_database$fn__71798.invoke(resolve_database_and_driver.clj:60)"
"query_processor.middleware.store$initialize_store$fn__66984.invoke(store.clj:13)"
"query_processor.store$do_with_metadata_provider.invoke(store.clj:150)"
"query_processor.store$do_with_metadata_provider.invokeStatic(store.clj:158)"
"query_processor.store$do_with_metadata_provider.invoke(store.clj:150)"
"query_processor.store$do_with_metadata_provider.invokeStatic(store.clj:169)"
"query_processor.middleware.store$initialize_store$fn__66984$fn__66985.invoke(store.clj:14)"
"query_processor.middleware.resolve_database_and_driver$resolve_driver_and_database_local_values$fn__71801.invoke(resolve_database_and_driver.clj:76)"
"driver$do_with_driver.invoke(driver.clj:92)"
"driver$do_with_driver.invokeStatic(driver.clj:97)"
"query_processor.middleware.resolve_database_and_driver$resolve_driver_and_database_local_values$fn__71801$fn__71805.invoke(resolve_database_and_driver.clj:77)"
"query_processor.middleware.fetch_source_query$resolve_card_id_source_tables$fn__66407.invoke(fetch_source_query.clj:303)"
"query_processor$fn__73035$combined_pre_process__73036$combined_pre_process_STAR___73037.invoke(query_processor.clj:259)"
"query_processor$fn__73035$combined_post_process__73040$combined_post_process_STAR___73041.invoke(query_processor.clj:262)"
"query_processor.middleware.mbql_to_native$mbql__GT_native$fn__71153.invoke(mbql_to_native.clj:24)"
"query_processor.middleware.enterprise$maybe_apply_column_level_perms_check_middleware$fn__71721.invoke(enterprise.clj:64)"
"query_processor.middleware.enterprise$check_download_permissions_middleware$fn__71711.invoke(enterprise.clj:51)"
"query_processor.middleware.permissions$check_query_permissions$fn__66310.invoke(permissions.clj:140)"
"query_processor.middleware.cache$maybe_return_cached_results$maybe_return_cached_results_STAR___71890.invoke(cache.clj:228)"
"query_processor.middleware.cache$run_query_with_cache.invoke(cache.clj:186)"
"query_processor.middleware.cache$run_query_with_cache.invokeStatic(cache.clj:202)"
"query_processor.reducible$identity_qp.invoke(reducible.clj:36)"
"query_processor.reducible$identity_qp.invokeStatic(reducible.clj:39)"
"query_processor.context$runf.invoke(context.clj:40)"
"query_processor.context$runf.invokeStatic(context.clj:46)"
"query_processor.context.default$default_runf.invoke(default.clj:42)"
"query_processor.context.default$default_runf.invokeStatic(default.clj:44)"
"query_processor.context$executef.invoke(context.clj:49)"
"query_processor.context$executef.invokeStatic(context.clj:60)"
"driver.sql_jdbc$fn__106231.invoke(sql_jdbc.clj:76)"
"driver.sql_jdbc$fn__106231.invokeStatic(sql_jdbc.clj:78)"
"driver.sql_jdbc.execute$execute_reducible_query.invoke(execute.clj:678)"
"driver.sql_jdbc.execute$execute_reducible_query.invokeStatic(execute.clj:689)"
"driver.sql_jdbc.execute$execute_reducible_query.invoke(execute.clj:678)"
"driver.sql_jdbc.execute$execute_reducible_query.invokeStatic(execute.clj:692)"
"driver.sql_jdbc.execute$fn__78754.invoke(execute.clj:380)"
"driver.sql_jdbc.execute$fn__78754.invokeStatic(execute.clj:382)"
"driver.sql_jdbc.execute$do_with_resolved_connection.invoke(execute.clj:317)"
"driver.sql_jdbc.execute$do_with_resolved_connection.invokeStatic(execute.clj:333)"
"driver.sql_jdbc.execute$do_with_resolved_connection_data_source.invoke(execute.clj:255)"
"driver.sql_jdbc.execute$do_with_resolved_connection_data_source.invokeStatic(execute.clj:296)"
"driver.sql_jdbc.execute$datasource_with_diagnostic_info_BANG_.invoke(execute.clj:199)"
"driver.sql_jdbc.execute$datasource_with_diagnostic_info_BANG_.invokeStatic(execute.clj:204)"
"driver.sql_jdbc.execute$datasource.invoke(execute.clj:193)"
"driver.sql_jdbc.execute$datasource.invokeStatic(execute.clj:197)"
"driver.sql_jdbc.connection$db__GT_pooled_connection_spec.invoke(connection.clj:228)"
"driver.sql_jdbc.connection$db__GT_pooled_connection_spec.invokeStatic(connection.clj:288)"
"driver.sql_jdbc.connection$create_pool_BANG_.invoke(connection.clj:160)"
"-->   driver.sql_jdbc.connection$create_pool_BANG_.invokeStatic(connection.clj:168)"
"clojure.lang.MultiFn.invoke(MultiFn.java:233)"
["clojure.lang.MultiFn.getFn(MultiFn.java:156)"
:stacktrace
:class java.lang.IllegalArgumentException,
:status :failed,
:cache-ttl 7},
:async? true,
:parameters [],
:database 7,
:viz-settings nil,
:template-tags {}},
"SELECT toStartOfMinute(time),   round(quantile(0.99)(duration)/1000000,3) as p99_ingest_to_first_attempt   \nFROM uptrace.spans_index AS s \nWHERE s.name='ingestToFirstAttempt' \nAND   (s.attr_values[indexOf(s.attr_keys, 'rate_limited')] = 'false') \nAND   (s.attr_values[indexOf(s.attr_keys, 'ingest_priority')] = 'NORMAL') \nAND   (s.attr_values[indexOf(s.attr_keys, 'was_scheduled')] != 'true') \nAND time   > now() - interval 1 hour \ngroup by 1",
{:query
:native
:middleware {:js-int-to-string? true, :ignore-cached-results? false,   :process-viz-settings? false},
:type :native,
{:constraints {:max-results 10000,   :max-results-bare-rows 2000},
:json_query
:action_id nil,
:started_at #t   "2024-03-06T18:16:11.468328Z[GMT]",
{:database_id 7,
2024-03-06 18:16:11,493 ERROR   middleware.catch-exceptions :: Error processing query: No method in   multimethod 'connection-details->spec' for dispatch value: :clickhouse
2024-03-06 18:16:11,465 INFO   query-processor.card :: Question's average execution duration is 739.0 ms;   using 'magic' TTL of 7.0 s üíæ
2024-03-06 18:16:11,395 DEBUG   middleware.log :: GET /api/alert/question/284 200 8.0 ms (1 DB   calls) App DB connections: 1/15 Jetty threads: 4/50 (10 idle, 0 queued) (124   total active threads) Queries in flight: 0 (0 queued)
2024-03-06 18:16:09,833 DEBUG   middleware.log :: POST /api/dashboard/6/dashcard/68/card/81/query   202 [ASYNC: completed] 847.3 ms (14 DB calls) App DB connections: 1/15 Jetty   threads: 3/50 (10 idle, 0 queued) (124 total active threads) Queries in flight:   0 (0 queued)

Configuration

Environment

ClickHouse server

mkherlakian commented 4 months ago

Never mind, CI hadn't properly deployed, 1.3.4 works fine. Sorry for the false alarm.

slvrtrn commented 4 months ago

@mkherlakian, no worries; please don't hesitate to open issues if you have questions.

NB: if 1.3.4 does not work properly with 0.49.0-RC2, please let me know; I will then adjust the current 0.49.x branch #218 and release a new driver version.

mkherlakian commented 4 months ago

All looking good so far, I'll let you know if we encounter any issues. Thanks @slvrtrn !!