Clickhouse 从 csv DB::NetException 导入数据:写入套接字时,连接被对等方重置

Arn*_*man 5 clickhouse

我正在尝试通过以下方式将 *.gz 文件加载到 Clickhouse:clickhouse-client --max_memory_usage=15323460608 --format_csv_delimiter="|" --query="插入 tmp1.my_test)表格式 CSV"

我收到错误: Code: 210. DB::NetException: Connection Reset by Peer, while写入套接字 (127.0.0.1:9000) 。

clickhouse-server.log 、 clickhouse-server.err.log 或 Zookeeper.log 中没有错误

当我运行插入命令时,我看到内存几乎达到了服务器的限制(32Gb),这就是为什么我尝试通过 max_memory_usage 限制它,同样的错误

有任何想法吗?提前致谢

gee*_*ves 1

问题可能是您按天对数据进行分区,并且批量插入 CSV 中的天数过多。尝试在表创建中删除 PARTITION BY toYYYYMMDD(business_ts) 规范。当插入我的一张表时,我注意到了类似的问题。在添加 --max_memory_usage 参数之前,我得到了与您在此处报告的完全相同的错误:Code: 210. DB::NetException: Connection Reset by Peer, whilewriting to socket (127.0.0.1:9000)

然后我添加了 --max_memory_usage=15000000000 并且收到了一条更有用的错误消息:

从服务器收到异常(版本 20.11.5):代码:252。 DB::Exception:从 localhost:9000 收到。DB::Exception:单个 INSERT 块的分区过多(超过 100)。该限制由“max_partitions_per_insert_block”设置控制。大量分区是一个常见的误解。它将导致严重的负面性能影响,包括服务器启动缓慢、INSERT 查询缓慢和 SELECT 查询缓慢。建议表的分区总数低于 1000..10000。请注意,分区并不是为了加速 SELECT 查询(ORDER BY key 足以使范围查询更快)。分区用于数据操作(DROP PARTITION 等)。

正如更有用的错误消息所指出的那样,PARTITION 并不能帮助提高 SELECT 性能。它确实可以帮助更有效地促进非查询操作。我不知道您的用例的所有细节,但也许对 spin_ts 和business_ts 进行 ORDER BY 并将 PARTITION 放在business_ts 上可能是有意义的。