Introdução
Às vezes, é preciso fazer a reingestão de todos os dados de uma tabela para outra.
Por exemplo, talvez você queira fazer a reingestão de dados de uma tabela de staging para uma tabela de produção. Este artigo mostra como fazer isso usando a instrução INSERT INTO.
Exemplo
Veja abaixo um exemplo simples de como isso funciona e como testar:
- Crie um banco de dados de exemplo
CREATE DATABASE db1;- Crie uma tabela de exemplo
CREATE TABLE db1.source_table
(
city VARCHAR,
country VARCHAR,
continent VARCHAR
)
engine = MergeTree()
ORDER BY continent;- Insira alguns dados na tabela de origem
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');- Verifique o número de linhas na tabela de origem
SELECT COUNT(*) FROM db1.source_table;┌─count()─┐
│ 6 │
└─────────┘- Crie uma nova tabela com a mesma estrutura da tabela de origem.
CREATE TABLE db1.target_table AS db1.source_table;- Insira todas as linhas da tabela de origem para a tabela de destino.
INSERT INTO db1.target_table SELECT * FROM db1.source_table;- Verifique o número de linhas na tabela de destino
SELECT COUNT(*) FROM db1.target_table;┌─count()─┐
│ 6 │
└─────────┘Se quiser modificar a estrutura da nova tabela, você pode primeiro exibir a estrutura da tabela de origem.
SHOW CREATE TABLE db1.source_table;Em seguida, crie a nova tabela com a estrutura modificada. No nosso caso, queremos adicionar uma nova coluna population à tabela de destino.
CREATE TABLE db1.target_table_population
(
`city` String,
`country` String,
`continent` String,
`population` UInt16,
)
ENGINE = MergeTree
ORDER BY continent;- Insira todas as linhas da tabela de origem na tabela de destino, incluindo a nova coluna. O campo population é definido como 0 para todas as linhas.
INSERT INTO db1.target_table_population (city, country, continent, population)
SELECT city, country, continent, 0 FROM db1.source_table;- Verifique os dados na tabela de destino
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 │
└───────────┴───────────┴────────────────┴────────────┘