create
create 语句用于创建数据库或者数据表。其语法如下:
创建分布式数据库
该语句只支持创建分布式数据库。
create database directory partitioned by partitionType(partitionScheme),[partitionType(partitionScheme),partitionType(partitionScheme)],
[engine='OLAP'], [atomic='TRANS'], [chunkGranularity='TABLE']
在 create database 语句中,'partitionType' 的个数表示分区的层级,最少1个,最多3个。当指定多个 'partitionType' 时,表示组合分区。其它参数详情请参考函数 database。
创建数据表
该语句只支持创建普通内存表和分布式表。
语法
create table dbPath.tableName (
schema[columnDescription]
)
[partitioned by partitionColumns],
[sortColumns],
[keepDuplicates=ALL],
[sortKeyMappingFunction]
[softDelete=false]
参数
-
dbPath 字符串,表示数据库的路径。创建内存表时,可以不指定该参数。
-
tableName 可以为表示表名的字符串,或者表示表对象的变量。
-
schema 表结构,包含两列: columnName 和 columnType。
-
columnDescription 为列字段添加描述,以 keywords 方式进行添加。可包含以下两项:
-
comment 为列字段添加注释;
-
compress 指定压缩方式,包含以下3种方式:
-
“lz4”
-
“delta”
-
“zstd“
-
-
-
partitionColumns 字符串或字符串向量,表示分区列。对于组合分区,partitionColumns 是一个字符串向量。
-
softDelete 用于启用或禁用软删除功能。默认为 false,即禁用。该参数适于在行数多但删除量小的场景下使用。使用该参数需要同时满足以下条件:
-
由TSDB 存储引擎创建的数据库内的表。
-
keepDuplicates 已设置为 LAST。
-
-
sortColumns TSDB 引擎必选参数,字符串标量或向量,用于指定每一分区内的排序列。
-
keepDuplicates 指定在每个分区内如何处理所有 sortColumns 之值皆相同的数据,默认值为 ALL。提供以下选项:
-
ALL: 保留所有数据
-
LAST:仅保留最新数据
-
FIRST:仅保留第一条数据
-
-
sortKeyMappingFunction 由一元函数对象组成的向量,其长度与索引列一致,即 sortColumns 的长度 - 1,若只指定一个映射函数 mapfunc,必须写为 sortKeyMappingFunction=[mapfunc]。用于指定应用在索引列中各列的映射函数,以减少 sort key 的组合数,该过程称为 sort key 降维。
索引列中的各列被对应的映射函数降维后,原本的多个 sort key 组合值会被重新映射到一个新的 sort key 组合值上。而每个新 sort key 组合值对应的数据仍将根据 sortColumns 的最后一列(时间列)进行排序。降维在写入磁盘时进行,因此指定该参数一定程度上将影响写入性能。
-
创建维度表时,不可指定该参数。
-
sortKeyMappingFunction 指定的函数对象与索引列中的各列一一对应,若其中某列无需降维,则函数对象置为空。
-
当 sortKeyMappingFunction 中的函数对象为 hashBucket,且需要对采用 Hash 分区的分区字段进行降维时,应确保 Hash 分区的数量和 hashBucket 中的 buckets 之间不存在整除关系,否则会导致同一分区内的所有 Hash 值得到的 key 都相同。
create table 语句内的参数和详情说明请参考相关函数 createPartitionedTable / createDimensionTable。
创建临时内存表
通过在 create
后添加关键字 local temporary
(不区分大小写)以声明创建一张本地临时内存表。语法如下:
create local temporary table tableName(
schema
) [on commit preserve rows]
其中:
-
tableName 表示表名的字符串,或者表示表对象的变量。
-
schema 表结构声明,包含两列: columnName 和 columnType。
-
on commit preserve rows 为可选关键字,不区分大小写,用于声明该表为会话级临时表。
-
DolphinDB
create table
语句创建的内存表即为本地临时表且仅对当前会话有效,因此该语句和create table
语句等价。 -
系统暂不支持创建全局临时内存表及
on commit delete rows
关键字。
例子
创建内存表
create table tb(
id SYMBOL,
val DOUBLE
)
go; //必须使用 go 语句使上面的代码先解析执行,否则会报不识别变量 tb 的错误
tb.schema()
partitionColumnIndex->-1
chunkPath->
colDefs->
name typeString typeInt comment
---- ---------- ------- -------
id SYMBOL 17
val DOUBLE 16
创建 TSDB 引擎下的分布式数据库
if(existsDatabase("dfs://test")) dropDatabase("dfs://test")
create database "dfs://test" partitioned by VALUE(1..10), HASH([SYMBOL, 40]), engine='TSDB'
创建分布式表
create table "dfs://test"."pt"(
id INT,
deviceId SYMBOL,
date DATE[comment="time_col", compress="delta"],
value DOUBLE,
isFin BOOL
)
partitioned by ID, deviceID,
sortColumns=[`deviceId, `date],
keepDuplicates=ALL
pt = loadTable("dfs://test","pt")
pt.schema()
// output
engineType->TSDB
keepDuplicates->ALL
partitionColumnIndex->[0,1]
colDefs->
name typeString typeInt extra comment
-------- ---------- ------- ----- --------
id INT 4
deviceId SYMBOL 17
date DATE 6 time_col
value DOUBLE 16
isFin BOOL 1
partitionType->[1,5]
partitionColumnName->[id,deviceId]
partitionSchema->([1,2,3,4,5,6,7,8,9,10],40)
partitionSites->
partitionColumnType->[4,17]
partitionTypeName->[VALUE,HASH]
sortColumns->[deviceId,date]
softDelete->false
tableOwner->admin
chunkGranularity->TABLE
chunkPath->
创建维度表
create table "dfs://test"."pt1"(
id INT,
deviceId SYMBOL,
date DATE[comment="time_col", compress="delta"],
value DOUBLE,
isFin BOOL
)
sortColumns=[`deviceId, `date]
pt1 = loadTable("dfs://test","pt1")
pt1.schema()
// output
sortColumns->[deviceId,date]
softDelete->false
tableOwner->admin
engineType->TSDB
keepDuplicates->ALL
chunkGranularity->TABLE
chunkPath->
partitionColumnIndex->-1
colDefs->
name typeString typeInt extra comment
-------- ---------- ------- ----- --------
id INT 4
deviceId SYMBOL 17
date DATE 6 time_col
value DOUBLE 16
isFin BOOL 1
创建临时内存表
create local temporary table "tb" (
id SYMBOL,
val DOUBLE
) on commit preserve rows
tb.schema()
partitionColumnIndex->-1
chunkPath->
colDefs->
name typeString typeInt extra comment
---- ---------- ------- ----- -------
id SYMBOL 17
val DOUBLE 16