通过Lindorm-cli连接并使用时序引擎

Lindorm-cli是Lindorm提供的简易命令行工具,用于连接和管理Lindorm数据库。您可以通过Lindorm-cli完成基本的SQL操作,例如建表、数据查询、数据写入等。本文介绍通过Lindorm-cli连接并使用云原生多模数据库 Lindorm时序引擎的方法。

前提条件

已将客户端IP地址添加至Lindorm白名单,具体操作请参见设置白名单

步骤一:安装Lindorm-cli

  1. 根据您的操作系统,下载对应的Lindorm-cli安装包。下载链接如下表所示。

    操作系统

    下载链接

    Linux

    lindorm-cli for linux

    macOS

    lindorm-cli for macOS

    Windows

    lindorm-cli for windows-x64

    Linux-arm64

    lindorm-cli for linux-arm64

  2. 解压安装包。

    以Linux操作系统为例,执行以下命令解压。

    tar zxvf lindorm-cli-linux-latest.tar.gz

    解压后lindorm-cli-linux-latest文件夹中为lindorm-cli.exe文件。

步骤二:连接Lindorm时序引擎

客户端部署在Linux或Mac系统

  1. 跳转至lindorm-cli.exe文件所在目录。

    cd <lindorm-cli.exe所在目录>
  2. 执行以下语句连接时序引擎。

    ./lindorm-cli -url <Lindorm时序SQL地址> -username <用户名> -password <密码> -database <目标数据库名>

    参数说明

    参数

    是否必填

    说明

    Lindorm时序SQL地址

    Lindorm时序引擎的SQL连接地址和端口,获取方法请参见查看连接地址。例如:jdbc:lindorm:tsdb:url=http://ld-bp12pc23yfb3*****-proxy-tsdb-pub.lindorm.rds.aliyuncs.com:8242

    说明

    通过Lindorm-cli连接方式也支持Lindorm 时序HTTP地址

    用户名

    连接Lindorm时序引擎的用户名。如果时序引擎未启用用户认证与权限校验,用户名和密码无需设置,更多信息请参见用户及权限管理

    密码

    连接Lindorm时序引擎的密码,如果您忘记密码,可以通过Lindorm宽表引擎的集群管理系统修改用户密码,具体操作请参见修改用户密码

    目标数据库名

    使用Lindorm-cli连接的数据库。默认数据库为default。连接过程中可以使用use <目标数据库名>语句切换至目标数据库。

    连接成功将返回以下结果:

    lindorm-cli version: 1.0.xx

    其中,1.0.xx为Lindorm-cli的版本号。

客户端部署在Windows系统

方法一

  1. 打开命令提示符(CMD),跳转至lindorm-cli.exe的所在目录下。

    cd <lindorm-cli.exe所在目录>
  2. 在CMD上执行以下语句连接时序引擎。

    lindorm-cli -url <Lindorm时序SQL地址> -username <用户名> -password <密码> -database <目标数据库名>

    连接成功的返回结果如下:

    Connected to jdbc:lindorm:tsdb:url=http://****-proxy-tsdb-pub.lindorm.rds.aliyuncs.com:8242
    lindorm-cli version: 1.0.xx

    其中,1.0.xx为Lindorm-cli的版本号。

方法二

双击打开Lindorm-cli.exe程序,执行以下语句:

connect <Lindorm时序SQL地址> <用户名> <密码> -database <目标数据库名>

连接成功无结果返回。

步骤三:使用Lindorm时序引擎

建表

  1. 创建时序数据表。

    CREATE TABLE sensor (
        device_id VARCHAR NOT NULL,
        region VARCHAR NOT NULL,
        time TIMESTAMP NOT NULL,
        temperature DOUBLE,
        humidity BIGINT,
        PRIMARY KEY(device_id, region, time)
    );
    说明
    • 创建时序数据表时建议指定主键(PRIMARY KEY),单机版不支持PRIMARY KEY。通常以数据源唯一标识作为PRIMARY KEY,例如物联网场景中设备ID、车联网场景中车辆唯一标识、监控场景中的应用ID或者ip:port等。

    • 时间戳列的列名必须为time,表示数据的时间,单位为毫秒(ms)。

  2. 查看表sensor是否创建成功。

    SHOW TABLES;

    查询结果如下:

    +-------------------+
    | Tables_In_default |
    +-------------------+
    | sensor            |
    +-------------------+
  3. 查看时序数据表的字段信息。

    DESCRIBE TABLE sensor;

    查询结果如下:

    +-------------+-----------+------------+------------+--------------+
    | columnName  | typeName  | columnKind | primaryKey | partitionTag |
    +-------------+-----------+------------+------------+--------------+
    | device_id   | VARCHAR   | TAG        | true       | true         |
    | region      | VARCHAR   | TAG        | true       | true         |
    | time        | TIMESTAMP | TIMESTAMP  | true       | false        |
    | temperature | DOUBLE    | FIELD      | false      | false        |
    | humidity    | BIGINT    | FIELD      | false      | false        |
    +-------------+-----------+------------+------------+--------------+

