You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ClickHouse多行INSERT INTO语句语法错误排查及多行插入方法

ClickHouse多行INSERT VALUES报错原因及解决方案

我编写了以下ClickHouse代码:

CREATE DATABASE hello;

CREATE TABLE hello.orders (order_id Int64, items Array(String)) ENGINE = MergeTree ORDER BY order_id;

INSERT INTO hello.orders (order_id, items) 
VALUES (1, ['laptop', 'mouse', 'keyboard']),
       (2, ['book', 'pen', 'notebook']);

执行时出现错误:

DB::Exception: Syntax error: failed at position 2 ('2')

报错原因

ClickHouse的SQL解析器默认对语句换行的处理逻辑较为严格:当VALUES子句中逗号后直接换行时,解析器会将换行后的内容判定为新的独立语句,而非当前INSERT语句的延续,因此触发语法错误。

多行插入的解决方案

  • 用括号包裹所有值项
    将所有待插入的记录放在外层括号内,让解析器明确识别这是同一组数据:

    INSERT INTO hello.orders (order_id, items) 
    VALUES (
        (1, ['laptop', 'mouse', 'keyboard']),
        (2, ['book', 'pen', 'notebook'])
    );
    
  • 添加反斜杠标记语句未结束
    在换行前的逗号后添加反斜杠,告知解析器当前语句尚未完成:

    INSERT INTO hello.orders (order_id, items) 
    VALUES (1, ['laptop', 'mouse', 'keyboard']),\
           (2, ['book', 'pen', 'notebook']);
    
  • 开启客户端多行输入模式
    若使用ClickHouse命令行客户端,可通过以下方式开启多行模式:

    • 启动客户端时添加-m参数:clickhouse-client -m
    • 客户端内执行命令:\set multiquery on
      开启后解析器会等待完整语句输入完成后再执行,支持自然换行的VALUES写法。

内容的提问来源于stack exchange,提问作者techkuz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 19:38:19