El motor Alias crea un proxy a otra tabla. Todas las operaciones de lectura y escritura se redirigen a la tabla de destino, mientras que el alias en sí no almacena datos y solo mantiene una referencia a la tabla de destino.
Crear una tabla
CREATE TABLE [db_name.]alias_name
ENGINE = Alias(target_table)O con el nombre de la base de datos de forma explícita:
CREATE TABLE [db_name.]alias_name
ENGINE = Alias(target_db, target_table)Parámetros del motor
target_db (optional)— Nombre de la base de datos que contiene la tabla de destino.target_table— Nombre de la tabla de destino.
Operaciones admitidas
El motor de tabla Alias admite las principales operaciones.
Operaciones en la tabla de destino
Estas operaciones se redirigen a la tabla de destino:
| Operación | Compatibilidad | Descripción |
|---|---|---|
SELECT |
✅ | Leer datos de la tabla de destino |
INSERT |
✅ | Escribir datos en la tabla de destino |
INSERT SELECT |
✅ | Inserción por lotes en la tabla de destino |
ALTER TABLE ADD COLUMN |
✅ | Agregar columnas a la tabla de destino |
ALTER TABLE MODIFY SETTING |
✅ | Modificar la configuración de la tabla de destino |
ALTER TABLE PARTITION |
✅ | Operaciones de partición (DETACH/ATTACH/DROP) en la tabla de destino |
ALTER TABLE UPDATE |
✅ | Actualizar filas de la tabla de destino (mutación) |
ALTER TABLE DELETE |
✅ | Eliminar filas de la tabla de destino (mutación) |
OPTIMIZE TABLE |
✅ | Optimizar la tabla de destino (fusionar partes) |
TRUNCATE TABLE |
✅ | Truncar la tabla de destino |
Operaciones sobre el propio alias
Estas operaciones solo afectan al alias, no a la tabla de destino:
| Operación | Compatibilidad | Descripción |
|---|---|---|
DROP TABLE |
✅ | Elimina solo el alias; la tabla de destino permanece sin cambios |
RENAME TABLE |
✅ | Cambia el nombre solo del alias; la tabla de destino permanece sin cambios |
Ejemplos de uso
Creación básica de alias
Cree un alias sencillo en la misma base de datos:
-- Crear tabla fuente
CREATE TABLE source_data (
id UInt32,
name String,
value Float64
) ENGINE = MergeTree
ORDER BY id;
-- Insertar algunos datos
INSERT INTO source_data VALUES (1, 'one', 10.1), (2, 'two', 20.2);
-- Crear alias
CREATE TABLE data_alias ENGINE = Alias('source_data');
-- Consultar a través del alias
SELECT * FROM data_alias;┌─id─┬─name─┬─value─┐
│ 1 │ one │ 10.1 │
│ 2 │ two │ 20.2 │
└────┴──────┴───────┘Alias entre bases de datos
Cree un alias que apunte a una tabla en otra base de datos:
-- Crear bases de datos
CREATE DATABASE db1;
CREATE DATABASE db2;
-- Crear tabla fuente en db1
CREATE TABLE db1.events (
timestamp DateTime,
event_type String,
user_id UInt32
) ENGINE = MergeTree
ORDER BY timestamp;
-- Crear alias en db2 que apunta a db1.events
CREATE TABLE db2.events_alias ENGINE = Alias('db1', 'events');
-- O usando el formato base_de_datos.tabla
CREATE TABLE db2.events_alias2 ENGINE = Alias('db1.events');
-- Ambos alias funcionan de forma idéntica
INSERT INTO db2.events_alias VALUES (now(), 'click', 100);
SELECT * FROM db2.events_alias2;Operaciones de escritura mediante alias
Todas las operaciones de escritura se redirigen a la tabla de destino:
CREATE TABLE metrics (
ts DateTime,
metric_name String,
value Float64
) ENGINE = MergeTree
ORDER BY ts;
CREATE TABLE metrics_alias ENGINE = Alias('metrics');
-- Insert through alias
INSERT INTO metrics_alias VALUES
(now(), 'cpu_usage', 45.2),
(now(), 'memory_usage', 78.5);
-- Insert with SELECT
INSERT INTO metrics_alias
SELECT now(), 'disk_usage', number * 10
FROM system.numbers
LIMIT 5;
-- Verify data is in the target table
SELECT count() FROM metrics; -- Returns 7
SELECT count() FROM metrics_alias; -- Returns 7Modificación del esquema
Las operaciones ALTER modifican el esquema de la tabla de destino:
CREATE TABLE users (
id UInt32,
name String
) ENGINE = MergeTree
ORDER BY id;
CREATE TABLE users_alias ENGINE = Alias('users');
-- Agregar columna a través del alias
ALTER TABLE users_alias ADD COLUMN email String DEFAULT '';
-- La columna se agrega a la tabla de destino
DESCRIBE users;┌─name──┬─type───┬─default_type─┬─default_expression─┐
│ id │ UInt32 │ │ │
│ name │ String │ │ │
│ email │ String │ DEFAULT │ '' │
└───────┴────────┴──────────────┴────────────────────┘Mutaciones de datos
Se admiten las operaciones UPDATE y DELETE:
CREATE TABLE products (
id UInt32,
name String,
price Float64,
status String DEFAULT 'active'
) ENGINE = MergeTree
ORDER BY id;
CREATE TABLE products_alias ENGINE = Alias('products');
INSERT INTO products_alias VALUES
(1, 'item_one', 100.0, 'active'),
(2, 'item_two', 200.0, 'active'),
(3, 'item_three', 300.0, 'inactive');
-- Update through alias
ALTER TABLE products_alias UPDATE price = price * 1.1 WHERE status = 'active';
-- Delete through alias
ALTER TABLE products_alias DELETE WHERE status = 'inactive';
-- Changes are applied to target table
SELECT * FROM products ORDER BY id;┌─id─┬─name─────┬─price─┬─status─┐
│ 1 │ item_one │ 110.0 │ active │
│ 2 │ item_two │ 220.0 │ active │
└────┴──────────┴───────┴────────┘Operaciones de partición
En las tablas particionadas, las operaciones de partición se redirigen:
CREATE TABLE logs (
date Date,
level String,
message String
) ENGINE = MergeTree
PARTITION BY toYYYYMM(date)
ORDER BY date;
CREATE TABLE logs_alias ENGINE = Alias('logs');
INSERT INTO logs_alias VALUES
('2024-01-15', 'INFO', 'message1'),
('2024-02-15', 'ERROR', 'message2'),
('2024-03-15', 'INFO', 'message3');
-- Detach partition through alias
ALTER TABLE logs_alias DETACH PARTITION '202402';
SELECT count() FROM logs_alias; -- Returns 2 (partition 202402 detached)
-- Attach partition back
ALTER TABLE logs_alias ATTACH PARTITION '202402';
SELECT count() FROM logs_alias; -- Returns 3Optimización de la tabla
Optimice las operaciones de fusión de partes en la tabla de destino:
CREATE TABLE events (
id UInt32,
data String
) ENGINE = MergeTree
ORDER BY id;
CREATE TABLE events_alias ENGINE = Alias('events');
-- Multiple inserts create multiple parts
INSERT INTO events_alias VALUES (1, 'data1');
INSERT INTO events_alias VALUES (2, 'data2');
INSERT INTO events_alias VALUES (3, 'data3');
-- Check parts count
SELECT count() FROM system.parts
WHERE database = currentDatabase()
AND table = 'events'
AND active;
-- Optimize through alias
OPTIMIZE TABLE events_alias FINAL;
-- Parts are merged in target table
SELECT count() FROM system.parts
WHERE database = currentDatabase()
AND table = 'events'
AND active; -- Returns 1Gestión de alias
Los alias se pueden renombrar o eliminar de forma independiente:
CREATE TABLE important_data (
id UInt32,
value String
) ENGINE = MergeTree
ORDER BY id;
INSERT INTO important_data VALUES (1, 'critical'), (2, 'important');
CREATE TABLE old_alias ENGINE = Alias('important_data');
-- Rename alias (target table unchanged)
RENAME TABLE old_alias TO new_alias;
-- Create another alias to same table
CREATE TABLE another_alias ENGINE = Alias('important_data');
-- Drop one alias (target table and other aliases unchanged)
DROP TABLE new_alias;
SELECT * FROM another_alias; -- Still works
SELECT count() FROM important_data; -- Data intact, returns 2