Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

テーブルにカラムを追加する

テーブルにカラムを追加する

clickhouse-local を使用します。

clickhouse -m --output_format_pretty_row_numbers=

次のようなテーブルがあるとします。

CREATE TABLE events (
    date Date DEFAULT today(), 
    name String
) 
ENGINE = MergeTree
ORDER BY date;

レコードを1件追加しましょう:

INSERT INTO events (name) VALUES ('Alexey');

次に、events テーブルに対してクエリを実行します:

SELECT *
FROM events;
┌───────date─┬─name───┐
│ 2024-12-18 │ Alexey │
└────────────┴────────┘

新しいカラムの追加

ここで、Float64 型の favoriteNumber という新しいカラムを追加することにします。 これは ALTER TABLE...ADD COLUMN 句を使って実行できます。

ALTER TABLE events 
ADD COLUMN favoriteNumber Float64 DEFAULT 7;

events テーブルにクエリを実行すると、次の出力が表示されます:

┌───────date─┬─name───┬─favoriteNumber─┐
│ 2024-12-18 │ Alexey │              7 │
└────────────┴────────┴────────────────┘

Alexey の行では、その行を追加した時点ではそのカラムが存在していなかったため、デフォルト値は 7 になります。 次に、別のカラムを追加してみましょう。

INSERT INTO events (name) VALUES ('Tyler');

events テーブルにクエリを実行すると、次の出力が表示されます。

┏━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━┓
┃       date ┃ name   ┃ favoriteNumber ┃
┡━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━━┩
│ 2024-12-18 │ Tyler  │              7 │
├────────────┼────────┼────────────────┤
│ 2024-12-18 │ Alexey │              7 │
└────────────┴────────┴────────────────┘

カラムのデフォルト値の変更

ALTER TABLE...MODIFY COLUMN 句を使って favoriteNumber カラムを別の型に変更すると、少し複雑な挙動になります。

ALTER TABLE events 
MODIFY COLUMN favoriteNumber Float64 DEFAULT 99;

events に再度クエリを実行すると、次の出力が表示されます:

┏━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━┓
┃       date ┃ name   ┃ favoriteNumber ┃
┡━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━━┩
│ 2024-12-18 │ Tyler  │              7 │
├────────────┼────────┼────────────────┤
│ 2024-12-18 │ Alexey │             99 │
└────────────┴────────┴────────────────┘

Tyler には値 7 が保持されます。これは、その行が作成された時点でのデフォルト値です。 Alexey には新しいデフォルト値 99 が適用されます。これは、その行が作成された時点では favoriteNumber カラムが存在していなかったためです。

Alexey の行に現在のデフォルト値をすぐ反映させたい場合は、現在のデフォルト値をディスクに書き込むよう強制するため、OPTIMIZE TABLE を実行する必要があります:

OPTIMIZE TABLE events;

それが済んだら、デフォルト値をもう一度変更するとします。

ALTER TABLE events 
MODIFY COLUMN favoriteNumber Float64 DEFAULT 21;

次に、別の行を挿入します:

INSERT INTO events (name) VALUES ('Tanya');

最後に、events に対してもう一度クエリを実行してみましょう:

┏━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━┓
┃       date ┃ name   ┃ favoriteNumber ┃
┡━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━━┩
│ 2024-12-18 │ Alexey │             99 │
├────────────┼────────┼────────────────┤
│ 2024-12-18 │ Tyler  │              7 │
├────────────┼────────┼────────────────┤
│ 2024-12-18 │ Tanya  │             21 │
└────────────┴────────┴────────────────┘

Tanya には新しいデフォルト値の 21 が適用されますが、Alexey には古いデフォルト値の 99 が適用されます。

テーブル内のカラムの位置を制御する

新しいカラムを追加すると、デフォルトではテーブルの末尾に追加されます。 ただし、FIRST 句と AFTER 句を使うことで、カラムを配置する位置を指定できます。

たとえば、name カラムの後に favoriteColor という名前のカラムを追加する場合は、次のようにします。

ALTER TABLE events
ADD COLUMN favoriteColor String DEFAULT 'Yellow' AFTER name;

events にクエリを実行してみましょう:

┏━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┓
┃       date ┃ name   ┃ favoriteColor ┃ favoriteNumber ┃
┡━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━┩
│ 2024-12-18 │ Alexey │ Yellow        │             99 │
├────────────┼────────┼───────────────┼────────────────┤
│ 2024-12-18 │ Tyler  │ Yellow        │              7 │
├────────────┼────────┼───────────────┼────────────────┤
│ 2024-12-18 │ Tanya  │ Yellow        │             21 │
└────────────┴────────┴───────────────┴────────────────┘

また、favoriteDatabase カラムを追加して、それを一覧の先頭に表示したい場合は、次のようにします。

ALTER TABLE events
ADD COLUMN favoriteDatabase String DEFAULT 'ClickHouse' FIRST;
┏━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┓
┃ favoriteDatabase ┃       date ┃ name   ┃ favoriteColor ┃ favoriteNumber ┃
┡━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━┩
│ ClickHouse       │ 2024-12-18 │ Tanya  │ Yellow        │             21 │
├──────────────────┼────────────┼────────┼───────────────┼────────────────┤
│ ClickHouse       │ 2024-12-18 │ Alexey │ Yellow        │             99 │
├──────────────────┼────────────┼────────┼───────────────┼────────────────┤
│ ClickHouse       │ 2024-12-18 │ Tyler  │ Yellow        │              7 │
└──────────────────┴────────────┴────────┴───────────────┴────────────────┘

それでは、テーブル定義を見てみましょう。

SHOW CREATE TABLE events
FORMAT LineAsString
CREATE TABLE default.`clickhouse-local-ab404c86-56cc-495b-ad1d-fb343cac3bc0events`
(
    `favoriteDatabase` String DEFAULT 'ClickHouse',
    `date` Date DEFAULT today(),
    `name` String,
    `favoriteColor` String DEFAULT 'Yellow',
    `favoriteNumber` Float64 DEFAULT 21
)
ENGINE = MergeTree
ORDER BY date
Navigation