Clickhouse common errors
425 plugins, 2,810 skills, 200 agents for Claude Code. Open-source marketplace at tonsofskills.com with the ccpi CLI package manager.
npx -y skills add jeremylongshore/claude-code-plugins-plus-skills --skill clickhouse-common-errorsAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
What its author says it does
Copied from the file, not written here
Diagnose and fix the top 15 ClickHouse errors — query failures, insert problems, memory limits, and merge issues. Use when a ClickHouse query or insert throws an exception, a server-side error appears in logs, or a failed query needs root-cause analysis. Trigger with "clickhouse error", "fix clickhouse", "clickhouse not working", "debug clickhouse", "clickhouse exception", "clickhouse syntax error".
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
5.8 KB, as published. Nobody here has run it
ClickHouse Common Errors
Overview
Quick reference for the most common ClickHouse errors with real error codes, diagnostic queries, and proven solutions. The three highest-frequency errors are inline below; the full catalog of 10 errors plus system-table diagnostics lives in references/error-reference.md.
Prerequisites
- Access to a ClickHouse endpoint — either the native
clickhouse-clientor the HTTP interface (curlagainst:8123). - Permission to read the
system.*introspection tables (system.parts,system.processes,system.query_log,system.columns,system.replicas). - The failing statement's text and, ideally, the raw exception string — the
parenthetical name (e.g.
MEMORY_LIMIT_EXCEEDED) and numeric code drive lookup.
Instructions
Follow this loop to turn a raw ClickHouse exception into a verified fix:
- Capture the exception name and code. Read the error string the client
returned. If you only have a log file, use
Grepto pull the matching line —GrepforDB::Exceptionor a specific token likeMEMORY_LIMIT_EXCEEDEDacross the log to isolate the failure. - Map it to a category. Use the Error Handling code table to classify the error as Schema, Query, Performance, Permissions, Concurrency, Resources, or Insert-pattern.
- Apply the inline fix for the three top errors (Too Many Parts, Memory Limit, Syntax) below, or open references/error-reference.md for the other seven plus copy-paste diagnostic queries.
- Confirm with a system table. Re-run the relevant
system.*query (part count,system.processes,system.query_log) to prove the condition cleared rather than assuming the fix took.
Top 3 errors (inline)
Too Many Parts (Code 252) — hundreds of tiny inserts outpace merges:
-- Check current part count per table
SELECT database, table, count() AS part_count
FROM system.parts WHERE active GROUP BY database, table ORDER BY part_count DESC;
-- Temporary relief; permanent fix is batching (10K+ rows per INSERT)
ALTER TABLE events MODIFY SETTING parts_to_throw_insert = 1000; -- default 300
Memory Limit Exceeded (Code 241) — query wants more RAM than max_memory_usage:
SET max_memory_usage = 20000000000; -- 20GB for this query, OR
SET max_bytes_before_external_group_by = 10000000000; -- spill big GROUP BY to disk
Syntax Error (Code 62) — most often MySQL habits leaking in:
SELECT "user_id" FROM events; -- double-quote (not `backtick`) identifiers
SELECT * FROM events LIMIT 10 OFFSET 20; -- OFFSET keyword, not LIMIT 10, 20
See references/error-reference.md for Unknown Table, Timeout, DateTime parsing, Readonly, No Such Column, Type Mismatch, and Distributed-table errors.
Output
Working through this skill produces:
- A classified diagnosis — the error name, numeric code, and category from the table below.
- A concrete remediation — the exact
SET,ALTER, or corrected SQL to run, plus whether it is a temporary relief valve or a permanent fix. - A verification query against a
system.*table confirming the condition cleared (e.g. part count back under threshold, no query stuck insystem.processes).
Error Handling
| Error Code | Name | Category |
|---|---|---|
| 16 | NO_SUCH_COLUMN_IN_TABLE | Schema |
| 60 | UNKNOWN_TABLE | Schema |
| 62 | SYNTAX_ERROR | Query |
| 159 | TIMEOUT_EXCEEDED | Performance |
| 164 | READONLY | Permissions |
| 202 | TOO_MANY_SIMULTANEOUS_QUERIES | Concurrency |
| 241 | MEMORY_LIMIT_EXCEEDED | Resources |
| 252 | TOO_MANY_PARTS | Insert pattern |
If the error name is not in this table, search the raw exception text against the
Error Codes Reference and inspect
system.query_log (WHERE type = 'ExceptionWhileProcessing') for the full
server-side context.
Examples
Diagnosing a stalled insert pipeline. Inserts start failing with
Too many parts (600). Classify as code 252 (Insert pattern), run the
system.parts count query to see which table is affected, raise
parts_to_throw_insert for immediate relief, then switch the writer to batched
inserts. Full walkthrough and the other nine errors are in
references/error-reference.md.
Killing a runaway query. A dashboard query hangs. Query system.processes
to find its query_id, then KILL QUERY WHERE query_id = '...'. The complete
set of diagnostic queries (running queries, recent errors, disk usage, merge
health) lives in the Diagnostic Queries section of
references/error-reference.md.
Resources
- Error Codes Reference
- System Tables
- Query Log
- references/error-reference.md — full 10-error catalog plus diagnostic queries
- For comprehensive debugging, see the
clickhouse-debug-bundleskill.