create

create 语句用于创建数据库或者数据表。其语法如下:

创建分布式数据库

该语句只支持创建分布式数据库。

create database directory partitioned by partitionType(partitionScheme),
[engine='OLAP'], [atomic='TRANS'], [chunkGranularity='TABLE']

create database 语句内的参数和详情说明请参考相关函数 database

创建数据表

该语句只支持创建普通内存表、分布式表和维度表。

create table dbPath.tableName (
    schema[columnDescription]
)
[partitioned by partitionColumns],
[sortColumns],
[keepDuplicates=ALL],
[sortKeyMappingFunction]

dbPath 字符串,表示数据库的路径。

tableName 可以为表示表名的字符串,或者表示表对象的变量。

schema 表结构,包含两列: columnNamecolumnType

columnDescription 为列字段添加描述,以 keywords 方式进行添加。可包含以下两项:

  • comment 为列字段添加注释;

  • compress 指定压缩方式,包含以下两种方式:

    • "lz4"

    • "delta"

partitionColumns 字符串或字符串向量,表示分区列。对于组合分区,partitionColumns 是一个字符串向量。

TSDB 引擎参数:

sortColumns TSDB 引擎必选参数,字符串标量或向量,用于指定表的排序列。

keepDuplicates 指定在每个分区内如何处理所有 sortColumns 之值皆相同的数据,默认值为 ALL。提供以下选项:

  • ALL: 保留所有数据

  • LAST:仅保留最新数据

  • FIRST:仅保留第一条数据

sortKeyMappingFunction 由函数对象组成的向量,其长度与 sortKey 一致。用于指定应用在 sortKey 中每一列的映射函数,对 sortKey 进行降维。注意,指定的函数必须为一元函数。

原 sortKey 的每列被映射函数降维后,会重新组合为新的 sortKey。每个新 sortKey 对应的数据将根据 sortColumns 的最后一列(时间列)进行排序。注意,降维在写入磁盘时进行,因此指定该参数一定程度上将影响写入性能。

注意:

  • 创建维度表时,不可指定该参数。

  • sortKeyMappingFunction 只能指定向量。例如,若只指定一个映射函数 mapfun,则指定方式为 sortKeyMappingFunction=[mapfunc]。

create table 语句内的参数和详情说明请参考相关函数 createPartitionedTable / createTable

例子

(1) 创建内存表

 $ 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

(2) 创建 TSDB 引擎下的分布式数据库

 $ if(existsDatabase("dfs://test")) dropDatabase("dfs://test")
 $ create database "dfs://test" partitioned by VALUE(1..10), HASH([SYMBOL, 40]), engine='TSDB'

(3) 创建分布式表

 $ 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()

 keepDuplicates->ALL
 engineType->TSDB
 partitionColumnIndex->[0,1]
 ...

(4) 创建维度表

 $ 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()

 sortColumns->[deviceId,date]
 engineType->TSDB
 keepDuplicates->ALL
 chunkGranularity->TABLE
 partitionColumnIndex->-1
 ...