すべてのプロダクト
Search
ドキュメントセンター

Hologres:CREATE TABLE LIKE

最終更新日:Feb 04, 2026

`CREATE TABLE LIKE` 文は、`SELECT` クエリの結果と同一のスキーマを持つテーブルを作成します。このトピックでは、`CREATE TABLE LIKE` 文の使用方法について説明します。

制限事項

  • Hologres V0.9 以前のバージョンでは、CREATE TABLE LIKE 文はテーブルスキーマのみをコピーします。プライマリキーやインデックスなどのテーブルプロパティはコピーされません。インスタンスのバージョンは、Hologres コンソールのインスタンス製品ページで確認できます。

  • Hologres V0.10 以降のバージョンでは、CREATE TABLE LIKE 文を使用して、テーブルスキーマと、プライマリキーやインデックスなどのテーブルプロパティの両方をコピーできます。これを行うには、次のコマンドを実行して Grand Unified Configuration (GUC) パラメーターを設定する必要があります。このパラメーターを有効にすると、CREATE TABLE LIKESELECT * FROM <table_name> 構文を使用した場合にのみテーブルのコピーをサポートします。`SELECT <column_1>, <column_2> FROM <table_name>` などの他の構文はサポートされていません。

    set hg_experimental_enable_create_table_like_properties=true;
  • CREATE TABLE LIKE 文を使用して作成されたテーブルは、ソーステーブルからデータを自動的に同期しません。

  • クエリ文の各ターゲットカラムには、一意のエイリアスが必要です。そうしないと、テーブルを作成する文が同じ名前のカラムを生成し、実行エラーが発生します。例:

    CALL hg_create_table_like('new_table', 'select *, 1 as c, ''a'' as c from src_table');
    ERROR:  column "c" specified more than once
    CONTEXT:  SQL statement "create table new_table (
    "a"     integer,
    "b"     text,
    "c"     integer,
    "c"     text
    );"
    PL/pgSQL function hg_create_table_like(text,text) line 22 at EXECUTE
  • CREATE TABLE LIKE 文は、カラムコメントとバイナリログ (Binlog) プロパティのコピーをサポートしています。テーブルコメントや動的パーティションプロパティのコピーはサポートしていません。テーブルコメントをコピーする機能は、Hologres V3.0.33 以降で利用可能です。

標準テーブル

  1. 構文

    Hologres では、標準テーブルに対する CREATE TABLE LIKE 文の構文は次のとおりです。

    -- プロパティなしで標準テーブルをコピーします。
    CALL hg_create_table_like('new_table_name', 'select_query');
    
    -- テーブルとそのプロパティをコピーします。
    set hg_experimental_enable_create_table_like_properties=true;-- セッションレベルのスイッチパラメーター。
    CALL hg_create_table_like('new_table_name', 'select * from old_table_name');
    説明

    hg_create_table_like 関数を呼び出すと、select_query の結果のスキーマに基づいて new_table_name という名前のテーブルが作成されます。データは挿入されません。

  2. Parameter Description

    • new_table_name:作成するテーブルの名前。外部テーブルは作成できません。このパラメーターは固定文字列のみをサポートします。文字列連結や関数で生成された文字列はサポートされていません。

    • select_query:文字列として指定されるクエリ SQL 文。SQL 文が厳密に select * from tablename である場合、CREATE TABLE LIKE はプライマリキーとインデックスを含むソーステーブルのすべてのプロパティを自動的にコピーします。SQL 文に複数のシングルクォーテーションが含まれている場合は、SQL 文を $$ 記号で囲むことができます。これにより、文を $$query_sql$$ として再書き込みし、シングルクォーテーションを自動的にエスケープできます。この方法は使いやすいため推奨されます。構文は次のとおりです。

      CALL HG_CREATE_TABLE_LIKE ('table_name', $$query_sql$$ [, 'partition_clause'])
    • old_table_name:コピーするソーステーブルの名前。

  3. Hologres に次のソーステーブルが存在すると仮定します。

    BEGIN;
    CREATE TABLE public.src_table (
     "a" int8 NOT NULL,
     "b" text NOT NULL,
    PRIMARY KEY (a)
    );
    CALL SET_TABLE_PROPERTY('public.src_table', 'orientation', 'column');
    CALL SET_TABLE_PROPERTY('public.src_table', 'bitmap_columns', 'b');
    CALL SET_TABLE_PROPERTY('public.src_table', 'dictionary_encoding_columns', 'b:auto');
    CALL SET_TABLE_PROPERTY('public.src_table', 'time_to_live_in_seconds', '3153600000');
    CALL SET_TABLE_PROPERTY('public.src_table', 'distribution_key', 'a');
    CALL SET_TABLE_PROPERTY('public.src_table', 'storage_format', 'segment');
    COMMIT;

    次の例は、Hologres で CREATE TABLE LIKE を使用する方法を示しています。

    • ソーステーブルと同じスキーマとプロパティを持つテーブルを作成します。

      -- テーブルとそのプロパティをコピーします。
      set hg_experimental_enable_create_table_like_properties=true;
      CALL hg_create_table_like('new_table', 'select * from src_table');
    • ソーステーブルに基づいてフィールドを追加してテーブルを作成します。

      -- フィールド b と同じフィールド c を追加します。
      CALL hg_create_table_like('holo_table_1', $$select *, "b" as c from src_table$$);

