本文介紹創建時空數據表的語法。
語法
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_identifier)
關于表名的設置,您需要注意以下內容:
可包含數字、大寫英文字符、小寫英文字符、半角句號(.)、中劃線(-)和下劃線(_)。
表名不能以半角句號(.)或中劃線(-)開頭。
表名的長度為1~255字符。
列定義(column_definition)
語法要素 | 是否必填 | 使用說明 |
列名(column_identifier) | 是 |
|
數據類型(data_type) | 是 | 支持的數據類型,請參見數據類型。 重要 創建時序表時,如果需要使用時間戳(TIMESTAMP)數據類型,請注意以下幾點:
|
NULL約束 | 否 | 列的值是否允許為NULL。 重要 目前Lindorm SQL不會進行NULL約束的校驗,該校驗工作是由存儲引擎執行的。 NULL約束的校驗方式取決于存儲引擎的校驗規則,不同存儲引擎的校驗規則不同,因此在使用過程中可能會出現已指定NOT NULL但仍可寫入NULL的情況。 為保證數據能夠正常寫入,請遵循以下統一要求:
|
主鍵(primary_key)
Lindorm單機版實例不支持PRIMARY KEY。
主鍵是表中數據的唯一標識,由一列或多列組成,建表時必須指定主鍵PRIMARY KEY。
在使用CREATE TABLE
語句建表時,需要注意以下內容:
引擎類型 | 主鍵使用說明 |
寬表引擎 |
|
時序引擎 |
|
分區(partition_definition)
僅時序引擎支持分區。在時序表中,用作PARTITION BY的列必須是主鍵定義中的VARCHAR列。
建表時,您可以通過PARTITION BY HASH(column1, column2, ..., columnN)
語句,顯示指定一個或多個列為表進行Hash分區。例如:PARTITION BY HASH(c1, p1)
。
表屬性(table_options)
僅寬表引擎支持表屬性(table_options)。您可以通過WITH
關鍵字添加以下表屬性:
選項 | 類型 | 描述 |
COMPRESSION | STRING | 表的壓縮算法。可選的壓縮算法分別是:
說明 寬表引擎2.3.4版本前默認未指定壓縮算法,寬表引擎2.3.4及以后的版本默認壓縮算法為ZSTD。 |
TTL | INT | 數據有效期,單位為秒(s)。 說明
|
COMPACTION_MAJOR_PERIOD | LONG | 系統執行 說明 默認值:Math.Min(TTL,1728000000ms)。如果不設置TTL,系統默認該參數值為20天(20*24*60*60*1000ms=1728000000ms)。 |
MUTABILITY | STRING | 索引相關,表示對主表的寫入模式進行分類。默認值為MUTABLE_LATEST。 所有取值如下:
取值的詳細說明,請參見高性能原生二級索引。 重要 創建索引表后,MUTABILITY參數的值不支持修改。 |
CONSISTENCY | STRING | 表的一致性屬性。對于多可用區實例,該參數表示主備數據的一致性。包括以下兩種級別:
重要 對于多可用區實例,如果數據存在先讀后寫,例如increase、append、索引更新,則需要指定主表CONSISTENCY參數的值為 |
NUMREGIONS | INT | 預先設置建表時的Region數。 |
CHS | INT | 冷熱分界線,單位為秒。 說明
|
STARTKEY和ENDKEY | 與PRIMARY KEY中第一個列的數據類型相同 | 預先設置建表的Region分區起止Key。 說明
|
SPLITKEYS | 與PRIMARY KEY中第一個列的數據類型相同 | 預先設置表的全部預分區的起始Key。 說明
|
SPLITALGO | STRING | 定義預分區的分裂算法。目前僅支持以下分裂算法:
|
DYNAMIC_COLUMNS | STRING | 是否開啟動態列。取值:
說明 動態列僅支持Varbinary類型。關于動態列的介紹,請參見動態列。 |
VERSIONS | STRING | 列值保留的版本數。取值為大于等于1的整數。默認值為1,表示保留一個版本。Lindorm支持列值保留多個版本,多版本管理的詳細說明,請參見多版本數據管理。 重要 VERSIONS參數的值過大可能會影響數據的查詢和存儲性能,請盡量避免設置過大的值。建議將VERSIONS的值設置1。 |
BLOB_BUCKET_NAME | STRING | 為包含BLOB列的表創建BUCKET。取值為自定義的BUCKET名稱。 BUCKET名稱需遵循以下規則:
說明
|
2.2.16版本前的寬表引擎在設置表屬性時不支持WITH
關鍵字,需在表屬性關鍵字前后添加半角單引號('),屬性值可以基于類型進行設置。如果屬性值的類型是字符串(STRING)則需在字符串前后添加半角單引號('),例如CREATE TABLE IF NOT EXISTS t1(c1 varchar, c2 bigint, c3 int, c4 int, PRIMARY KEY(c1,c2)) 'CONSISTENCY'='strong';
。
示例
創建支持任意空間數據類型(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));