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

CREATE PARTITION TABLE

CREATE PARTITION TABLE語句用于創建分區表。本文為您介紹CREATE PARTITION TABLE的用法。

命令說明

Partition Table,也叫分區表。父表按分區鍵(Partition Key)的值劃分為不同的子表,子表對外可見。下文無特殊說明的父表和子表皆指分區父表和子表。

分區表在使用時,需要提前創建子表。create partition table命令被用于創建分區表。也可以使用動態分區表管理功能自動創建分區子表。

分區表的不同分區子表采用不同的文件存儲,查詢時帶上分區條件,指定所需查詢的分區,避免全表掃描,快速定位存儲文件,提高處理效率。通常將事實表按照日期劃分為不同的分區。分區表的任何一個子表在元數據存儲上等同于一個非分區表,因此分區多會造成一定程度的元數據膨脹,以及小文件碎片。

如果您的數據來源于數據庫,不建議使用分區表。過多的分區會引起額外的IO資源浪費,為改善此問題并實現索引過濾加速查詢的效果,您可以將常用分區條件作為segment_key。

使用限制

  • Hologres暫不支持插入數據至分區表父表,只支持插入數據至具體的分區表子表。

    說明

    實時計算Flink版支持實時寫入數據至Hologres的分區表父表,詳情請參見實時寫入數據至Hologres的分區結果表

  • 一個分區規則只能創建一個分區表。

  • PARTITION BY類型僅支持LIST分區,切分PARTITION BY LIST只能取唯一值。

  • 若是表有主鍵,分區鍵必須是主鍵的一個子集。

注意事項

  • 如果單日分區數據小于1億條,不建議使用日作為分區條件,或創建分區表。分區表太小,查詢加速效果不明顯,可以選擇較大粒度的分區。

  • 如果您需要經常對某分區數據進行整體替換,包括執行truncate操作或者drop操作,建議使用分區表。針對該場景,執行truncate或者drop效果更好,可以避免大范圍的刪除操作。

創建分區表

  • 命令格式。

    創建分區表的命令格式如下。

    --創建分區父表語句
    CREATE TABLE [if not exists] [<schema_name>.]<table_name>  ([
      {
       <column_name> <column_type> [ <column_constraints>, [...]]
       | <table_constraints>
       [, ...]
      }
    ])
    PARTITION BY LIST(<column_name>);
    
    --創建分區子表語句
    CREATE TABLE [if not exists] [<schema_name>.]<table_name> PARTITION OF <parent_table>
      FOR VALUES IN (<string_literal>);
  • 參數說明。

    創建分區表的參數說明如下。

    參數

    說明

    if not exists

    如果已經存在相同名稱的表,不會拋出一個錯誤,而會發出一個通知,告知表關系已存在。

    schema_name

    表所在的schema名稱,若是在同一個schema創建父表和子表,可以不需要指定schema名稱。若是需要跨schema創建父表和子表,需要指定schema名稱。

    table_name

    需要創建的分區父表或分區子表的名稱。

    column_name

    新表中要創建的字段名。

    column_type

    字段的數據類型。

    column_constraints

    列約束的名稱。

    table_constraints

    表約束的名稱。

    parent_table

    子表對應的父表名稱。

    string_literal

    分區鍵。

  • 支持將TEXTVARCHAR以及INT類型的數據作為分區鍵(Partition Key),V1.3.22及以上版本支持將DATE類型設為分區鍵。

  • 使用示例。

    創建分區表的SQL語句示例如下。

    • 示例1:在public schema下創建不帶主鍵的分區父表和對應的分區子表。

      • V2.1版本起支持的語法:

        BEGIN;
        CREATE TABLE public.hologres_parent (
            a text,
            b int,
            c timestamp,
            d text
        )
        PARTITION BY LIST (a) 
        WITH (orientation = 'column');
        CREATE TABLE public.hologres_child1 PARTITION OF public.hologres_parent FOR VALUES IN ('v1');
        CREATE TABLE public.hologres_child2 PARTITION OF public.hologres_parent FOR VALUES IN ('v2');
        CREATE TABLE public.hologres_child3 PARTITION OF public.hologres_parent FOR VALUES IN ('v3');
        COMMIT;
      • 所有版本支持的語法:

        BEGIN;
        CREATE TABLE public.hologres_parent(
          a text, 
          b int, 
          c timestamp, 
          d text
        ) 
          PARTITION BY LIST(a);
        CALL set_table_property('public.hologres_parent', 'orientation', 'column');           
        CREATE TABLE public.hologres_child1 PARTITION OF public.hologres_parent FOR VALUES IN('v1');
        CREATE TABLE public.hologres_child2 PARTITION OF public.hologres_parent FOR VALUES IN('v2');
        CREATE TABLE public.hologres_child3 PARTITION OF public.hologres_parent FOR VALUES IN('v3');
        COMMIT;
    • 示例2:在public schema下創建帶主鍵的分區父表和對應的分區子表。

      V2.1版本起支持的語法:

      BEGIN;
      CREATE TABLE public.hologres_parent_2 (
          a text,
          b int,
          c timestamp,
          d text,
          ds text,
          PRIMARY KEY (ds, b)
      )
      PARTITION BY LIST (ds) 
      WITH (orientation = 'column');
      CREATE TABLE public.holo_child_1 PARTITION OF public.hologres_parent_2 FOR VALUES IN ('20201215');
      CREATE TABLE public.holo_child_2 PARTITION OF public.hologres_parent_2 FOR VALUES IN ('20201216');
      CREATE TABLE public.holo_child_3 PARTITION OF public.hologres_parent_2 FOR VALUES IN ('20201217');
      COMMIT;

      所有版本支持的語法:

      BEGIN;
      CREATE TABLE public.hologres_parent_2(
        a text , 
        b int, 
        c timestamp, 
        d text,
        ds text,
        primary key(ds,b)
        )
        PARTITION BY LIST(ds);
      CALL set_table_property('public.hologres_parent_2', 'orientation', 'column');
      CREATE TABLE public.holo_child_1 PARTITION OF public.hologres_parent_2 FOR VALUES IN('20201215');
      CREATE TABLE public.holo_child_2 PARTITION OF public.hologres_parent_2 FOR VALUES IN('20201216');
      CREATE TABLE public.holo_child_3 PARTITION OF public.hologres_parent_2 FOR VALUES IN('20201217');
      COMMIT;

