日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

CREATE TABLE LIKE

CREATE TABLE LIKE語句用于創建一個同Select Query結果相同的表。本文為您介紹CREATE TABLE LIKE的用法。

使用限制

  • Hologres V0.9及以下版本,CREATE TABLE LIKE語句僅支持復制表結構,不支持復制表屬性(主鍵、索引等)。請在Hologres管理控制臺的實例詳情頁查看當前版本。

  • Hologres V0.10版本開始,支持使用CREATE TABLE LIKE語句復制表結構和表屬性(主鍵、索引等),但需要執行以下命令設置GUC。開啟GUC后,CREATE TABLE LIKE只支持通過SELECT * 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語句支持復制列COMMENT(注釋),支持復制Binlog屬性,不支持復制表COMMENT和動態分區屬性。

普通表

  1. 命令格式

    在Hologres中,普通表CREATE TABLE LIKE的命令格式如下:

    --復制一張普通表,但不能復制表屬性
    CALL hg_create_table_like('new_table_name', 'select_query');
    
    --復制一張表并復制表屬性
    set hg_experimental_enable_create_table_like_properties=true;--開關參數,session級別
    CALL hg_create_table_like('new_table_name', 'select * from old_table_name');
    說明

    通過調用hg_create_table_like,系統會根據select_query結果的schema創建一個表名為new_table_name的表,但不會插入任何數據。

  2. 參數說明

    • new_table_name:要創建表的表名(不支持創建外部表),只支持固定字符串,不支持字符拼接或函數生成等。

    • select_query:查詢的SQL語句串。當SQL中的內容完全為select * from tablename時,CREATE TABLE LIKE會自動同步創建原表的所有屬性,包括pk、索引等。如果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. 參數說明

    • new_table_name:要創建表的表名(不支持創建外部表),只支持固定字符串,不支持字符拼接或函數生成等。

    • select_query:查詢的SQL語句串。當SQL中的內容完全為select * from tablename時,CREATE TABLE LIKE會自動同步創建原表的所有屬性,包括pk、索引等。如果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可視化復制表

HoloWeb提供可視化復制表功能,無需寫SQL命令就能復制表,步驟如下。

  1. 進入HoloWeb頁面,詳情請參見連接HoloWeb并執行查詢

  2. HoloWeb頁面頂部菜單欄,單擊元數據管理

  3. 元數據管理頁面左側的已登錄實例列表,鼠標右擊要復制的表,選擇復制表結構

  4. 復制表結構頁簽,配置如下參數。復制表結構

    類別

    參數

    說明

    目標位置

    表名

    目標表的表名稱,可自定義命名。默認為:源表_copy。

    描述

    對目標表的描述,可選擇是否配置。

    模式

    目標表所在的SCHEMA,默認為:public。

    高級選項

    是否同步源表屬性

    選擇目標表是否同步源表的屬性。

    說明

    僅Hologres V0.10及以上版本實例支持同步源表屬性,如果您的實例低于V0.10版本,請選擇或升級實例。

  5. 單擊右上角提交,完成表復制。