Skip to content

status: ClickHouse PR #117740 re-verified on v2026.10.08 - #329

Draft
turbolytics wants to merge 6 commits into
mainfrom
docs-status/clickhouse-117740
Draft

turbolytics wants to merge 6 commits into
mainfrom
docs-status/clickhouse-117740

Conversation

@turbolytics

@turbolytics turbolytics commented Sep 18, 2026 •

Copy link
Copy Markdown
Owner

What this changes

Adds docs/superpowers/status/clickhouse-117740/: the evidence behind the
ClickHouse integration page,
re-verified on v2026.10.08, the harness that produced it, and a draft of the
page with every finding applied. No engine code changes.

Eight claims on the page are wrong. Three are the reviewer's open majors:

  • The VARCHAR, UUID, JSON row presents a cross-product the type matrix
    never proved. Each destination is proven with its own text form.
  • A NULL into a non-Nullable Enum8 with no zero member writes a row that
    cannot be read back. SELECT fails with UNKNOWN_ELEMENT_OF_ENUM.
  • ReplacingMergeTree collapses replay duplicates on a background merge, not
    on read. Self-hosted: 4 rows, 2 with FINAL.

Five more came out of re-running:

  • An unencodable value fails once as user.sink.encode_failed, exit 10. The
    page says it runs the retry ladder and reports system.sink.unreachable.
  • flush_interval_seconds has no floor of 30. Slow-moving data: liveness proven under trickle, surge, and silence #259 removed the comment that
    claimed one. This is a doc fix only.
  • Windows close on an event-time watermark. A replay of 1,000 events in one
    bucket, read in ten batches, publishes one row of 1,000.
  • The Docker Desktop port-forwarding throughput row no longer holds on 29.8.0.
  • The version pins are stale.

The taxi example, its Verify counts, the Bluesky example, the NULL cases, the
timestamp strings and the Decimal and to_json workarounds all reproduce.

One possible engine regression. v2026.10.08 ran about 13 percent slower
than v2026.09.17.1 on the same machine the same day. It is not bisected.

What breaks if this is wrong: nothing at runtime. The page draft would carry
a wrong claim to a third-party repo.

Still open

  1. The evidence layer: these scripts are configurations, not yet tests.
    The page is on the ClickHouse fork as d4e94780, with a reply on each open
    thread. Marking Docs: Add sqlflow integration page (data ingestion, community) ClickHouse/ClickHouse#117740 ready for review is the user's call.

Cloud was re-run on v2026.10.08 against Cloud 26.6.1. The Verify query
returns the same counts as self-hosted.

Verification

This branch adds one directory of Markdown, shell scripts and their output.
It changes no Go, no Python, no coverage registry and nothing on an
allocation path.

  • go test -short -race ./...
  • uv run --locked pytest tests/tooling -q
  • make coverage-page && git status --short docs/coverage is clean
  • uv run --locked pytest tests/release -q
  • make soak

The claims carry their own evidence. probes.out, dedup.out, win.out and
perf.out are the output of the scripts beside them, run on v2026.10.08,
self-hosted ClickHouse 26.8.1.2041, Cloud 26.6.1.2326, Kafka cp-kafka:7.3.2 and Docker Desktop
29.8.0.

Soak verdict

Not applicable. No code on an allocation path changed.

Seven wrong claims on the page, each reproduced on v2026.09.17.1 against
self-hosted 26.8.1 and Cloud 26.4.1: the reviewer's three open majors plus
the retry bullet, the flush_interval_seconds floor, the tumbling-window
bullet and the version pins. The taxi example, the NULL cases, the
timestamp strings and every link still hold, and the throughput numbers are
re-measured.

The harness is committed beside the status because it is the configuration
that reproduces each claim. The page's behavioral claims have no config and
no test behind them today, which is the gap the next session closes.

If this is lost, the next session re-runs a day of benchmarks to learn the
same seven things.
The 2026-09-18 findings were measured on v2026.09.17.1, five releases
back. Every one was re-run on v2026.10.08, and every one still holds.
Two of the open items are now closed, and two new findings came out.

- The flush_interval_seconds floor is a doc fix only. #259 removed the
  comment that claimed it, and the schema never enforced it.
- ReplacingMergeTree on self-hosted reads 4 rows, and 2 with FINAL,
  for a replayed block. A plain MergeTree keeps both copies.
- The Bluesky example landed 2,000 posts on self-hosted.
- Docker Desktop 29.8.0 has no port-forwarding cap: a host binary ran
  as fast as the in-network container. The page's third throughput
  row goes.
- v2026.10.08 ran about 13 percent slower than v2026.09.17.1 on the
  same machine the same day. Not bisected.

The window rig was rewritten for the watermark config. The old win.yml
no longer validates. sqlflow.mdx is the page with every finding
applied. It has not been pushed to the ClickHouse fork.

If this is wrong, nothing breaks at runtime. The page draft would carry
a wrong claim to a third-party repo, and STATUS.md names the output
behind each one.
@turbolytics
turbolytics force-pushed the docs-status/clickhouse-117740 branch from 83304b3 to 4241fd5 Compare October 10, 2026 10:30
@turbolytics turbolytics changed the title status: ClickHouse PR #117740 re-verification, paused status: ClickHouse PR #117740 re-verified on v2026.10.08 Oct 10, 2026
The draft page carried Cloud figures from v2026.09.17.1 and had dropped
its claim that Cloud and self-hosted return the same counts. Both are
now measured on v2026.10.08 against Cloud 26.6.1.

- The Verify query returns the same counts on Cloud as on self-hosted.
- Cloud ran 12,760 to 13,654 rows a second. September's image ran
  12,495 and 12,926 over the same link in the same hour, so the drop
  from 28,000 is the network, not the engine.
- One run read 980,000 rows right after exit. Cloud's insert logs show
  all 1,000,000 written and acknowledged after the flush. A replica that
  had not fetched the newest part served the read. perfcloud.sh now
  counts with select_sequential_consistency=1.

perfcloud.sh now reads ~/.sqlflow-clickhouse instead of taking the
password as an argument, where ps would show it.

If this is wrong, the page would tell readers Cloud and self-hosted
agree when they do not. cloudverify.out holds the counts.
v2026.10.08 ran about 11 percent slower than v2026.09.17.1 on the taxi
pipeline, 58,457 against 65,928 rows a second over three alternating
runs each. A bisect of the 87 main-branch commits between the tags,
built with one Go toolchain, finds two causes of about 6 percent each:

- #345 lowered the Kafka fetch defaults to cap read-ahead memory.
  Setting the old bounds in the fetch block restores 62,873 and 61,639.
- #338 bumped jsonparser past 1.2.0. Alone it costs the whole bump; the
  cost arrived in 1.3.0. Every other bump in #338 measures flat.

The user accepted both while memory stays flat. If the attribution is
wrong, the page's throughput figures still stand: they are measured on
the release they name. throughput-bisect.out holds every run.
The draft said a String column takes any UTF-8. The matrix proves it with
one value, so the cell now quotes that value, like every other row.
The user approved the push on 2026-10-10. The PR's head is now d4e94780,
each open thread has a reply, and the PR carries a summary comment.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant