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

Hologres:CREATE TABLE LIKE の実行

最終更新日:May 01, 2025

指定された SELECT 文を実行して取得したテーブルと同じスキーマを持つテーブルを作成するには、CREATE TABLE LIKE 文を実行します。このトピックでは、CREATE TABLE LIKE 文の実行方法について説明します。

制限事項

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

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

    set hg_experimental_enable_create_table_like_properties=true;
  • CREATE TABLE LIKE 文では、ソーステーブルからデータを同期できません。

  • SELECT 文で列を指定する場合は、各列に一意のエイリアスを指定する必要があります。異なる列に同じエイリアスを指定すると、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 文を実行すると、列コメントとバイナリログプロパティをコピーできます。テーブルコメントまたは動的パーティション分割プロパティはコピーできません。 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 関数を呼び出すと、Hologres は、select_query パラメータで指定された SQL 文を実行して取得されたテーブルと同じスキーマを持つテーブルを作成します。 new_table_name は、作成するテーブルの名前を指定します。テーブルにはデータは挿入されません。

  2. パラメータ

    • new_table_name: 作成するテーブルの名前。このパラメータは、固定文字列に設定する必要があります。変数の文字列やテーブル名を生成するために使用される関数には設定できません。 CREATE TABLE LIKE 文を実行して外部テーブルを作成することはできません。

    • select_query: データをクエリするために使用される SQL 文。 select_query パラメータを select * from tablename に設定すると、CREATE TABLE LIKE 文は、プライマリキーとインデックスを含むソーステーブルのすべてのプロパティを自動的にコピーします。 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;

    次のいずれかの方法を使用して CREATE TABLE LIKE 文を実行し、ソーステーブルに基づいて Hologres にテーブルを作成できます。

    • ソーステーブルのスキーマとプロパティの両方をコピーしてテーブルを作成するには、次の文を実行します。

      -- ソーステーブルのスキーマとプロパティの両方をコピーしてテーブルを作成します。
      set hg_experimental_enable_create_table_like_properties=true;
      CALL hg_create_table_like('new_table', 'select * from src_table');
    • ソーステーブルのスキーマに列を追加してテーブルを作成するには、次の文を実行します。

      -- ソーステーブルのスキーマに列 c を追加してテーブルを作成します。列 c は、列 b と同じプロパティを持ちます。
      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. パラメータ

    • new_table_name: 作成するテーブルの名前。このパラメータは、固定文字列に設定する必要があります。変数の文字列やテーブル名を生成するために使用される関数には設定できません。 CREATE TABLE LIKE 文を実行して外部テーブルを作成することはできません。

    • select_query: データをクエリするために使用される SQL 文。 select_query パラメータを select * from tablename に設定すると、CREATE TABLE LIKE 文は、プライマリキーとインデックスを含むソーステーブルのすべてのプロパティを自動的にコピーします。 SQL 文に多数の単一引用符(')が含まれている場合は、単一引用符(')をエスケープするために、$$query_sql$$ の形式でクエリ文を指定することをお勧めします。この方法を使用すると、操作を簡素化できます。サンプル文:

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

  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;

    CREATE TABLE LIKE 文を実行して、ソーステーブルに基づいて Hologres にパーティションテーブルを作成し、CREATE TABLE 文を実行して子のパーティションテーブルを作成できます。

    • パーティションテーブルを作成するには、次の文を実行します。

      -- ソーステーブルのスキーマに列 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 コンソールでのテーブルのコピー

HoloWeb を使用すると、SQL 文を記述することなく、視覚化された方法でテーブルをコピーできます。手順:

  1. [HoloWeb コンソール] にログオンします。詳細については、「HoloWeb に接続してクエリを実行する」をご参照ください。

  2. [HoloWeb コンソール] の上部ナビゲーションバーで、[メタデータ管理] をクリックします。

  3. [メタデータ管理] タブの左側のナビゲーションウィンドウで、[接続済みインスタンス] リストでコピーするテーブルを右クリックし、[テーブルスキーマの複製] を選択します。

  4. [テーブルスキーマの複製] タブで、必要に応じてパラメータを構成します。复制表结构

    セクション

    パラメータ

    説明

    コピー先ロケーション

    テーブル名

    コピー先テーブルの名前。カスタム名を構成できます。デフォルト値:ソーステーブル名_copy。

    説明

    コピー先テーブルの説明。このパラメータはオプションです。

    スキーマ

    コピー先テーブルが存在するスキーマの名前。デフォルト値:public。

    詳細設定

    ソーステーブルのプロパティを複製する

    ソーステーブルのプロパティをコピー先テーブルにコピーするかどうかを指定します。

    説明

    ソーステーブルのプロパティは、Hologres V0.10 以降でのみコピーできます。 Hologres インスタンスのバージョンが V0.10 より前の場合は、このパラメータを [いいえ] に設定するか、インスタンスをアップグレードします。

  5. 右上隅にある [送信] をクリックします。