CREATE TABLE

创建时序数据表的语法说明。

语法

create_table_statement ::= CREATE TABLE table_name '('
                              tag_definition
                              ( ',' tag_definition )*
                              ( ',' time_definition)?
                              ( ',' field_definition )*
                              [',' primary_key_definition]
                              ')'
tag_definition         ::= tag_name [ VARCHAR ] TAG
time_definition        ::= time_column_name TIMESTAMP
field_definition       ::= field_name TYPE
primary_key_definition ::= PRIMARY KEY '(' tag_name [',' tagname]* ')'

说明

参数

说明

tag_name

定义标签的列名,数据类型固定为VARCHAR,且必须使用关键字TAG来显式标识,否则会被引擎理解为Field字段。此处数据类型的声明可以省略。

time_column_name

定义时间戳的列名,数据类型必须为TIMESTAMP,精度支持到毫秒(ms)

field_name

定义数据字段的列名,目前支持的数据类型为DOUBLE、VARCHAR或BOOLEAN。

  • 写入数据前,需要提前创建表,并指定列类型。您可参考数据类型选择的最佳实践,选择更适合的类型。

  • PRIMARY KEY与传统关系型数据库的主键并不相同,主要是用于自定义时序数据表的数据分片规则,其中指定的列名必须是tag_definition 中的标签列集合的子集。PRIMARY KEY的语法是自引擎版本3.4.9开始支持。相关版本说明,请参见时序引擎版本说明

    说明

    单机版不支持PRIMARY KEY,如需使用,请选择集群版。

  • 通常以数据源唯一标识作为PRIMARY KEY,例如物联网场景设备ID,车联网场景车辆唯一识,监控场景的应用ID或者ip:port 等。更多内容,请参见PRIMARY KEY设计的最佳实践

重要

  1. 目前创建时序表时,只能指定一列为TIMESTAMP类型。

  2. 时序引擎对于时间戳的编码和解析,统一按照北京时间(GMT+8)来进行。

  3. 在一些较旧的系统中,其Unix时间戳仍然是按照32位进行处理。这类时间戳写入Lindorm时序引擎前建议乘以1000。如果不加转换地将这些时间戳直接写入时序引擎,将会在语义上的解释引起偏差。

    比如时间戳1641009600 在这类较旧系统中会被解释为2022-01-01 12:00:00,但在Lindorm时序引擎中则会被解释为 1970-01-20 07:50:09(GMT+8)

示例

创建名为sensor的表,拥有device_id和region两个Tag,以及temperature和humidity两个Field。同时由于大部分查询场景会查询单个设备的瞬时数据,因此显式指定device_id作为数据分片的唯一标签列。

满足上述需求的CREATE TABLE语句如下:

CREATE TABLE sensor (
    device_id VARCHAR TAG,
    region VARCHAR TAG,
    time   TIMESTAMP,
    temperature DOUBLE,
    humidity DOUBLE,
    PRIMARY KEY(device_id));

阿里云首页 云原生多模数据库Lindorm 相关技术圈