# @chkit/plugin-backfill 中文文档

规范地址：https://npmcn.com/package/%40chkit/plugin-backfill/

版本：0\.2\.0-beta\.16
npm 元数据更新时间：2026-11-08T23:59:15.673Z
中文译文更新时间：2026-11-09T13:59:08.264Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40chkit/plugin-backfill
原文对照：https://npmcn.com/package/%40chkit/plugin-backfill/?lang=original
项目主页：https://chkit.obsessiondb.com/
源码仓库：https://github.com/obsessiondb/chkit

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：410 kB，150 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：5 个
- 首次发布：2026-02-15T22:42:20.947Z
- 最新版本发布：2026-11-08T23:59:15.366Z
- 近 30 天下载量：11677（2026-10-10 至 2026-11-08，npm 官方下载统计）
- 已发布版本数：43（近 12 个月 43 个）

## 中文简介

时间窗口数据回填chkit检查站

## 安装

```sh
npm install @chkit/plugin-backfill
```

也可以使用：`pnpm add @chkit/plugin-backfill`、`yarn add @chkit/plugin-backfill`、`bun add @chkit/plugin-backfill`

## README

# @ chkit/ 插件回填

在 chkit 中检查 SQL 回填操作的 Beta 插件 。 它的API,配置,和CLI旗在发行之间可能会有变化.

部分 [齐克特](https://github.com/obsessiondb/chkit) 单相机 此插件扩展 [`chkit`](https://www.npmjs.com/package/chkit) 有数据回填命令的 CLI.

## 安装

```sh
bun add -d @chkit/plugin-backfill
```

## 使用量

在配置中注册插件 :

```ts
// clickhouse.config.ts
import { defineConfig } from '@chkit/core'
import { backfill } from '@chkit/plugin-backfill'

export default defineConfig({
  schema: './src/db/schema/**/*.ts',
  outDir: './chkit',
  plugins: [
    backfill(),
  ],
  clickhouse: {
    url: process.env.CLICKHOUSE_URL ?? 'http://localhost:8123',
  },
})
```

## 文档

见 [回填插件文档 (β)](https://chkit.obsessiondb.com/plugins/backfill/)。 。 。 .

## SDK 软件

包根仅限于插件注册 API. CLI本身使用的一切——块规划器, SQL 构建器, Async 执行器, 记录器—— 也从 `@chkit/plugin-backfill/sdk` 子路径, 这样您可以建立自己的回填脚本而不通过 CLI .

```ts
import {
  generateChunkPlan,
  buildChunkExecutionSql,
  executeBackfill,
  getBackfillLogger,
  type ChunkPlan,
  type PlannerQuery,
} from '@chkit/plugin-backfill/sdk'
```

管道有三个阶段, 你可以使用任何子集:

1.  **计划** —— 说 `generateChunkPlan(...)` 内览表格并返回 a `ChunkPlan` 描述如何将工作分割成大致相等的块.
2.  **构建 SQL** —— 说 `buildChunkExecutionSql(...)` 单曲 `Chunk` 变成 `INSERT … SELECT` 语句.
3.  **执行** —— 说 `executeBackfill(...)` 以实数提交块 `ClickHouseExecutor` 有决定性的查询 身份证,投票,并恢复支持.

### 计划回填

`generateChunkPlan` 与任何 ClickHouse 客户端脱钩。 你通过一个 `query` 函数与 `PlannerQuery` 形状和规划者将它用于每个内向 / 探测 / 分解查询。 这使得策划者对仪器来说无足轻重,或者对另类客户奔跑.

```ts
import { createClient } from '@clickhouse/client'
import { generateChunkPlan, type PlannerQuery } from '@chkit/plugin-backfill/sdk'

const client = createClient({ url: process.env.CLICKHOUSE_URL })

const query: PlannerQuery = async (sql, settings) => {
  const result = await client.query({
    query: sql,
    format: 'JSONEachRow',
    clickhouse_settings: settings as Record<string, string | number | boolean>,
  })
  return result.json()
}

const plan = await generateChunkPlan({
  database: 'analytics',
  table: 'events',
  from: '2025-01-01T00:00:00Z',
  to: '2025-02-01T00:00:00Z',
  targetChunkBytes: 1_000_000_000, // ~1 GiB per chunk
  query,
  // 'count' is exact but slower; 'explain-estimate' is faster but approximate
  rowProbeStrategy: 'count',
})

console.log(`${plan.chunks.length} chunks, ${plan.totalRows.toLocaleString()} rows`)
```

### 对目标执行块

`buildChunkExecutionSql` 生成每圆 `INSERT … SELECT` 财务报告和审定财务报表 `executeBackfill` 以货币、投票和回调方式运行。 坚持下去 `progress` 用于支持恢复的参数.

```ts
import { createClickHouseExecutor } from '@chkit/clickhouse'
import {
  buildChunkExecutionSql,
  executeBackfill,
  type BackfillProgress,
} from '@chkit/plugin-backfill/sdk'

const executor = createClickHouseExecutor({
  url: process.env.CLICKHOUSE_URL!,
  username: 'default',
  password: process.env.CLICKHOUSE_PASSWORD!,
  database: 'analytics',
})

const chunksById = new Map(plan.chunks.map((chunk) => [chunk.id, chunk]))
let saved: BackfillProgress | undefined // load from disk for resume

const result = await executeBackfill({
  executor,
  planId: plan.planId,
  chunks: plan.chunks,
  buildQuery: ({ id }) =>
    buildChunkExecutionSql({
      planId: plan.planId,
      chunk: chunksById.get(id)!,
      target: 'analytics.events_backfill',
      table: plan.table,
    }),
  concurrency: 4,
  pollIntervalMs: 5_000,
  resumeFrom: saved,
  onProgress: async (progress) => {
    saved = progress
    // persist to disk / state store
  },
})

console.log(`done=${result.completed} failed=${result.failed}`)
```

### 计划的持久性

计划中包含可能包含非UTF-8字节的字符串边界(计划员使用) `latin1`\- 字符串排序键的编码字节范围),所以 JSON 序列化 a `ChunkPlan` 直接丢失信息 。 当您需要通过存储来绕行一个计划时使用代码帮助器 :

```ts
import {
  encodeChunkPlanForPersistence,
  decodeChunkPlanFromPersistence,
} from '@chkit/plugin-backfill/sdk'

const json = JSON.stringify(encodeChunkPlanForPersistence(plan))
// later …
const plan2 = decodeChunkPlanFromPersistence(JSON.parse(json))
```

### 日志

计划员通过结构化的日志 [`@logtape/logtape`](https://logtape.org/) 下划线 `['chkit', 'backfill']` 类别。 在进程开始时配置一个水槽以看到它们 —— 缓冲警告( > 5 s) 发布于 `warning` 职等,规划进展 `info`,并按战略作出决定 `debug`。 。 。 .

```ts
import { configureSync, getConsoleSink, getTextFormatter } from '@chkit/plugin-backfill/sdk'

configureSync({
  sinks: { console: getConsoleSink({ formatter: getTextFormatter({ timestamp: 'time' }) }) },
  loggers: [{ category: 'chkit', sinks: ['console'], lowestLevel: 'info' }],
  reset: true,
})
```

为了捕捉每个 SQL 语句, 计划员运行( 有时间、 服务器侧数据、 和每个策略分类), 包入您的 `query` 函数而不是仅仅依赖日志 —— 包装器在每次调用时都会看到原始的 SQL 和设置,并且可以在结构化日志的同时记录查询ID,响应头和持续时间.

## 许可证

[麻省理工学院](https://npmcn.com/package/LICENSE)

## 常见问题

### @chkit/plugin-backfill 是什么？

时间窗口数据回填chkit检查站

### 如何安装 @chkit/plugin-backfill？

在项目目录运行 npm install @chkit/plugin-backfill，或使用 pnpm add / yarn add / bun add。

### @chkit/plugin-backfill 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @chkit/plugin-backfill 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @chkit/plugin-backfill 可以商用吗？

@chkit/plugin-backfill 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @chkit/plugin-backfill 的下载量有多少？

根据 npm 官方下载统计，@chkit/plugin-backfill 在 2026/10/10 – 2026/11/08 这 30 天内被下载 11,677 次，日均约 389 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @chkit/plugin-backfill 还在维护吗？

最新版本 0\.2\.0-beta\.16 发布于 2026/11/09（今天）；至今共发布 43 个版本，其中过去 12 个月发布了 43 个；首次发布于 2026/02/16。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

