> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-fix-nav-issues.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

export const ExperimentalBadge = () => {
  return <div className="experimentalBadge">
            <div className="experimentalIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.25" d="M5.5 2H10.5" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.25" d="M9.50015 2V6.19625L13.4283 12.7425C13.4738 12.8183 13.4985 12.9049 13.4996 12.9934C13.5008 13.0818 13.4785 13.169 13.435 13.246C13.3914 13.323 13.3283 13.3871 13.2519 13.4317C13.1755 13.4764 13.0886 13.4999 13.0002 13.5H3.00015C2.91164 13.5 2.8247 13.4766 2.74822 13.432C2.67174 13.3874 2.60847 13.3233 2.56487 13.2463C2.52126 13.1693 2.49889 13.082 2.50004 12.9935C2.50119 12.905 2.52582 12.8184 2.5714 12.7425L6.50015 6.19625V2" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.25" d="M4.47656 9.56754C5.30344 9.41254 6.47656 9.47942 7.99969 10.25C10.0153 11.2707 11.4216 11.0569 12.2184 10.7282" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>
        </div>
            Experimental feature. <u><a href="/docs/beta-and-experimental-features#experimental-features">Learn more.</a></u>
        </div>;
};

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.

<Info>
  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](/es/reference/settings/session-settings#allow_experimental_alias_table_engine).
  Introduzca el comando `set allow_experimental_alias_table_engine = 1`.
</Info>

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