数据写入

说明

如果TAGS相同,并且时间戳列相同,那么数据被认为是同一条数据,后写入的数据会覆盖先写入的数据。

  • 单条依次写入。

    INSERT INTO sensor (device_id, region, time, temperature, humidity) VALUES('F07A1260','north-cn','2021-04-22 15:33:00',12.1,45);
    INSERT INTO sensor (device_id, region, time, temperature, humidity) VALUES('F07A1260','north-cn','2021-04-22 15:33:10',13.2,47);
    INSERT INTO sensor (device_id, region, time, temperature, humidity) VALUES('F07A1260','north-cn','2021-04-22 15:33:20',10.6,46);
    INSERT INTO sensor (device_id, region, time, temperature, humidity) VALUES('F07A1261','south-cn','2021-04-22 15:33:00',18.1,44);
    INSERT INTO sensor (device_id, region, time, temperature, humidity) VALUES('F07A1261','south-cn','2021-04-22 15:33:10',19.7,44);
  • 批量写入。

    INSERT INTO sensor (device_id, region, time, temperature, humidity) 
    VALUES ('F07A1260','north-cn','2021-04-22 15:33:00',12.1,45),
           ('F07A1260','north-cn','2021-04-22 15:33:10',13.2,47),
           ('F07A1260','north-cn','2021-04-22 15:33:20',10.6,46),
           ('F07A1261','south-cn','2021-04-22 15:33:00',18.1,44),
           ('F07A1261','south-cn','2021-04-22 15:33:10',19.7,44);

数据查询

重要

写入数据后如果查询数据的结果为空,请使用DESCRIBE DATABASE <数据库名称>语句查询数据库是否设置了数据保存有效期(TTL),如果数据超过保存有效期会被自动清理并且无法查询。

  • 条件查询

    查询设备F07A1260在时间范围2021-04-22 15:33:002021-04-22 15:33:20之间的数据:

    SELECT device_id,region,time,temperature,humidity FROM sensor WHERE device_id = 'F07A1260' AND time >= '2021-04-22 15:33:00' AND time <= '2021-04-22 15:33:20';

    查询结果如下:

    +-----------+----------+---------------------------+-------------+----------+
    | device_id |  region  |           time            | temperature | humidity |
    +-----------+----------+---------------------------+-------------+----------+
    | F07A1260  | north-cn | 2021-04-22T15:33:00+08:00 | 12.1        | 45       |
    | F07A1260  | north-cn | 2021-04-22T15:33:10+08:00 | 13.2        | 47       |
    | F07A1260  | north-cn | 2021-04-22T15:33:20+08:00 | 10.6        | 46       |
    +-----------+----------+---------------------------+-------------+----------+
  • 降采样查询(指在时序数据应用场景中降低采样率的查询,可以减少结果集的数据点数。)

    查询设备F07A1260在时间范围2021-04-22 15:33:002021-04-22 15:33:20之间的温度,按照20秒降采样后取最大值:

    SELECT device_id,region,time,max(temperature) AS max_temperature FROM sensor WHERE device_id = 'F07A1260' AND time >= '2021-04-22 15:33:00' AND time <= '2021-04-22 15:33:20' SAMPLE BY 20s;

    查询结果如下:

    +-----------+----------+---------------------------+-----------------+
    | device_id |  region  |           time            | max_temperature |
    +-----------+----------+---------------------------+-----------------+
    | F07A1260  | north-cn | 2021-04-22T15:33:00+08:00 | 13.2            |
    | F07A1260  | north-cn | 2021-04-22T15:33:20+08:00 | 10.6            |
    +-----------+----------+---------------------------+-----------------+
  • 聚合查询

    计算所有区域的最大温度:

    SELECT region,max(temperature) AS max_temperature FROM sensor WHERE time >= '2021-04-22 15:33:00' AND time <= '2021-04-22 15:33:20' GROUP BY region;

    查询结果如下:

    +----------+-----------------+
    |  region  | max_temperature |
    +----------+-----------------+
    | north-cn | 13.2            |
    | south-cn | 19.7            |
    +----------+-----------------+

Lindorm-cli常用命令

  • help:查看帮助命令。

  • connect:连接服务器命令。

  • precision:时间显示格式,支持rfc3339、h、m、s、ms、u或ns。

  • exit或者quit:退出当前Lindorm时序引擎的连接。