Перейти к основному содержанию

Введение

Иногда нужно заново перенести все данные из одной таблицы в другую. Например, может потребоваться заново перенести данные из staging-таблицы в продукционную таблицу. В этой статье показано, как сделать это с помощью оператора INSERT INTO.

Пример

Ниже приведён простой пример того, как это работает и как это проверить:
  • Создайте демонстрационную базу данных
CREATE DATABASE db1;
  • Создайте тестовую таблицу
CREATE TABLE db1.source_table
(
    city VARCHAR,
    country VARCHAR,
    continent VARCHAR
)
engine = MergeTree()
ORDER BY continent;
  • Вставьте немного данных в исходную таблицу
INSERT INTO db1.source_table (city, country, continent)
VALUES
    ('New York', 'USA', 'North America'),
    ('Tokyo', 'Japan', 'Asia'),
    ('Berlin', 'Germany', 'Europe'),
    ('Paris', 'France', 'Europe'),
    ('Cairo', 'Egypt', 'Africa'),
    ('Sydney', 'Australia', 'Australia');
  • Проверьте количество строк в исходной таблице
SELECT COUNT(*) FROM db1.source_table;
┌─count()─┐
│      6  │
└─────────┘
  • Создайте новую таблицу с той же структурой, что и у исходной таблицы.
CREATE TABLE db1.target_table AS db1.source_table;
  • Вставьте все строки из исходной таблицы в целевую таблицу.
INSERT INTO db1.target_table SELECT * FROM db1.source_table;
  • Проверьте количество строк в целевой таблице
SELECT COUNT(*) FROM db1.target_table;
┌─count()─┐
│      6  │
└─────────┘
Если вы хотите изменить структуру новой таблицы, сначала можно посмотреть структуру исходной таблицы.
SHOW CREATE TABLE db1.source_table;
Затем создайте новую таблицу с изменённой структурой. В нашем случае нужно добавить в целевую таблицу новый столбец population.
CREATE TABLE db1.target_table_population
(
    `city` String,
    `country` String,
    `continent` String,
    `population` UInt16,
)
ENGINE = MergeTree
ORDER BY continent;
  • Вставьте все строки из исходной таблицы в целевую таблицу, включая новый столбец. Установите для поля population значение 0 во всех строках.
INSERT INTO db1.target_table_population (city, country, continent, population)
SELECT city, country, continent, 0 FROM db1.source_table;
  • Проверьте данные в целевой таблице
SELECT * FROM db1.target_table_population LIMIT 3;
┌─city──────┬─country───┬─continent──────┬─population─┐
│ New York  │ USA       │ North America  │          0 │
│ Tokyo     │ Japan     │ Asia           │          0 │
│ Berlin    │ Germany   │ Europe         │          0 │
└───────────┴───────────┴────────────────┴────────────┘
Последнее изменение 10 июня 2026 г.