Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Motor de tabla Alias

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

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

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

-- 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
Navigation