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

> Alias 表引擎可作为另一张表的透明代理。所有操作都会转发到目标表，而别名本身不存储任何数据。

# Alias 表引擎

`Alias` 引擎会为另一张表创建一个代理。所有读写操作都会转发到目标表，而别名本身不存储任何数据，只保留对目标表的引用。

<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` 表不支持显式定义列。列会自动继承自目标表。这可确保该别名始终与目标表的 schema 保持一致。
</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`             | ✅  | 优化目标表 (合并 parts)                 |
| `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">
  ### schema 修改
</div>

`ALTER` 操作用于修改目标表的 schema：

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

优化操作将合并目标表中的 parts：

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

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

-- 多次插入会创建多个 parts
INSERT INTO events_alias VALUES (1, 'data1');
INSERT INTO events_alias VALUES (2, 'data2');
INSERT INTO events_alias VALUES (3, 'data3');

-- 检查 parts 数量
SELECT count() FROM system.parts 
WHERE database = currentDatabase() 
  AND table = 'events' 
  AND active;

-- 通过别名执行优化
OPTIMIZE TABLE events_alias FINAL;

-- Parts 在目标表中完成合并
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
```
