Введение
Иногда нужно заново перенести все данные из одной таблицы в другую.
Например, может потребоваться заново перенести данные из 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 │
└───────────┴───────────┴────────────────┴────────────┘