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

ClickHouse导入CSV报错78:含INFILE的查询直接发送至服务器

解决ClickHouse INSERT FROM INFILE报错问题

错误原因

你遇到的UNKNOWN_TYPE_OF_QUERY错误,核心原因是**FROM INFILE语法仅支持在clickhouse-client命令行工具中使用**,而你是通过HTTP客户端(比如JDBC、GUI工具)直接向服务器发送这条语句,HTTP接口不支持这种客户端读取本地文件并上传的语法。

解决方案

方案1:使用clickhouse-client命令行执行

直接在终端运行命令:

clickhouse-client --query "INSERT INTO default.tags FROM INFILE '/home/sergey/test/tags_202309081557.csv' FORMAT CSV;"

或者进入clickhouse-client交互模式后执行SQL:

INSERT INTO default.tags FROM INFILE '/home/sergey/test/tags_202309081557.csv' FORMAT CSV;

方案2:通过HTTP接口上传文件(适用于JDBC/GUI场景)

如果必须使用HTTP类客户端,需要通过POST请求直接上传文件内容,而不是使用FROM INFILE语法。例如用curl命令:

curl -X POST 'http://localhost:8123/?query=INSERT%20INTO%20default.tags%20FORMAT%20CSV' --data-binary @/home/sergey/test/tags_202309081557.csv

如果是JDBC代码,需通过PreparedStatement的setBinaryStream方法将文件内容流式上传,示例伪代码:

String sql = "INSERT INTO default.tags FORMAT CSV";
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setBinaryStream(1, new FileInputStream("/home/sergey/test/tags_202309081557.csv"));
stmt.execute();

额外注意事项

如果你的CSV文件在ClickHouse服务器本地(而非客户端机器),可开启服务器读取本地文件的权限后操作,但仍需在clickhouse-client中执行:

SET allow_local_infile = 1;
INSERT INTO default.tags FROM INFILE '/home/sergey/test/tags_202309081557.csv' FORMAT CSV;

注意:开启allow_local_infile存在安全风险,需谨慎使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 05:57:43