> ## 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` 엔진은 다른 테이블에 대한 프록시를 생성합니다. 모든 읽기 및 쓰기 작업은 대상 테이블로 전달되며, 별칭 자체에는 데이터가 저장되지 않고 대상 테이블에 대한 참조만 유지됩니다.

<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` 테이블은 명시적인 컬럼 정의를 지원하지 않습니다. 컬럼은 대상 테이블(target table)에서 자동으로 상속됩니다. 이렇게 하면 `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;

-- db1.events를 가리키는 별칭을 db2에 생성
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">
  ### Alias를 통한 쓰기 작업
</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 반환
```
