К основному содержанию
скилл CX Codex

clickhouse-js-node-rowbinary — скилл для Claude Code

Генерирует TypeScript и JavaScript для чтения и записи потоков ClickHouse RowBinary в Node.js. Нужен при работе с двоичным HTTP-форматом таблиц.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add ClickHouse/agent-skills --skill clickhouse-js-node-rowbinary -a claude-code
Открыть на GitHub

Что делает clickhouse-js-node-rowbinary

Скилл создаёт кодек в обе стороны: декодирует байты ответа ClickHouse в значения JavaScript и кодирует значения в RowBinary для HTTP-запроса. Поддерживает RowBinary, RowBinaryWithNames и RowBinaryWithNamesAndTypes. Обычно для задачи нужен либо читатель, либо писатель.

Для чтения есть указания по потоковой обработке, буферу целиком, объектам строк и столбцовому представлению. Для записи описаны блоки Sink, методы writeX и потоковый writeRows. Код по умолчанию генерируется на TypeScript; операции конкретных типов встраиваются в цикл строк, а над блоком столбца остаётся комментарий с типом ClickHouse.

Многобайтные значения нужно читать и записывать через DataView с литералом true для little-endian. Общий буфер для горячих операций нельзя разделять через границу async или yield, потому что это испортит значение. Для браузерного проекта этот скилл не подходит: он рассчитан только на Node.js.

Какие задачи решает

  • декодировать ответ ClickHouse в формате RowBinary
  • сформировать RowBinary-тело для HTTP-запроса
  • обработать RowBinaryWithNames со строковыми именами столбцов
  • сгенерировать код для числовых и двоичных типов ClickHouse

Примеры запросов агенту

  • Сгенерируй TypeScript-код для декодирования ответа RowBinary от ClickHouse.
  • Напиши кодировщик значений JavaScript в RowBinary для HTTP-запроса.
  • Помоги прочитать поток RowBinaryWithNamesAndTypes в Node.js.

Как установить clickhouse-js-node-rowbinary

1Через Skills CLI (Vercel)

npx skills add ClickHouse/agent-skills --skill clickhouse-js-node-rowbinary -a claude-code

2Вручную: положить файлы

~/.claude/skills/clickhouse-js-node-rowbinary/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/clickhouse-js-node-rowbinary/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о clickhouse-js-node-rowbinary

Как установить clickhouse-js-node-rowbinary в Claude Code?

Выполните npx skills add ClickHouse/agent-skills --skill clickhouse-js-node-rowbinary -a claude-code, затем повторите npx skills add ClickHouse/agent-skills --skill clickhouse-js-node-rowbinary -a claude-code. Файл скилла расположен в ~/.claude/skills/clickhouse-js-node-rowbinary/SKILL.md.

Что делает clickhouse-js-node-rowbinary?

Скилл генерирует TypeScript или JavaScript для декодирования и кодирования потоков ClickHouse RowBinary, включая варианты с именами и типами столбцов.

Можно ли использовать clickhouse-js-node-rowbinary в браузере?

Нет, скилл ориентирован на Node.js. Для Browser, Web Worker и Edge указан @clickhouse/client-web.

Исходный текст

SKILL.md · Apache-2.0
---
name: clickhouse-js-node-rowbinary
description: >
  Generate TypeScript/JavaScript code that reads/decodes AND writes/encodes
  ClickHouse RowBinary streams for the ClickHouse HTTP server.
  Use this skill whenever a user wants to parse or produce `RowBinary`,
  `RowBinaryWithNames`, or `RowBinaryWithNamesAndTypes`.
  Node.js only, doesn't cover browsers.
---

# ClickHouse JS RowBinary Codec Generator for Node.js

This skill generates both directions of the wire format: **readers** (decode
bytes → values) and **writers** (encode values → bytes, the mirror). A given
task normally needs only one side. This file is the shared entry point — the
format gate plus the principles common to both directions; the per-direction
decisions, guidance, and the per-type reference tables live in two sibling files.

**Pick your side — read only the one you need:**

- **Decoding a `RowBinary*` response** from ClickHouse into JS values →
  **[reader.md](reader.md)**. Streaming vs whole-buffer, row-objects vs columnar,
  fixed vs runtime schema, and the per-type reader reference.
- **Encoding JS values into a `RowBinary` payload** to send to ClickHouse →
  **[writer.md](writer.md)**. The `Sink`/`writeX` building blocks, `writeRows`
  streaming, and the per-type writer reference.

The per-type code is real, split by direction under `src/readers/` and
`src/writers/`.

## First: is RowBinary even the right format?

RowBinary exists for throughput, but it is **not automatically the fastest
path** — match the format to the shape of the data before committing to a
bespoke parser.

