Saltar al contenido principal
El motor Alias crea un proxy a otra tabla. Todas las operaciones de lectura y escritura se reenvían a la tabla de destino, mientras que el alias en sí no almacena datos y solo mantiene una referencia a la tabla de destino.
Esta es una característica experimental que puede cambiar de manera incompatible con versiones anteriores en próximas versiones. Habilite el uso del motor de tabla Alias con la configuración allow_experimental_alias_table_engine. Introduzca el comando set allow_experimental_alias_table_engine = 1.

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)
La tabla Alias no admite definiciones de columnas explícitas. Las columnas se heredan automáticamente de la tabla de destino. Esto garantiza que el alias siempre coincida con el esquema de la tabla de destino.

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.
Cuando se omite target_db y target_table no está totalmente calificada (por ejemplo, Alias('my_table')), el destino se resuelve en la misma base de datos que el propio alias, no en la base de datos actual de la sesión.

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ónCompatibilidadDescripción
SELECTLeer datos de la tabla de destino
INSERTEscribir datos en la tabla de destino
INSERT SELECTInserción por lotes en la tabla de destino
ALTER TABLE ADD COLUMNAgregar columnas a la tabla de destino
ALTER TABLE MODIFY SETTINGModificar la configuración de la tabla de destino
ALTER TABLE PARTITIONOperaciones de partición (DETACH/ATTACH/DROP) en la tabla de destino
ALTER TABLE UPDATEActualizar filas de la tabla de destino (mutación)
ALTER TABLE DELETEEliminar filas de la tabla de destino (mutación)
OPTIMIZE TABLEOptimizar la tabla de destino (fusionar partes)
TRUNCATE TABLETruncar la tabla de destino

Operaciones sobre el propio alias

Estas operaciones solo afectan al alias, no a la tabla de destino:
OperaciónCompatibilidadDescripción
DROP TABLEElimina solo el alias; la tabla de destino permanece sin cambios
RENAME TABLECambia 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');

-- Insertar a través del alias
INSERT INTO metrics_alias VALUES 
    (now(), 'cpu_usage', 45.2),
    (now(), 'memory_usage', 78.5);

-- Insertar con SELECT
INSERT INTO metrics_alias 
SELECT now(), 'disk_usage', number * 10 
FROM system.numbers 
LIMIT 5;

-- Verificar que los datos están en la tabla de destino
SELECT count() FROM metrics;  -- Devuelve 7
SELECT count() FROM metrics_alias;  -- Devuelve 7

Modificació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');

-- Actualizar a través del alias
ALTER TABLE products_alias UPDATE price = price * 1.1 WHERE status = 'active';

-- Eliminar a través del alias
ALTER TABLE products_alias DELETE WHERE status = 'inactive';

-- Los cambios se aplican a la tabla de destino
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');

-- Desconectar la partición a través del alias
ALTER TABLE logs_alias DETACH PARTITION '202402';

SELECT count() FROM logs_alias;  -- Devuelve 2 (partición 202402 desconectada)

-- Volver a adjuntar la partición
ALTER TABLE logs_alias ATTACH PARTITION '202402';

SELECT count() FROM logs_alias;  -- Devuelve 3

Optimizació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');

-- Múltiples inserciones crean múltiples partes
INSERT INTO events_alias VALUES (1, 'data1');
INSERT INTO events_alias VALUES (2, 'data2');
INSERT INTO events_alias VALUES (3, 'data3');

-- Verificar el número de partes
SELECT count() FROM system.parts 
WHERE database = currentDatabase() 
  AND table = 'events' 
  AND active;

-- Optimizar a través del alias
OPTIMIZE TABLE events_alias FINAL;

-- Las partes se fusionan en la tabla de destino
SELECT count() FROM system.parts 
WHERE database = currentDatabase() 
  AND table = 'events' 
  AND active;  -- Devuelve 1

Gestió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');

-- Renombrar alias (la tabla de destino no cambia)
RENAME TABLE old_alias TO new_alias;

-- Crear otro alias a la misma tabla
CREATE TABLE another_alias ENGINE = Alias('important_data');

-- Eliminar un alias (la tabla de destino y los demás aliases no cambian)
DROP TABLE new_alias;

SELECT * FROM another_alias;  -- Sigue funcionando
SELECT count() FROM important_data;  -- Datos intactos, devuelve 2
Última modificación el 10 de junio de 2026