ClickHouse сам должен правильно обрабатывать такие запросы.
Для простых SELECT *
он не должен считывать целые данные в память, он должен работать в потоковом режиме.
Скорее всего, ваш клиент просто получает тайм-аут в ожидании подтверждения завершения операции от ClickHouse.
Итак, у вас есть следующие опции:
просто увеличьте время ожидания соединения с клиентом
копировать данные несколькими вставками - срезать данные по некоторым условиям.
INSERT INTO xxx SELECT * FROM table WHERE column BETWEEN 1 and 10000;
INSERT INTO xxx SELECT * FROM table WHERE column BETWEEN 10001 and 20000;
...
самый эффективный способ с таблицей семейства MergeTree, и когда структуры таблиц абсолютно одинаковы, - это копирование данных путем копирования разделов непосредственно из одной таблицы в другую
ALTER TABLE dst_table ATTACH PARTITION '2019-01-01' FROM source_table;
-- you get get the list of partitions like that:
SELECT partition
FROM system.parts
WHERE database = '...' and table = 'source_table' and active = 1
GROUP BY partition;
если вам просто нужна еще одна копия данных (например, с другим ключом), вы можете просто заполнить ее материализованным представлением автоматически
CREATE MATERIALIZED VIEW str2dst TO dest_table AS SELECT * FROM source_table;
если вам нужно перемещать огромные объемы данных, особенно между кластерами, - clickhouse-copier
- лучший вариант.