> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-fbfa8bee.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> El motor de tabla Alias crea un proxy transparente hacia otra tabla. Todas las operaciones se redirigen a la tabla de destino, mientras que el alias en sí no almacena datos.

# 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.

<div id="creating-a-table">
  ## Crear una tabla
</div>

```sql theme={null}
CREATE TABLE [db_name.]alias_name
ENGINE = Alias(target_table)
```

O con el nombre de la base de datos de forma explícita:

```sql theme={null}
CREATE TABLE [db_name.]alias_name
ENGINE = Alias(target_db, target_table)
```

<Note>
  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.
</Note>

<div id="engine-parameters">
  ## Parámetros del motor
</div>

* **`target_db (optional)`** — Nombre de la base de datos que contiene la tabla de destino.
* **`target_table`** — Nombre de la tabla de destino.

<Note>
  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.
</Note>

<div id="supported-operations">
  ## Operaciones admitidas
</div>

El motor de tabla `Alias` admite las principales operaciones.

<div id="operations-on-target">
  ### Operaciones en la tabla de destino
</div>

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                                          |

<div id="operations-on-alias">
  ### Operaciones sobre el propio alias
</div>

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 |

<div id="usage-examples">
  ## Ejemplos de uso
</div>

<div id="basic-alias-creation">
  ### Creación básica de alias
</div>

Cree un alias sencillo en la misma base de datos:

```sql theme={null}
-- 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;
```

```text theme={null}
┌─id─┬─name─┬─value─┐
│  1 │ one  │  10.1 │
│  2 │ two  │  20.2 │
└────┴──────┴───────┘
```

<div id="cross-database-alias">
  ### Alias entre bases de datos
</div>

Cree un alias que apunte a una tabla en otra base de datos:

```sql theme={null}
-- 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;
```

<div id="write-operations">
  ### Operaciones de escritura mediante alias
</div>

Todas las operaciones de escritura se redirigen a la tabla de destino:

```sql theme={null}
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
```

<div id="schema-modification">
  ### Modificación del esquema
</div>

Las operaciones `ALTER` modifican el esquema de la tabla de destino:

```sql theme={null}
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;
```

```text theme={null}
┌─name──┬─type───┬─default_type─┬─default_expression─┐
│ id    │ UInt32 │              │                    │
│ name  │ String │              │                    │
│ email │ String │ DEFAULT      │ ''                 │
└───────┴────────┴──────────────┴────────────────────┘
```

<div id="data-mutations">
  ### Mutaciones de datos
</div>

Se admiten las operaciones UPDATE y DELETE:

```sql theme={null}
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;
```

```text theme={null}
┌─id─┬─name─────┬─price─┬─status─┐
│  1 │ item_one │ 110.0 │ active │
│  2 │ item_two │ 220.0 │ active │
└────┴──────────┴───────┴────────┘
```

<div id="partition-operations">
  ### Operaciones de partición
</div>

En las tablas particionadas, las operaciones de partición se redirigen:

```sql theme={null}
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
```

<div id="table-optimization">
  ### Optimización de la tabla
</div>

Optimice las operaciones de fusión de partes en la tabla de destino:

```sql theme={null}
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
```

<div id="alias-management">
  ### Gestión de alias
</div>

Los alias se pueden renombrar o eliminar de forma independiente:

```sql theme={null}
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
```
