我正在尝试将表的所有内容移动到具有相同结构的另一个表中。有很多行,所以当我尝试这样执行它时
insert into target_table select * from source_table;
我犯了这样的错误:
ClickHouse exception, code: 159; Read timed out
我假设它试图将整个select数据加载到ram中,然后将其插入到表中,这在这种情况下是不可能的。有没有一些专门的方法来做到这一点?
我不想选择和插入数据在循环中的一小部分。
编辑:我正在搜索sql解决方案。
2条答案
按热度按时间irlmq6kh1#
clickhouse本身应该正确处理这些查询。
为了简单
SELECT *
它不需要将整个数据读入内存,它应该以流方式工作。很可能您的客户机只是在等待clickhouse确认操作完成时超时。
因此您有以下选项:
只需增加客户端连接超时
通过多次插入复制数据-根据某些条件切片数据。
使用mergetree族表以及表结构完全相同时,最有效的方法是通过将分区直接从一个表复制到另一个表来复制数据
如果您只需要拥有另一个数据副本(例如,使用另一个键),那么您可以使用物化视图自动填充它
如果您需要移动大量数据,特别是在群集之间-
clickhouse-copier
是最好的选择。pokxtpni2#
是的,选择insert只是使用小表时的一个好解决方案。
您可以使用clickhouse copier将大表在群集中移动或移动到另一个群集中。
在这里读一下