apache / superset

Apache Superset is a Data Visualization and Data Exploration Platform
https://superset.apache.org/
Apache License 2.0
60.49k stars 13.07k forks source link

On KILL QUERY error "expected string or bytes-like object" in Clickhouse DB #29270

Open berlicon opened 2 weeks ago

berlicon commented 2 weeks ago

Bug description

I have error on Superset/SQL lab when tried to execute command: KILL QUERY WHERE query_id='091f6bf3-18b4-4977-89e7-ac9a038a242f' -- GUID of my query

Error: "ClickHouse Connect (Superset) Error - expected string or bytes-like object" Query Guid I can see in system.processes: https://clickhouse.com/docs/en/operations/system-tables/processes

I can kill query with this sql command according to: https://clickhouse.com/docs/en/sql-reference/statements/kill#kill-query

How to reproduce the bug

  1. I have Superset and Clickhouse DB connected
  2. Run long running query in Superset/SQL Lab: select * from mytable limit 100000
  3. Go to DBeaver and get active queries: select query_id, * from system.processes
  4. Execute query in another Superset/SQL Lab tab: KILL QUERY WHERE query_id='Guid from step 3'
  5. I have error on Superset: "ClickHouse Connect (Superset) Error - expected string or bytes-like object"

Screenshots/recordings

error on kill query

Superset version

master / latest-dev

Python version

3.9

Node version

16

Browser

Chrome

Additional context

No response

Checklist

dosubot[bot] commented 2 weeks ago

Hey @berlicon! I'm here to assist you with any bugs, questions, and contribute to the repository. Let's tackle this issue together!

To resolve the "ClickHouse Connect (Superset) Error - expected string or bytes-like object" when executing the KILL QUERY command in Superset/SQL Lab connected to a ClickHouse database, ensure that the parameters passed to the command are of the correct type (string or bytes-like object).

Here's a code snippet to properly format the KILL QUERY command:

query_id = "091f6bf3-18b4-4977-89e7-ac9a038a242f"  # Ensure this is a string
kill_query_command = f"KILL QUERY WHERE query_id = '{query_id}'"

# Execute the command
database.execute(kill_query_command)

Make sure that query_id is a string. If query_id is obtained from another source, convert it to a string before using it in the KILL QUERY command.

If the issue persists, check the implementation of the execute method in your database connection to ensure it correctly handles the KILL QUERY command [1].

To continue talking to Dosu, mention @dosu.