CREATE TABLE

更新时间: 2023-08-16 11:09:08

创建Lindorm表结构。

语法

create_table_statement ::=  CREATE TABLE [ IF NOT EXISTS ] table_name
                            '('
                                column_definition
                                ( ',' column_definition )*
                                 ',' [constraint pk]  PRIMARY KEY '(' primary_key ')' 
                            ')' WITH [ table_options ]
column_definition      ::=  column_name lql_type 
primary_key            ::=  column_name [ ',' column_name (ASC|DESC)]
table_options          ::=  '(' option_definition (',' option_definition )*  ')'
option_definition      ::=  option_name '=' string_literal
说明

创建表语句支持IF NOT EXISTS,其中主键由某个或某几个列组合而成。

支持的Table_Option列表

选项

类型

描述

COMPRESSION

String

表的压缩算法。可选的压缩算法分别是:

  • SNAPPY

  • ZSTD

  • LZ4

说明

宽表引擎2.3.4版本前默认不指定压缩算法,宽表引擎2.3.4及以后的版本默认压缩算法为ZSTD。

TTL

Int

数据有效期,单位为秒(s)。

说明

表的TTL选项的默认行为是不过期。对于一个已经设置了TTL值的表若要将其重置为不过期,则需要将它的TTL修改为空字符串。具体用法可参见示例

COMPACTION_MAJOR_PERIOD

Long

系统major compact周期 ,单位为毫秒(ms)。可参考下方创建周期为10天的表的示例。

说明

默认值:Math.Min(TTL,1728000000ms)不设置TTL的话,这个参数系统默认设置的是20天(20*24*60*60*1000ms=1728000000ms)。

MUTABILITY

String

索引相关,表示对主表的写入模式进行分类。默认值为MUTABLE_LATEST。

所有取值:

  • IMMUTABLE

  • IMMUTABLE_ROWS

  • MUTABLE_LATEST

  • MUTABLE_ALL

说明

具体含义请参见高性能原生二级索引

CONSISTENCY

String

表的一致性。默认主表和索引表最终一致,包括以下两种级别:

  • eventual:默认值。表示在某个时间点后主表和索引表最终保持一致。

  • strong:表示强一致性。在任意时刻,所有表中的数据是同步一致的。

NUMREGIONS

Int

预先设置建表时的Region数。

CHS

Int

冷热分界线,单位为秒。

说明
  • 设置冷热分界线需要开通冷存储功能,功能介绍和开通方式参考冷热分离介绍

  • 设置冷热分界线选项时,必须同时带上CHS_L2='storagetype=COLD'选项。

STARTKEY和ENDKEY

与PRIMARY KEY中第一个列的数据类型相同

预先设置建表的Region分区起止Key。

说明
  • 如果指定STARTKEY和ENDKEY,必须与NUMREGIONS同时指定。如果在未指定NUMREGIONS的情况下指定STARTKEY和ENDKEY将不会产生实际效果。

  • STARTKEY和ENDKEY中指定的字符串常量值将会隐式转换为PRIMARY KEY中的第一个列的类型用作分区的起止Key,且当前仅支持对以下类型指定STARTKEY和ENDKEY。

    • SMALLINT

    • INTEGER

    • BIGINT

    • CHAR

    • VARCHAR

    • FLOAT

    • DOUBLE

SPLITKEYS

与PRIMARY KEY中第一个列的数据类型相同

预先设置表的全部预分区的起始Key。

说明
  • SPLITKEYS从宽表引擎2.5.4版本开始支持。

  • 指定字符串形式的SPLITKEYS值中通过半角逗号(,)区分各个预分区的起始Key。置于成对双引号中的逗号将会被视作普通字符。

  • SPLITKEYS无法与NUMREGIONS、STARTKEY以及ENDKEY一同使用。

  • 与STARTKEY和ENDKEY一样,指定的字符串常量值将会隐式转换为PRIMARY KEY中的第一个列的类型用作分区的起始Key。仅支持以下数据类型。

    • SMALLINT

    • INTEGER

    • BIGINT

    • CHAR

    • VARCHAR

    • FLOAT

    • DOUBLE

