openGauss SQL参考—SQL语法:CREATE TABLE PARTITION(3)

  • COMPRESS / NOCOMPRESS

    创建一个新表时,需要在创建表语句中指定关键字COMPRESS,这样,当对该表进行批量插入时就会触发压缩特性。该特性会在页范围内扫描所有元组数据,生成字典、压缩元组数据并进行存储。指定关键字NOCOMPRESS则不对表进行压缩。行存表不支持压缩。该参数已废弃,列存表请使用COMPRESSION修改压缩等级。

    缺省值为NOCOMPRESS,即不对元组数据进行压缩。

  • TABLESPACE tablespace_name

    指定新表将要在tablespace_name表空间内创建。如果没有声明,将使用默认表空间。

  • TO { GROUP groupname | NODE ( nodename [, … ] ) }

    此语法仅在扩展模式(GUC参数support_extended_features为on时)下可用。该模式谨慎打开,主要供内部扩容工具使用,一般用户不应使用该模式。

  • PARTITION BY VALUES (partition_key)

    创建数值分区。partition_key为分区键的名称。

  • PARTITION BY RANGE [COLUMNS](partition_key)

    创建范围分区。partition_key为分区键的名称。

    COLUMNS关键字只能在sql_compatibility='B'时使用,“PARTITION BY RANGE COLUMNS” 语义同 “PARTITION BY RANGE”。

    (1)对于从句是VALUES LESS THAN的语法格式:

     须知: 对于从句是VALUE LESS THAN的语法格式,范围分区策略的分区键最多支持16列。

    该情形下,分区键支持的数据类型为:SMALLINT、INTEGER、BIGINT、DECIMAL、NUMERIC、REAL、DOUBLE PRECISION、CHARACTER VARYING(n)、VARCHAR(n)、CHARACTER(n)、CHAR(n)、CHARACTER、CHAR、TEXT、NVARCHAR、NVARCHAR2、NAME、TIMESTAMP[(p)] [WITHOUT TIME ZONE]、TIMESTAMP[(p)] [WITH TIME ZONE]、DATE。

    (2)对于从句是START END的语法格式:

     须知: 对于从句是START END的语法格式,范围分区策略的分区键仅支持1列。

    该情形下,分区键支持的数据类型为:SMALLINT、INTEGER、BIGINT、DECIMAL、NUMERIC、REAL、DOUBLE PRECISION、TIMESTAMP[(p)] [WITHOUT TIME ZONE]、TIMESTAMP[(p)] [WITH TIME ZONE]、DATE。

    (3)对于指定了INTERVAL子句的语法格式:

     须知: 对于指定了INTERVAL子句的语法格式,范围分区策略的分区键仅支持1列。

    该情形下,分区键支持的数据类型为:TIMESTAMP[(p)] [WITHOUT TIME ZONE]、TIMESTAMP[(p)] [WITH TIME ZONE]、DATE。

  • PARTITION partition_name VALUES LESS THAN {( { partition_value | MAXVALUE } [,…] ) | MAXVALUE }

    指定各分区的信息。partition_name为范围分区的名称。partition_value为范围分区的上边界,取值依赖于partition_key的类型。MAXVALUE表示分区的上边界,它通常用于设置最后一个范围分区的上边界。

     须知:

    • 每个分区都需要指定一个上边界。
    • 分区上边界的类型应当和分区键的类型一致。
    • 分区列表是按照分区上边界升序排列的,值较小的分区位于值较大的分区之前。
    • 不在括号内的MAVALUE只能在sql_compatibility='B'时使用,并且只能有一个分区键。
  • PARTITION partition_name {START (partition_value) END (partition_value) EVERY (interval_value)} | {START (partition_value) END (partition_value|MAXVALUE)} | {START(partition_value)} | {END (partition_value | MAXVALUE)}

    指定各分区的信息,各参数意义如下:

    • partition_name:范围分区的名称或名称前缀,除以下情形外(假定其中的partition_name是p1),均为分区的名称。

      • 若该定义是START+END+EVERY从句,则语义上定义的分区的名称依次为p1_1, p1_2, …。例如对于定义“PARTITION p1 START(1) END(4) EVERY(1)”,则生成的分区是:[1, 2), [2, 3) 和 [3, 4),名称依次为p1_1, p1_2和p1_3,即此处的p1是名称前缀。
      • 若该定义是第一个分区定义,且该定义有START值,则范围(MINVALUE, START)将自动作为第一个实际分区,其名称为p1_0,然后该定义语义描述的分区名称依次为p1_1, p1_2, …。例如对于完整定义“PARTITION p1 START(1), PARTITION p2 START(2)”,则生成的分区是:(MINVALUE, 1), [1, 2) 和 [2, MAXVALUE),其名称依次为p1_0, p1_1和p2,即此处p1是名称前缀,p2是分区名称。这里MINVALUE表示最小值。
    • partition_value:范围分区的端点值(起始或终点),取值依赖于partition_key的类型,不可是MAXVALUE。

    • interval_value:对[START,END) 表示的范围进行切分,interval_value是指定切分后每个分区的宽度,不可是MAXVALUE;如果(END-START)值不能整除以EVERY值,则仅最后一个分区的宽度小于EVERY值。

    • MAXVALUE:表示最大值,它通常用于设置最后一个范围分区的上边界。

     须知:

    1. 在创建分区表若第一个分区定义含START值,则范围(MINVALUE,START)将自动作为实际的第一个分区。
    2. START END语法需要遵循以下限制:
    • 每个partition_start_end_item中的START值(如果有的话,下同)必须小于其END值。
    • 相邻的两个partition_start_end_item,第一个的END值必须等于第二个的START值;
    • 每个partition_start_end_item中的EVERY值必须是正向递增的,且必须小于(END-START)值;
    • 每个分区包含起始值,不包含终点值,即形如:[起始值,终点值),起始值是MINVALUE时则不包含;
    • 一个partition_start_end_item创建的每个分区所属的TABLESPACE一样;
    • partition_name作为分区名称前缀时,其长度不要超过57字节,超过时自动截断;
    • 在创建、修改分区表时请注意分区表的分区总数不可超过最大限制(1048575);
    1. 在创建分区表时START END与LESS THAN语法不可混合使用。
    2. 即使创建分区表时使用START END语法,备份(gs_dump)出的SQL语句也是VALUES LESS THAN语法格式。
posted @ 2024-07-26 11:03  openGauss-bot  阅读(30)  评论(0)    收藏  举报