0


TDEngine(taos) 涛思数据库-sql初识

一、基本使用

这里读者自行安装数据库:使用安装包立即开始 | TDengine 文档 | 涛思数据 (taosdata.com)

// 下载gz文件,解压
tar -zxvf TDengine-server-<对应版本>-Linux-x64.tar.gz

// 解压后启动
sudo ./install.sh

启动成功后,直接输入 taos 即可进入数据库:

建表语句同mysql一样,在终端中运行的 SQL 语句需要以分号(;)结束来运行,**

CREATE TABLE

**语句用于创建普通表和以超级表为模板创建子表。

CREATE DATABASE demo;
USE demo;
CREATE TABLE t (ts TIMESTAMP, speed INT);
INSERT INTO t VALUES ('2019-07-15 00:00:00', 10);
INSERT INTO t VALUES ('2019-07-15 01:00:00', 20);
SELECT * FROM t;

           ts            |    speed    |
========================================
 2019-07-15 00:00:00.000 |          10 |
 2019-07-15 01:00:00.000 |          20 |

Query OK, 2 row(s) in set (0.003128s)

创建数据库示例

创建了一个有 10 个 vgroup 名为 db 的数据库, 其中每个 vnode 分配 10MB 的写入缓存

create database if not exists db vgroups 10 buffer 10

查看系统中的所有数据库

SHOW DATABASES;

创建子表

CREATE TABLE [IF NOT EXISTS] tb_name USING stb_name (tag_name1, ...) TAGS (tag_value1, ...);

显示所有表

SHOW TABLES [LIKE tb_name_wildchar];

显示表创建语句

SHOW CREATE TABLE tb_name;

获取表结构信息

DESCRIBE [db_name.]tb_name;

显示当前数据库下的所有超级表信息

SHOW STABLES [LIKE tb_name_wildcard];

二、查询sql

1. 查询开始时间到及结束时间的记录:

select * from 表 where ts >= 开始时间 and ts <= 结束时间

select * from power.d1001 where ts >= "2018-10-03T06:38:05.000Z" and ts <= "2018-10-03T06:38:15.000Z"

2. 查询开始时间到及结束时间的第一条记录

查询开始值,可以使用first函数:select first(表字段) from 表 where ts >= 开始时间 and ts <= 结束时间(查询指定时间结束值使用last函数。)

select first(current) from power.d1001 where ts >= "2018-10-03T06:38:05.000Z" and ts <= "2018-10-03T06:38:15.000Z"

3. 数据切分查询(分组)

PARTITION BY part_list

** part_list** 可以是任意的标量表达式,包括列、常量、标量函数和它们的组合。

    例如:将数据按标签 **location **进行分组,取每个分组内的电压平均值:
select location,avg(voltage) from power.meters partition by location

4. 窗口切分查询-INTERVAL

TDengine 支持按时间窗口切分方式进行聚合结果查询,比如温度传感器每秒采集一次数据,但需查询每隔 10 分钟的温度平均值。

其中窗口函数中可以指定查询窗口大小。根据需求,分别为: a (毫秒), b (纳秒), d (天), h (小时), m (分钟), n (月), s (秒), u (微妙), w (周), y (年)。

官方文档这块我认为比较难理解,这里我就以一个例子简单的使用一下:

假设我们要查询从 2023-08-01 00:00:00 到 2023-08-01 00:05:00 这段时间内的数据,返要查询每个 location 下电压的平均值,并且考虑到每秒的分区

用正常的语法应该是:

SELECT location, AVG(voltage) FROM power.meters 
WHERE ts >= '2023-08-01 00:00:00' AND ts < '2023-08-01 00:05:00' 
GROUP BY location, (ts - MICROSECOND(ts) % 1000000);

这里的 MICROSECOND(ts) % 1000000 实际并不存在,是我们自定义的,用来获取时间戳的微秒部分,并确保每秒开始的时间点相同。

使用 窗口切分查询解决这个问题应该是:

SELECT location, AVG(voltage) FROM power.meters 
WHERE ts >= '2023-08-01 00:00:00' AND ts < '2023-08-01 00:05:00' 
partition by location INTERVAL(1s)

个人理解:

    **INTERVAL(1s) 就是一个函数,用来定义时间段里的条件,而这里的partition by 相当于GROUP BY,只不过 INTERVAL(1s) 必须配合 partition by 使用。**

三、使用 taosBenchmark 测试​

在终端执行

taosBenchmark,

这条命令很快完成 1 亿条记录的插入:

$ taosBenchmark

该命令将在数据库

test

下面自动创建一张超级表 **

meters

**,该超级表下有 1 万张表,表名为 **

d0

**到 **

d9999

**,每张表有 1 万条记录,每条记录有 **

ts

current

voltage

phase

** 四个字段,时间戳从 2017-07-14 10:40:00 000 到 2017-07-14 10:40:09 999,每张表带有标签 **

location

** 和 **

groupId

**,groupId 被设置为 1 到 10,location 被设置为

California.Campbell

California.Cupertino

California.LosAngeles

California.MountainView

California.PaloAlto

California.SanDiego

California.SanFrancisco

California.SanJose

California.SantaClara

或者

California.Sunnyvale

查询超级表 **

meters

**下的记录总条数:

SELECT COUNT(*) FROM test.meters;

查询 1 亿条记录的平均值、最大值、最小值等:

SELECT AVG(current), MAX(voltage), MIN(phase) FROM test.meters;

查询 location = "California.SanFrancisco" 的记录总条数:

SELECT COUNT(*) FROM test.meters WHERE location = "California.SanFrancisco";

查询 groupId = 10 的所有记录的平均值、最大值、最小值等:

SELECT AVG(current), MAX(voltage), MIN(phase) FROM test.meters WHERE groupId = 10;

对表

d10

按每 10 秒进行平均值、最大值和最小值聚合统计:

SELECT FIRST(ts), AVG(current), MAX(voltage), MIN(phase) FROM test.d10 INTERVAL(10s);

本文转载自: https://blog.csdn.net/m0_47743175/article/details/140870661
版权归原作者 明湖起风了 所有, 如有侵权,请联系我们删除。

“TDEngine(taos) 涛思数据库-sql初识”的评论:

还没有评论