查看所有分區子表

您可以通過如下兩種方法查看當前分區父表下所有的分區子表:

  • 通過HoloWeb可視化查看,HoloWeb會展示分區父表下面的所有分區子表。

  • 通過執行如下命令語句,查看當前分區父表下所有的分區子表。其中,您可以將parent_table_name修改為實際的父表名稱。

    SELECT
        nmsp_parent.nspname AS parent_schema,
        parent.relname      AS parent,
        nmsp_child.nspname  AS child_schema,
        child.relname       AS child
    FROM pg_inherits
        JOIN pg_class parent            ON pg_inherits.inhparent = parent.oid
        JOIN pg_class child             ON pg_inherits.inhrelid   = child.oid
        JOIN pg_namespace nmsp_parent   ON nmsp_parent.oid  = parent.relnamespace
        JOIN pg_namespace nmsp_child    ON nmsp_child.oid   = child.relnamespace
    WHERE parent.relname='parent_table_name'; 

分區子表和父表約束一覽表

分區子表在綁定父表時,其約束關系如下表所示。其中:

  • 與父表保持一致:即對應的屬性分區子表必須和父表保持一致,若不一致,在分區子表綁定(ATTACH)父表時會報錯,需要重新創建分區子表。

  • 不要求與父表一致:即對應的屬性分區子表可以與父表不一致,如果子表沒有顯式指定屬性,則會繼承父表的屬性,若是子表顯式指定屬性,則會保留子表的屬性。

  • 索引列必須包含父表的索引列:即分區子表的索引列必須包含父表的索引列,還能顯式再指定其他列。

分類

表屬性

描述

create table partition of 時是否繼承父表屬性

ATTACH時與父表的約束關系

表屬性

orientation

表存儲格式。

繼承

與父表保持一致。

table_group

Table Group屬性包含Shard Count。

繼承

與父表保持一致。

time_to_live_in_seconds

表數據生命周期。

繼承

不要求與父表一致。

  • 子表屬性未賦值,繼承父表屬性。

  • 子表屬性已賦值,保留子表屬性。

索引

primary key

主鍵。

繼承

與父表保持一致。

distribution_key

分布鍵。

繼承

與父表保持一致。

clustering_key

聚簇索引。

繼承

與父表保持一致。

event_time_column

分段鍵。

繼承

與父表保持一致。

bitmap_columns

比特編碼。

繼承

不要求與父表一致。

dictionary_encoding_columns

字段編碼。

繼承

不要求與父表一致。

binlog_level

是否開啟Binlog。

繼承

與父表保持一致。

proxima_vectors

向量檢索索引。

繼承

與父表保持一致。

列約束

nullable

非空約束。

繼承

與父表保持一致。

default value

默認值。

繼承

與父表保持一致。

相關文檔

  • 您可以使用Hologres的動態分區功能,無需預先設定所有分區信息,可依據創建分區表時配置的動態分區規則,自動創建并管理分區子表。關于動態分區的管理詳情,請參見動態分區管理

  • 您可以通過ALTER PARTITION TABLE語句修改分區,詳情請參見ALTER PARTITION TABLE

  • 您可以通過DROP PARTITION TABLE語句用于刪除多余分區表,詳情請參見DROP PARTITION TABLE