全部产品
Search
文档中心

云原生多模数据库 Lindorm:CREATE TABLE

更新时间:Aug 04, 2023

本文介绍创建时空数据表的语法。

语法

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            ::=  primary_item [ ',' primary_item ]
primary_item           ::=  column_name (ASC|DESC)
                            | [z-order] '(' [ column_name ( ',' column_name )* ] ')'
说明

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

支持的Table_Option列表

选项类型描述
COMPRESSIONString表的压缩算法。可选的压缩算法分别是:
  • SNAPPY
  • ZSTD
  • LZ4
说明 宽表引擎2.3.4版本前默认不指定压缩算法,宽表引擎2.3.4及以后的版本默认压缩算法为ZSTD。
TTLInt数据有效期,单位为秒(s)。
说明 表的TTL选项的默认行为是不过期。对于一个已经设置了TTL值的表若要将其重置为不过期,则需要将它的TTL修改为空字符串。具体用法可参见示例
COMPACTION_MAJOR_PERIODLong系统major compact周期 ,单位为毫秒(ms)。可参考下方创建周期为10天的表的示例。
说明 默认值:Math.Min(TTL,1728000000ms)不设置TTL的话,这个参数系统默认设置的是20天(20*24*60*60*1000ms=1728000000ms)。
MUTABILITYString索引相关,表示对主表的写入模式进行分类。默认值为MUTABLE_LATEST。
所有取值:
  • IMMUTABLE
  • IMMUTABLE_ROWS
  • MUTABLE_LATEST
  • MUTABLE_ALL
说明 具体含义请参见高性能原生二级索引
CONSISTENCYString表的一致性。默认主表和索引表最终一致,包括以下两种级别:
  • eventual:默认值。表示在某个时间点后主表和索引表最终保持一致。
  • strong:表示强一致性。在任意时刻,所有表中的数据是同步一致的。
NUMREGIONSInt预先设置建表时的Region数。
CHSInt冷热分界线,单位为秒。
说明
  • 设置冷热分界线需要开通冷存储功能,功能介绍和开通方式参考冷热分离介绍
  • 设置冷热分界线选项时,必须同时带上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_COLUMNSString是否开启动态列。取值:
  • True:是。
  • False:否,默认值。
说明 动态列只支持Varbinary类型。关于动态列的介绍,请参见动态列
VERSIONSString列值保留的版本数。取值为大于等于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两边添加单引号(')。以下示例都可以执行。

示例

  • 创建支持任意空间数据类型(Geometry)的表,可以写入任意空间数据类型。

    CREATE TABLE geoms(gid INT, g GEOMETRY, PRIMARY KEY(gid));

    写入任意空间数据类型的数据。

    UPSERT INTO geoms(gid, g) VALUES(0,ST_GeomFromText('POINT(-10.1 3.3)')),(1,ST_GeomFromText('LINESTRING(-12.2 4.3, -10.2 4.3)')),(2,ST_GeomFromText('POLYGON((2 2, 2 8, 8 8, 8 2, 2 2))'));
  • 创建支持点类型(Point)的表,仅支持写入点数据。

    CREATE TABLE pts(gid INT, g GEOMETRY(POINT), PRIMARY KEY(gid));

    写入点数据。

    UPSERT INTO pts(gid, g) VALUES(0, ST_MakePoint(0,0)),(1, ST_MakePoint(1,1));
  • 创建支持面类型(Polygon)的表,仅支持写入面数据。

    CREATE TABLE polys(gid INT, g GEOMETRY(POLYGON), PRIMARY KEY(gid));

    写入面数据。

    UPSERT INTO polys(gid,g) VALUES(0,ST_GeomFromText('POLYGON((2 2, 2 8, 8 8, 8 2, 2 2))'));
  • 创建支持线类型(LineString)的表,仅支持写入线数据。

    CREATE TABLE lines(gid INT, g GEOMETRY(LINESTRING), PRIMARY KEY(gid));

    写入线数据。

    UPSERT INTO lines(gid,g) VALUES(0, ST_GeomFromText('LINESTRING(-12.2 4.3, -10.2 4.3)'));
  • 创建支持多点(MULTIPOINT)类型的表,仅支持写入多点数据。

    CREATE TABLE multipoints(gid INT, g GEOMETRY(MULTIPOINT), PRIMARY KEY(gid));

    写入多点数据。

    UPSERT INTO multipoints(gid,g) VALUES(0, ST_GeomFromText('MULTIPOINT (10 40, 40 30, 20 20, 30 10)'));
  • 创建支持多线段(MULTILINESTRING)类型的表,仅支持写入多线段数据。

    CREATE TABLE multilines(gid INT, g GEOMETRY(MULTILINESTRING), PRIMARY KEY(gid));

    写入多线段数据。

    UPSERT INTO multilines(gid,g) VALUES(0, ST_GeomFromText('MULTILINESTRING ((10 10, 20 20, 10 40),(40 40, 30 30, 40 20, 30 10))'));
  • 创建支持多面(MULTIPOLYGON)类型的表,仅支持写入多面数据。

    CREATE TABLE multipolys(gid INT, g GEOMETRY(MULTIPOLYGON), PRIMARY KEY(gid));

    写入多面数据。

    UPSERT INTO multipolys(gid,g) VALUES(0, ST_GeomFromText('MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)),((15 5, 40 10, 10 20, 5 10, 15 5)))'));
  • 创建支持多空间对象(GEOMETRYCOLLECTION)类型的表,仅支持写入多空间对象数据。

    CREATE TABLE collections(gid INT, g GEOMETRY(GEOMETRYCOLLECTION), PRIMARY KEY(gid));

    写入多空间对象数据。

    UPSERT INTO collections(gid,g) VALUES(0, ST_GeomFromText('GEOMETRYCOLLECTION (POINT (40 10), LINESTRING (10 10, 20 20, 10 40), POLYGON ((40 40, 20 45, 45 30, 40 40)))'));
  • 创建由多个空间数据类型(Geometry)的列组成的表。

    CREATE TABLE mix(gid INT, pt GEOMETRY(POINT), ply GEOMETRY(POLYGON), PRIMARY KEY(gid));