Introducción
A veces es necesario volver a ingestar todos los datos de una tabla en otra.
Por ejemplo, puede que quieras volver a ingestar datos de una tabla de staging a una tabla de producción. En este artículo se muestra cómo hacerlo con la sentencia INSERT INTO.
Ejemplo
A continuación, se muestra un ejemplo sencillo de cómo funciona y cómo probarlo:
- Cree una base de datos de ejemplo
CREATE DATABASE db1;- Crear una tabla de ejemplo
CREATE TABLE db1.source_table
(
city VARCHAR,
country VARCHAR,
continent VARCHAR
)
engine = MergeTree()
ORDER BY continent;- Inserta algunos datos en la tabla de origen
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');- Compruebe cuántas filas hay en la tabla de origen
SELECT COUNT(*) FROM db1.source_table;┌─count()─┐
│ 6 │
└─────────┘- Cree una nueva tabla con la misma estructura que la tabla de origen.
CREATE TABLE db1.target_table AS db1.source_table;- Inserte todas las filas de la tabla de origen en la tabla de destino.
INSERT INTO db1.target_table SELECT * FROM db1.source_table;- Comprueba el número de filas en la tabla de destino
SELECT COUNT(*) FROM db1.target_table;┌─count()─┐
│ 6 │
└─────────┘Si quieres modificar la estructura de la nueva tabla, primero puedes mostrar la estructura de la tabla de origen.
SHOW CREATE TABLE db1.source_table;A continuación, cree la nueva tabla con la estructura modificada. En nuestro caso, queremos añadir una nueva columna population a la tabla de destino.
CREATE TABLE db1.target_table_population
(
`city` String,
`country` String,
`continent` String,
`population` UInt16,
)
ENGINE = MergeTree
ORDER BY continent;- Inserta todas las filas de la tabla de origen en la tabla de destino, incluida la nueva columna. El campo population queda establecido en 0 en todas las filas.
INSERT INTO db1.target_table_population (city, country, continent, population)
SELECT city, country, continent, 0 FROM db1.source_table;- Comprueba los datos de la tabla 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 │
└───────────┴───────────┴────────────────┴────────────┘