**Prefer a `JSON*` format (e.g. `JSONEachRow`) when** the result is mostly
strings / JSON-like values that you consume wholesale — randomly accessing
essentially every field, running string/regexp methods on them, treating values
as text. V8's native `JSON.parse` is heavily optimized C++ and builds JS strings
and objects faster than a JS-level RowBinary decoder can; pair it with HTTP
response compression (`gzip` / `zstd`, which crushes JSON's repetitive keys) and
the wire cost shrinks too.

**RowBinary clearly wins when** the result is dominated by:

- **Wide numerics** — `Int128`/`Int256`/`UInt128`/`UInt256`,
  `Decimal128`/`Decimal256`.
- **Binary / fixed-width blobs** — `IPv4`, `IPv6`, `UUID`, `FixedString`.
- **High-volume fixed-width numeric columns** generally, where each value is a
  single `DataView` read.

**Prefer the `Native` format when** columnar load and client-side analytics are
the main goal (fold/scan/filter columns, feed typed arrays to a Worker or WASM).
`Native` is column-major, so it loads straight into one typed array per column
with no transpose.

For help choosing and consuming a `JSON*` format (or CSV / TSV) instead, use the
**`clickhouse-js-node-coding`** skill.

## Core guidance (both directions)

These principles apply whether you are generating a reader or a writer; the
side-specific operational guidance is in [reader.md](reader.md) /
[writer.md](writer.md).

- **Little-endian only.** RowBinary is little-endian; target x86/ARM. Read and
  write every multi-byte number with `DataView` accessors passing a **literal**
  `true` for the `littleEndian` flag.

- **Correct first, then optimize.** First emit a correct codec built from the
  plain per-type API. Only after it's correct (and tested) specialize it. Don't
  bake performance assumptions in before correctness.

- **Monomorphize generic/composite types.** Emit specialized, inlined code per
  type combination instead of passing functions as arguments where the type is
  known ahead of time.

- **Inline the leaf ops.** The per-type `readX`/`writeX` functions are the
  correct, composable reference; the generated codec should INLINE their bodies,
  not call them, so the row loop is straight-line with no per-field indirection
  (and so the fixed-width coalescing can fold the offset arithmetic together).

- **Annotate the type per column.** Inlining erases the type structure, so put a
  short comment above each column's encode/decode block naming the ClickHouse
  type it handles.

- **Shared scratch is not reentrant.** Some hot methods reuse a module-level
  scratch buffer as a write-then-read pair — correct only because the access is
  fully synchronous. An `async`/`yield` boundary between populating and reading
  it corrupts the value.

- **TypeScript by default.** Generate TypeScript code and helpers unless the user
  explicitly asks for plain JavaScript.

## Worked examples

Six end-to-end examples with real speedup are catalogued in [EXAMPLES.md](EXAMPLES.md).

## Out of scope

- **JSON / CSV / TSV / Parquet parsing** → use `clickhouse-js-node-coding`.
- **Connection errors, hangs, type mismatches** → use
  `clickhouse-js-node-troubleshooting`.
- **Browser / Web Worker / Edge** → `@clickhouse/client-web`.

## Still Stuck?

- [ClickHouse RowBinary format](https://clickhouse.com/docs/interfaces/formats#rowbinary)
- [ClickHouse data types](https://clickhouse.com/docs/sql-reference/data-types)
- [ClickHouse JS client docs](https://clickhouse.com/docs/integrations/javascript)

© ClickHouse · Apache-2.0 · ClickHouse/agent-skills

Похожие скиллы

Все скиллы по теме «Данные и базы» →
clickhouse-io affaan-m Справочник архитектурных шаблонов и оптимизации ClickHouse: помогает проектировать таблицы на движках MergeTree и ускорять медленные аналитические запросы. CX Codex +1 4 500установок node mcollina Даёт агенту правила для Node.js и TypeScript: от запуска .ts без сборки до потоков, тестов и остановки сервиса. CX Codex +1 5 900установок sentry-node-sdk getsentry Скилл сканирует проект и ведёт по шагам подключения Sentry к серверному JavaScript и TypeScript: ошибки, трейсинг, логи, кроны. CX Codex +1 3 300установок bun-runtime affaan-m Скилл объясняет агенту, когда брать Bun вместо Node, и даёт команды для установки, тестов и деплоя на Vercel. CX Codex +1 4 700установок bun-development sickn33 Скилл помогает вести JavaScript и TypeScript-разработку на Bun: создавать проекты, переносить код с Node.js и разбирать проблемы рантайма. CX Codex +1 2 800установок File Analysis API with Node.js and Express [email protected] Промпт для разбора загруженных файлов в API на Express: добавляет логику анализа, не ломая формат ответа. GP ChatGPT ★ 174 597звёзд репо

Из того же набора8

clickhouse-best-practices Скилл с набором правил для проверки схем, запросов и конфигураций ClickHouse. Помогает агентам избежать типичных ошибок в дизайне таблиц, оптимизации JOIN и батчировании данных. CX Codex +1 21 700установок clickhouse-architecture-advisor Помогает спроектировать архитектуру ClickHouse под конкретный тип нагрузки: от стратегии вставки до партиционирования. Дополняет clickhouse-best-practices ссылками на документацию. CX Codex +1 9 800установок chdb-sql Скилл учит агента писать аналитический SQL по parquet, CSV, S3 и удалённым базам через chDB — это ClickHouse, встроенный в процесс Python, сервер поднимать не нужно. CX Codex +1 8 900установок chdb-datastore Скилл учит агента ускорять код на pandas через chDB и движок ClickHouse. Пригодится для тяжёлых выборок, паркета и объединения разных баз данных. CX Codex +1 7 900установок clickhouse-js-node-troubleshooting Помогает находить и устранять сбои в Node.js-клиенте @clickhouse/client: обрывы сокетов, ошибки типов данных и проблемы с TLS. CX Codex +1 7 600установок clickhouse-js-node-coding Помогает агенту писать код с пакетом @clickhouse/client: подключение, вставка строк, выборки, параметры запросов. CX Codex +1 7 000установок clickhouse-managed-postgres-rca Ищет причины просадки производительности ClickHouse-managed Postgres по метрикам Prometheus и Slow Query Patterns, предлагая исправления без их применения. CX Codex +1 6 600установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой