@chkit/plugin-backfill

中文文档
0.2.0-beta.16发布于 2026/11/09MITTypeScriptES Module构建来源已验证近 30 天下载 1.2万

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

中文使用文档
文档目录9 节
  1. 安装
  2. 使用量
  3. 文档
  4. SDK 软件
  5. 计划回填
  6. 对目标执行块
  7. 计划的持久性
  8. 日志
  9. 许可证

@ chkit/ 插件回填

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

部分 齐克特 单相机 此插件扩展 chkit 有数据回填命令的 CLI.

安装

bun add -d @chkit/plugin-backfill

使用量

在配置中注册插件 :

// 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',
  },
})

文档

见 回填插件文档 (β)。 。 。 .

SDK 软件

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

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 形状和规划者将它用于每个内向 / 探测 / 分解查询。 这使得策划者对仪器来说无足轻重,或者对另类客户奔跑.

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 用于支持恢复的参数.

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 直接丢失信息 。 当您需要通过存储来绕行一个计划时使用代码帮助器 :

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

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

日志

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

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,响应头和持续时间.

许可证

麻省理工学院

版本与发布记录

@chkit/plugin-backfill 共发布 43 个版本,首次发布于 2026/02/16;过去 12 个月发布了 43 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.2.0-beta.16latest2026/11/09今天
0.2.0-beta.142026/11/081 天前
0.2.0-beta.132026/11/081 天前
0.2.0-beta.122026/11/045 天前
0.2.0-beta.112026/10/1228 天前
0.2.0-beta.82026/09/291 个月前

关于 @chkit/plugin-backfill 的常见问题

@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 和提交记录判断。