Вставить все строки из одной таблицы в другую с одинаковой структурой - PullRequest
0 голосов
/ 13 марта 2019

Я пытаюсь переместить все содержимое таблицы в другую таблицу с такой же структурой.Есть много строк, поэтому, когда я пытаюсь выполнить это така затем вставьте его в таблицу, что в данном случае невозможно.Есть ли специальные способы сделать это?

Я также не хотел бы выбирать и вставлять данные в цикле небольшими порциями.

Редактировать: Я ищу решение SQL.

Ответы [ 2 ]

1 голос
/ 14 марта 2019

ClickHouse сам должен правильно обрабатывать такие запросы.

Для простых SELECT * он не должен считывать целые данные в память, он должен работать в потоковом режиме.

Скорее всего, ваш клиент просто получает тайм-аут в ожидании подтверждения завершения операции от ClickHouse.

Итак, у вас есть следующие опции:

  1. просто увеличьте время ожидания соединения с клиентом

  2. копировать данные несколькими вставками - срезать данные по некоторым условиям.

    INSERT INTO xxx SELECT * FROM table WHERE column BETWEEN 1 and 10000;
    INSERT INTO xxx SELECT * FROM table WHERE column BETWEEN 10001 and 20000;
    ...
    
  3. самый эффективный способ с таблицей семейства 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;
    
  4. если вам просто нужна еще одна копия данных (например, с другим ключом), вы можете просто заполнить ее материализованным представлением автоматически

    CREATE MATERIALIZED VIEW str2dst TO dest_table AS SELECT * FROM source_table;
    
  5. если вам нужно перемещать огромные объемы данных, особенно между кластерами, - clickhouse-copier - лучший вариант.

1 голос
/ 13 марта 2019

Да, выбор-вставка является хорошим решением при использовании небольших таблиц.
Вы можете использовать clickhouse-copier для больших таблиц, чтобы переместить их в кластер или в другой кластер.
Читайте об этом здесь

...