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

> 별칭 테이블 엔진은 다른 테이블을 가리키는 투명한 프록시를 생성합니다. 모든 작업은 대상 테이블로 전달되며, 별칭 자체는 데이터를 저장하지 않습니다.

# 별칭 테이블 엔진

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>
  이는 Experimental 기능이며, 향후 releases에서 하위 호환되지 않는 방식으로 변경될 수 있습니다.
  [allow\_experimental\_alias\_table\_engine](/ko/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` 테이블은 명시적인 컬럼 정의를 지원하지 않습니다. 컬럼은 대상 테이블(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 반환
```