パーティションテーブル

  1. 構文

    Hologres では、パーティションテーブルに対する CREATE TABLE LIKE 文の構文は次のとおりです。

    -- プロパティなしでパーティションテーブルをコピーします。
    CALL hg_create_table_like('new_table_name', 'select_query', 'partition_clause');
  2. Parameter Description

    • new_table_name:作成するテーブルの名前。外部テーブルは作成できません。このパラメーターは固定文字列のみをサポートします。文字列連結や関数で生成された文字列はサポートされていません。

    • select_query:文字列として指定されるクエリ SQL 文。SQL 文が厳密に select * from tablename である場合、CREATE TABLE LIKE はプライマリキーとインデックスを含むソーステーブルのすべてのプロパティを自動的にコピーします。SQL 文に複数のシングルクォーテーションが含まれている場合は、SQL 文を $$ 記号で囲むことができます。これにより、文を $$query_sql$$ として再書き込みし、シングルクォーテーションを自動的にエスケープできます。この方法は使いやすいため推奨されます。構文は次のとおりです。

      CALL HG_CREATE_TABLE_LIKE ('table_name', $$query_sql$$ [, 'partition_clause'])
    • partition_clause:パーティションを定義する句。このパラメーターを使用してパーティションキーを指定できます。子パーティションテーブルは自動的に作成されません。手動で作成する必要があります。

  3. Hologres に次のソーステーブルが存在すると仮定します。

    BEGIN;
    CREATE TABLE public.src_table (
     "a" int8 NOT NULL,
     "b" text NOT NULL,
    PRIMARY KEY (a)
    );
    CALL SET_TABLE_PROPERTY('public.src_table', 'orientation', 'column');
    CALL SET_TABLE_PROPERTY('public.src_table', 'bitmap_columns', 'b');
    CALL SET_TABLE_PROPERTY('public.src_table', 'dictionary_encoding_columns', 'b:auto');
    CALL SET_TABLE_PROPERTY('public.src_table', 'time_to_live_in_seconds', '3153600000');
    CALL SET_TABLE_PROPERTY('public.src_table', 'distribution_key', 'a');
    CALL SET_TABLE_PROPERTY('public.src_table', 'storage_format', 'segment');
    COMMIT;

    次の例は、Hologres で CREATE TABLE LIKE を使用してパーティションテーブルを作成する方法を示しています。

    • パーティションテーブルを作成します。

      -- ds という名前のフィールドを追加し、テーブルを ds でパーティション分割されたパーティションテーブルとして設定します。
      CALL hg_create_table_like('new_table', $$select *, "b" as ds from src_table$$, 'partition by list(ds)');
    • パーティションテーブルの子パーティションテーブルを作成します。

      create table new_table_child_20201213 partition of new_table for values in('20201213');-- パーティション値として 20201213 を使用します。
      create table new_table_child_20201214 partition of new_table for values in('20201214');-- パーティション値として 20201214 を使用します。

HoloWeb UI を使用したテーブルのコピー

HoloWeb は、SQL コマンドを記述せずにテーブルをコピーできるユーザーインターフェース (UI) を提供します。これを行うには、次の手順を実行します。

  1. HoloWeb ページに移動します。詳細については、「HoloWeb への接続とクエリの実行」をご参照ください。

  2. HoloWeb ページの上部のメニューバーで、Metadata Management をクリックします。

  3. Metadata Management ページの左側にあるナビゲーションウィンドウの [ログイン中のインスタンス] リストで、複製するテーブルを右クリックし、Replicate Table Schema を選択します。

  4. Replicate Table Schema タブで、次のパラメーターを設定します。复制表结构

    カテゴリ

    パラメーター

    説明

    ターゲットの場所

    テーブル名

    ターゲットテーブルの名前。カスタム名を指定できます。デフォルト名は <source_table_name>_copy です。

    説明

    ターゲットテーブルの説明。このパラメーターはオプションです。

    スキーマ

    ターゲットテーブルが存在するスキーマ。デフォルト値は public です。

    詳細オプション

    ソーステーブルのプロパティを同期

    ソーステーブルのプロパティをターゲットテーブルに同期するかどうかを指定します。

    説明

    Hologres V0.10 以降のインスタンスのみがソーステーブルプロパティの同期をサポートします。ご利用のインスタンスが V0.10 より前のバージョンの場合は、No を選択するか、インスタンスをアップグレードしてください。

  5. 右上隅にある Submit をクリックしてテーブルをコピーします。