> ## 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` テーブルでは、カラムを明示的に定義することはできません。カラムはターゲットテーブルから自動的に継承されます。これにより、エイリアスは常にターゲットテーブルのスキーマと一致します。
</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`         | ✅    | ターゲットテーブルの行を更新する (mutation)                 |
| `ALTER TABLE DELETE`         | ✅    | ターゲットテーブルの行を削除する (mutation)                 |
| `OPTIMIZE TABLE`             | ✅    | ターゲットテーブルを最適化する (パーツをマージ)                   |
| `TRUNCATE TABLE`             | ✅    | ターゲットテーブルをTRUNCATEする                        |

<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">
  ### エイリアス経由の書き込み操作
</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');

-- 1つのエイリアスを削除（ターゲットテーブルおよび他のエイリアスは変更なし）
DROP TABLE new_alias;

SELECT * FROM another_alias;  -- 引き続き動作する
SELECT count() FROM important_data;  -- データは保持されたまま、2を返す
```
