如何将一个表中的所有行插入到另一个表?
·2 分钟阅读
关于如何将一个表中的所有行插入到另一个表的知识库文章。
简介
有时您需要将所有数据从一个表重新摄取到另一个表。
例如,您可能想要将数据从暂存表重新摄取到生产表。本文展示了如何使用 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;
- 将所有行从源表插入到目标表,包括新列。人口字段对于所有行都设置为 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 │
└───────────┴───────────┴────────────────┴────────────┘