首页/数据/NoSQL 速查/INSERT 写入方式与批量建议
ClickHouse56 条

INSERT 写入方式与批量建议

写入用 INSERT INTO … VALUES/SELECT/FORMAT:Values 适合小批量,SELECT 用于表间复制,JSONEachRow/CSV 等格式适合外部导入;每次 INSERT 生成一个 part。

NoSQL 速查数据更新于 2026-10-12
语法INSERT INTO t [(cols)] VALUES / SELECT / FORMAT <format>
导入示例clickhouse-client --query "INSERT INTO t FORMAT JSONEachRow" < data.jsonl
批量建议单次尽量千行级以上、控制每秒插入次数,避免大量小 part
相关设置max_insert_block_size(默认约 104 万行)、insert_deduplicate(原子表默认去重)

示例

示例
INSERT INTO metrics (ts, metric, value) VALUES
    (now(), 'cpu', 0.5),
    (now(), 'mem', 0.7);

INSERT INTO metrics SELECT ts, metric, value * 2 FROM metrics WHERE metric = 'cpu';

-- 从 TSV 文件导入
-- clickhouse-client --query "INSERT INTO metrics FORMAT TSV" < metrics.tsv
同批次重复执行(相同 part 内容)时,Atomic 数据库下的表默认会做幂等去重,重试导入前先理解这个行为。

易错点

  • 逐行 INSERT 是常见性能杀手:每条都产生 part,合并线程会被压垮
  • Nullable 列导入空字符串与 NULL 语义不同,外部文件中的空值要显式约定

数据来源与参考

  • ClickHouse Docs: INSERT INTO
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