> ## 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>
  これは実験的な機能であり、今後のリリースで後方互換性のない変更が加えられる可能性があります。
  エイリアス テーブルエンジンを有効にするには、
  [allow\_experimental\_alias\_table\_engine](/ja/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`         | ✅    | ターゲットテーブルの行を更新する (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を返す
```