DYNAMIC_COLUMNS

String

是否开启动态列。取值:

  • True:是。

  • False:否,默认值。

说明

动态列只支持Varbinary类型。关于动态列的介绍,请参见动态列

VERSIONS

String

列值保留的版本数。取值为大于等于1的整数。默认值为1,表示保留一个版本。Lindorm支持列值保留多个版本,多版本管理的详细说明,请参见多版本数据管理

重要

VERSIONS参数的值过大可能会影响数据的查询和存储性能,请您尽量避免设置过大的值。建议将VERSIONS的值设置1。

说明

Lindorm 2.2.16版本后设置表属性支持多种关键字,Lindorm 2.2.16版本前设置表属性无需添加WITH关键字,设置表属性需要在属性关键字KEY上添加单引号('),属性VALUE上基于类型进行设置,如果属性VALUE类型是字符串则添加单引号(')。 但是自Lindorm 2.2.16版本,不但支持Lindorm 2.2.16版本前语法规则,而且还支持表属性前加关键字WITH,所有属性的KEY两边无需添加单引号('),属性VALUE两边添加单引号(')。以下示例都可以执行。

示例

  • 通过以下两种方式创建宽表。

    • 方式一

      CREATE TABLE dt (
        p1 integer, p2 binary(3), c1 varchar, c2 decimal(22, 2),
        PRIMARY KEY(p1, p2 desc));
    • 方式二

      CREATE TABLE dt (
        p1 integer, p2 binary(3), c1 varchar, c2 decimal(22, 2),
        constraint pk PRIMARY KEY(p1, p2 desc));  
  • 通过以下方式创建一张宽表并指定表的压缩算法和数据有效期。

    CREATE TABLE dt (
      p1 integer, p2 integer, c1 varchar, c2 bigint,
      constraint pk PRIMARY KEY(p1 desc)) WITH (COMPRESSION='ZSTD', TTL='2592000');
  • 通过以下方式创建一张指定major compact周期为10天(10*24*60*60*1000ms)的表

    CREATE TABLE dt (  
    p1 integer, p2 integer,primary KEY(p1)) 
    WITH (COMPACTION_MAJOR_PERIOD='864000000');
  • 通过以下方式创建一张允许写入动态列数据的宽表。

    CREATE TABLE dt (
      p1 integer, p2 integer, c1 varchar, c2 bigint, PRIMARY KEY(p1)) 
      WITH (DYNAMIC_COLUMNS='TRUE');
  • 通过以下方式创建一张预定义5个分区,且这5个分区的起始KEY为1000、终止KEY为9000的宽表。

    CREATE TABLE dt (
      p1 int, c1 int, c2 varchar, c3 varchar primary key(p1)) 
      WITH (NUMREGIONS='5', STARTKEY='1000', ENDKEY='9000');
  • 通过以下方式创建一张宽表并指定冷热分界线。

    CREATE TABLE dt (
      p1 integer,
      p2 integer,
      c1 varchar,
      c2 bigint,
      constraint pk primary key(p1 desc))
    
      WITH (CHS = '86400', CHS_L2 = 'storagetype=COLD');
  • 通过以下方式创建一张宽表并指定表的压缩算法、数据有效期以及冷热分界线。

    CREATE TABLE dt (
      p1 integer,
      p2 integer,
      c1 varchar,
      c2 bigint,
      constraint pk primary key(p1 desc))
    
      WITH (COMPRESSION='ZSTD', CHS = '86400', CHS_L2 = 'storagetype=COLD', TTL = '2592000');
  • 通过以下方式可创建一张事先定义好5个预分区起始Key的宽表,此时表创建后默认包含6个预分区。

    CREATE TABLE dt (
      p1 integer,
      p2 integer,
      c1 varchar,
      c2 bigint,
      primary key(p1, p2))
    
      WITH (SPLITKEYS = '100000,300000,500000,700000,900000');
阿里云首页 云原生多模数据库 Lindorm 相关技术圈