Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

あるテーブルから別のテーブルにすべての行を挿入するには?

はじめに

あるテーブルから別のテーブルへ、すべてのデータを再取り込みする必要が生じることがあります。

たとえば、ステージングテーブルから本番テーブルにデータを再取り込みしたい場合があります。この記事では、INSERT INTO ステートメントを使ってこれを行う方法を説明します。

以下に、動作の仕組みとテスト方法を示す簡単な例を示します。

  • サンプルのデータベースを作成します
CREATE DATABASE db1;
  • サンプルテーブルを作成する
CREATE TABLE db1.source_table
(
    city VARCHAR,
    country VARCHAR,
    continent VARCHAR
)
engine = MergeTree()
ORDER BY continent;
  • ソーステーブルにデータを挿入する
INSERT INTO db1.source_table (city, country, continent)
VALUES
    ('New York', 'USA', 'North America'),
    ('Tokyo', 'Japan', 'Asia'),
    ('Berlin', 'Germany', 'Europe'),
    ('Paris', 'France', 'Europe'),
    ('Cairo', 'Egypt', 'Africa'),
    ('Sydney', 'Australia', 'Australia');
  • ソーステーブルの行数を確認する
SELECT COUNT(*) FROM db1.source_table;
┌─count()─┐
│      6  │
└─────────┘
  • ソーステーブルと同じ構造を持つ新しいテーブルを作成します。
CREATE TABLE db1.target_table AS db1.source_table;
  • ソーステーブルのすべての行をターゲットテーブルに挿入します。
INSERT INTO db1.target_table SELECT * FROM db1.source_table;
  • ターゲットテーブルの行数を確認する
SELECT COUNT(*) FROM db1.target_table;
┌─count()─┐
│      6  │
└─────────┘

新しいテーブルの構造を変更したい場合は、まずソーステーブルの構造を表示して確認できます。

SHOW CREATE TABLE db1.source_table;

次に、変更後の構造で新しいテーブルを作成します。この例では、ターゲットテーブルに新しいカラム population を追加します。

CREATE TABLE db1.target_table_population
(
    `city` String,
    `country` String,
    `continent` String,
    `population` UInt16,
)
ENGINE = MergeTree
ORDER BY continent;
  • 新しいカラムを含むソーステーブルのすべての行をターゲットテーブルに挿入します。population フィールドは、すべての行で 0 に設定されます。
INSERT INTO db1.target_table_population (city, country, continent, population)
SELECT city, country, continent, 0 FROM db1.source_table;
  • ターゲットテーブルのデータを確認する
SELECT * FROM db1.target_table_population LIMIT 3;
┌─city──────┬─country───┬─continent──────┬─population─┐
│ New York  │ USA       │ North America  │          0 │
│ Tokyo     │ Japan     │ Asia           │          0 │
│ Berlin    │ Germany   │ Europe         │          0 │
└───────────┴───────────┴────────────────┴────────────┘
Navigation