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

> Движок таблицы Alias создаёт прозрачный прокси к другой таблице. Все операции направляются в целевую таблицу, а сам псевдоним данных не хранит.

# Движок таблицы 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>;
};

Движок `Alias` создаёт прокси для другой таблицы. Все операции чтения и записи перенаправляются в целевую таблицу, при этом сам псевдоним не хранит данные и лишь поддерживает ссылку на целевую таблицу.

<Info>
  Это экспериментальная возможность, которая в будущих релизах может измениться обратно несовместимым образом.
  Включите использование движка таблицы Alias
  с помощью настройки [allow\_experimental\_alias\_table\_engine](/ru/reference/settings/session-settings#allow_experimental_alias_table_engine).
  Выполните команду `set allow_experimental_alias_table_engine = 1`.
</Info>

<div id="creating-a-table">
  ## Создание таблицы
</div>

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

Или с явным именем базы данных:

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

<Note>
  Таблица `Alias` не поддерживает явное описание столбцов. Столбцы автоматически наследуются от целевой таблицы. Благодаря этому таблица-псевдоним всегда соответствует схеме целевой таблицы.
</Note>

<div id="engine-parameters">
  ## Параметры движка
</div>

* **`target_db (optional)`** — Имя базы данных, содержащей целевую таблицу.
* **`target_table`** — Имя целевой таблицы.

<Note>
  Если `target_db` не указан, а `target_table` задан не полным именем (например, `Alias('my_table')`), цель определяется в той же базе данных, что и сам псевдоним, а не в текущей базе данных сеанса.
</Note>

<div id="supported-operations">
  ## Поддерживаемые операции
</div>

Движок таблицы `Alias` поддерживает все основные операции.

<div id="operations-on-target">
  ### Операции с целевой таблицей
</div>

Эти операции перенаправляются в целевую таблицу:

| Операция                     | Поддержка | Описание                                                     |
| ---------------------------- | --------- | ------------------------------------------------------------ |
| `SELECT`                     | ✅         | Чтение данных из целевой таблицы                             |
| `INSERT`                     | ✅         | Запись данных в целевую таблицу                              |
| `INSERT SELECT`              | ✅         | Батчевая вставка в целевую таблицу                           |
| `ALTER TABLE ADD COLUMN`     | ✅         | Добавление столбцов в целевую таблицу                        |
| `ALTER TABLE MODIFY SETTING` | ✅         | Изменение настроек целевой таблицы                           |
| `ALTER TABLE PARTITION`      | ✅         | Операции с партициями (DETACH/ATTACH/DROP) в целевой таблице |
| `ALTER TABLE UPDATE`         | ✅         | Обновление строк в целевой таблице (мутация)                 |
| `ALTER TABLE DELETE`         | ✅         | Удаление строк из целевой таблицы (мутация)                  |
| `OPTIMIZE TABLE`             | ✅         | Оптимизация целевой таблицы (слияние частей)                 |
| `TRUNCATE TABLE`             | ✅         | Очистка целевой таблицы                                      |

<div id="operations-on-alias">
  ### Операции с самим псевдонимом
</div>

Эти операции затрагивают только псевдоним, **а не** целевую таблицу:

| Операция       | Поддержка | Описание                                                          |
| -------------- | --------- | ----------------------------------------------------------------- |
| `DROP TABLE`   | ✅         | Удаляется только псевдоним; целевая таблица не изменяется         |
| `RENAME TABLE` | ✅         | Переименовывается только псевдоним; целевая таблица не изменяется |

<div id="usage-examples">
  ## Примеры использования
</div>

<div id="basic-alias-creation">
  ### Создание простого псевдонима
</div>

Создайте простой псевдоним в той же базе данных:

```sql theme={null}
-- Создать исходную таблицу
CREATE TABLE source_data (
    id UInt32,
    name String,
    value Float64
) ENGINE = MergeTree
ORDER BY id;

-- Вставить данные
INSERT INTO source_data VALUES (1, 'one', 10.1), (2, 'two', 20.2);

-- Создать псевдоним
CREATE TABLE data_alias ENGINE = Alias('source_data');

-- Выполнить запрос через псевдоним
SELECT * FROM data_alias;
```

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

<div id="cross-database-alias">
  ### Межбазовый псевдоним
</div>

Создайте псевдоним, указывающий на таблицу в другой базе данных:

```sql theme={null}
-- Создать базы данных
CREATE DATABASE db1;
CREATE DATABASE db2;

-- Создать исходную таблицу в db1
CREATE TABLE db1.events (
    timestamp DateTime,
    event_type String,
    user_id UInt32
) ENGINE = MergeTree
ORDER BY timestamp;

-- Создать псевдоним в db2, указывающий на db1.events
CREATE TABLE db2.events_alias ENGINE = Alias('db1', 'events');

-- Или в формате database.table
CREATE TABLE db2.events_alias2 ENGINE = Alias('db1.events');

-- Оба псевдонима работают одинаково
INSERT INTO db2.events_alias VALUES (now(), 'click', 100);
SELECT * FROM db2.events_alias2;
```

<div id="write-operations">
  ### Операции записи через псевдоним
</div>

Все операции записи направляются в целевую таблицу:

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

-- Вставка через псевдоним
INSERT INTO metrics_alias VALUES 
    (now(), 'cpu_usage', 45.2),
    (now(), 'memory_usage', 78.5);

-- Вставка с помощью SELECT
INSERT INTO metrics_alias 
SELECT now(), 'disk_usage', number * 10 
FROM system.numbers 
LIMIT 5;

-- Проверка наличия данных в целевой таблице
SELECT count() FROM metrics;  -- Возвращает 7
SELECT count() FROM metrics_alias;  -- Возвращает 7
```

<div id="schema-modification">
  ### Изменение схемы
</div>

Операции `ALTER` изменяют схему целевой таблицы:

```sql theme={null}
CREATE TABLE users (
    id UInt32,
    name String
) ENGINE = MergeTree
ORDER BY id;

CREATE TABLE users_alias ENGINE = Alias('users');

-- Добавление столбца через псевдоним
ALTER TABLE users_alias ADD COLUMN email String DEFAULT '';

-- Столбец добавляется в целевую таблицу
DESCRIBE users;
```

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

<div id="data-mutations">
  ### Мутации данных
</div>

Поддерживаются операции UPDATE и 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');

-- Обновление через псевдоним
ALTER TABLE products_alias UPDATE price = price * 1.1 WHERE status = 'active';

-- Удаление через псевдоним
ALTER TABLE products_alias DELETE WHERE status = 'inactive';

-- Изменения применяются к целевой таблице
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">
  ### Операции с партициями
</div>

Для партиционированных таблиц операции над партициями перенаправляются:

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

-- Отсоединить партицию через псевдоним
ALTER TABLE logs_alias DETACH PARTITION '202402';

SELECT count() FROM logs_alias;  -- Возвращает 2 (партиция 202402 отсоединена)

-- Присоединить партицию обратно
ALTER TABLE logs_alias ATTACH PARTITION '202402';

SELECT count() FROM logs_alias;  -- Возвращает 3
```

<div id="table-optimization">
  ### Оптимизация таблицы
</div>

Операции оптимизации объединяют части в целевой таблице:

```sql theme={null}
CREATE TABLE events (
    id UInt32,
    data String
) ENGINE = MergeTree
ORDER BY id;

CREATE TABLE events_alias ENGINE = Alias('events');

-- Несколько вставок создают несколько частей
INSERT INTO events_alias VALUES (1, 'data1');
INSERT INTO events_alias VALUES (2, 'data2');
INSERT INTO events_alias VALUES (3, 'data3');

-- Проверить количество частей
SELECT count() FROM system.parts 
WHERE database = currentDatabase() 
  AND table = 'events' 
  AND active;

-- Оптимизация через псевдоним
OPTIMIZE TABLE events_alias FINAL;

-- Части объединяются в целевой таблице
SELECT count() FROM system.parts 
WHERE database = currentDatabase() 
  AND table = 'events' 
  AND active;  -- Возвращает 1
```

<div id="alias-management">
  ### Управление псевдонимами
</div>

Псевдонимы можно независимо переименовывать и удалять:

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

-- Переименование псевдонима (целевая таблица не изменяется)
RENAME TABLE old_alias TO new_alias;

-- Создание ещё одного псевдонима для той же таблицы
CREATE TABLE another_alias ENGINE = Alias('important_data');

-- Удаление одного псевдонима (целевая таблица и другие псевдонимы не изменяются)
DROP TABLE new_alias;

SELECT * FROM another_alias;  -- По-прежнему работает
SELECT count() FROM important_data;  -- Данные сохранены, возвращает 2
```
