数据库
在 Node.js 中用…
当你在 Node.js 运行时(含 Next.js Node runtime、RSC、Server Actions)使用 @clickhouse/client 构建 ClickHouse 应用时,按任务索引查阅对应参考并遵循统一约定写代码。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
在 Node.js 中用 @clickh特定
解决思路
- 先按用户意图匹配 Task Index 中的任务行,阅读对应 reference 文件后再写代码;读完后对照该文件中的 Answer checklist,确保最终答案覆盖每个相关条目。
- 始终从 @clickhouse/client 导入(绝不用 @clickhouse/client-web),用 createClient({ url }) 创建客户端或使用受支持的默认值;不再需要时或全局资源优雅关闭时用 await client.close() 关闭。
- 典型行插入/查询优先使用 JSONEachRow,除非用户已选定其他格式或需要流式原始字节(CSV/TSV/Parquet,见 examples/node/performance/)。注意 clickhouse_settings:传给 createClient 的是每个请求的默认值,可在 insert()、query()、command() 中按调用传入 clickhouse_settings 覆盖;在客户端级别配置设置时必须说明这一点。
- 用户提供的值一律使用 query_params,绝不用模板字符串插值进 SQL(见 reference/query-parameters.md)。回答参数绑定问题时,即使只问语法也必须明确点名模板字符串插值是“SQL injection risk”,答案中必须出现字面短语“SQL injection”。
- 按用途选择方法:client.insert() 写行;client.query() + resultSet.json()/.text()/.stream() 读返回数据的行;client.command() 执行 DDL 及不返回行的语句(CREATE、DROP、TRUNCATE、ALTER、会话内 SET 等);client.exec() 用于需要任意语句原始响应流的罕见场景;client.ping() 做健康检查,返回 { success, error? },连接失败不抛异常。
- 相关时注明版本约束:pathname 配置需 client >= 1.0.0;query_params 中的 BigInt 需 client >= 1.15.0;TupleParam 与 JS Map 需 client >= 1.9.0;可配置 json.parse/json.stringify 需 client >= 1.14.0;Time/Time64 需 ClickHouse server >= 25.6;QBit 需 server >= 25.10(26.x GA);Dynamic/Variant/新 JSON 类型需 server >= 24.1/24.5/24.8(25.3 起不再实验)。
- 答案约定:始终展示 import { createClient } from '@clickhouse/client'(Node,绝不用 Web);自包含片段末尾始终 await client.close(),长驻服务在优雅关闭时关闭;插入优先 format: 'JSONEachRow' 与 values: [...];查询中小结果集优先 await (await client.query({...})).json<RowType>(),更大结果建议流式;参数绑定使用 ClickHouse 原生 {name: Type} 语法,绝不用 $1、? 或 :name。
- 在集群或负载均衡后执行 DDL 时,在 command() 调用上设置 clickhouse_settings: { wait_end_of_query: 1 },让服务器在变更应用后才确认(见 https://clickhouse.com/docs/en/interfaces/http/#response-buffering)。
适用边界 · 注意事项
- 不要用于浏览器客户端组件、Web Worker、Next.js Edge runtime、Cloudflare Workers 或任何 @clickhouse/client-web 用法——这些环境应使用 @clickhouse/client-web。
- 错误、挂起、类型不匹配、代理 pathname 异常、日志静默、socket 挂断、ECONNRESET 等排障问题不在本技能范围,应使用 clickhouse-js-node-troubleshooting 技能。
- 流式、Parquet、文件流、服务端批量移动、进度流、异步插入吞吐调优,以及 TLS、RBAC/只读用户、更深入的 SQL 注入指导、CREATE TABLE 模式、部署连接串、复制/分片选择等不在本技能范围,应查阅对应 examples 目录。