TDengine常用操作

TDengine常用操作

本章介绍TDengine的常用操作,包括创建数据库、表、超级表、查询等操作。

注意: TDengine SQL 语句的最大长度为 1M。TDengine SQL 不支持关键字的缩写,例如 DELETE 不能缩写为 DEL。

1. 数据库

数据库常用操作

注意: 建库时可能会出现DB error: Vnodes exhausted 错误,该提示是创建 db 的 vnode 数量不够了,需要的 vnode 不能超过了 dnode 中 vnode 的上限。因为系统默认是一个 dnode 中有 CPU 核数两倍的 vnode,也可以通过配置文件中的参数 supportVnodes 控制。 正常调大 taos.cfg 中 supportVnodes 参数即可

-- 语法:CREATE DATABASE [IF NOT EXISTS] db_name [database_options]
-- database_options:参考官网
CREATE DATABASE IF NOT EXISTS demo;

# 使用数据库
use demo;

# 查看系统中所有数据库
show databases;

# 显示数据库的创建语句
show create database demo \G;

# 查看数据库参数
select * from information_schema.ins_databases where name='demo' \G;

# 删除数据库
drop database if exists demo;

2. 表

# 创建普通表
create table demo.t_water (ts timestamp,ph float,ns float,sd float,name nchar(20)) comment "表注释";

# 增加列
alter table demo.t_water add column temp float;

# 删除列
alter table demo.t_water drop column temp;

# 修改列宽
alter table demo.t_water modify column norm_name nchar(30);

# 修改列名
alter table demo.t_water rename column norm_name name;

# 删除表
drop table demo.t_water;

# 显示所有表
use demo;
show tables;
 
# 显示创建表语句
show create table demo.t_water \G;

# 获取表结构信息
describe demo.t_water;
 

3. 超级表

超级表的概念请参考之前文章。

  • 超级表中列的最大个数为 4096,需要注意,这里的 4096 是包含 TAG 列在内的,最小个数为 3,包含一个时间戳主键、一个 TAG 列和一个数据列。
  • TAGS语法指定超级表的标签列,标签列需要遵循以下约定:
    • TAGS 中的 TIMESTAMP 列写入数据时需要提供给定值,而暂不支持四则运算,例如 NOW + 10s 这类表达式。
    • TAGS 列名不能与其他列名相同。
    • TAGS 列名不能为预留关键字。
    • TAGS 最多允许 128 个,至少 1 个,总长度不超过 16 KB。
  • 关于表参数的详细说明,参见官网 CREATE TABLE 中的介绍。

创建超级表

创建一个饮用水的超级表,列有ts:时间戳,ph:PH值,sd:色度值。和普通的建表方式差不多,唯一的区别是tags标签。

tags代表创建一个超级表,且带有标签locationgroupid

create table demo.s_water (ts timestamp, ph float,sd float) tags(location nchar(60),groupid int);

查看超级表

# 查看数据库内全部超级表。
show stables;

# 显示一个超级表的创建语句
show create stable s_water \G;

# 获取超级表的结构信息,包含列和标签
describe s_water;

# 获取超级表中所有子表的标签信息
show table tags from s_water;

# 获取某个子表的标签信息
show table tags from t1;

删除超级表

drop stable s_water;

删除超级表时会自动删除超级表内所有的子表和子表中的数据。

修改超级表

s_water是超级表的名称。

# 增加列
alter stable s_water add column name nchar(30);

# 修改列宽
alter stable s_water modify column name nchar(50);

# 删除列
alter stable s_water drop column name;

# 添加标签
alter stable s_water add tag device_name nchar(60);

# 修改标签名
alter stable s_water rename tag device_name name;

# 修改标签列宽度
alter stable s_water modify tag name nchar(80);

# 删除标签
alter stable s_water drop tag name;

创建子表

# 创建子表,并且指定标签值
create table t1 using s_water tags('北京昌平',1) ;
create table t2 using s_water tags('北京朝阳',1) ;

# 修改子表标签值
alter table t1 set tag location='北京丰台';

4. 数据写入

普通表

使用多行插入时,要注意时间戳不能一致,因为时间戳是主键,若同一时间插入两条数据,最终只会有一条插入成功。

# 普通表单行插入数据
insert into t_water values ('2023-12-27 11:50:50.235',13.5,23.3,122.2,'xxx');
# 普通表多行插入
insert into t_water values ('2023-12-26 11:50:50.235',12.5,38,126.4,'aaa') (now,16.5,48,127.4,'bbb');

插入时建表

如果用户在写数据时并不确定某个表是否存在,此时可以在写入数据时使用自动建表语法来创建不存在的表,若该表已存在则不会建立新表。自动建表时,要求必须以超级表为模板,并写明数据表的 TAGS 取值。

insert into t3 using s_water tags('北京海淀',2) values(now,35.6,12.5);

子表

insert into t1 values(now,10.2,32.2);
insert into t1 values(now,15,69.2);

insert into t2 values(now,13.5,26.5);
insert into t2 values(now,15.6,30.5);

5. 数据查询

列表

查询超级表中的所有子表数据,报班标签信息,如果是子表,则只查询数据

select * from s_water;

# 统计表/超级表中某列的值最先写入的非 NULL 值。
select first(*) from s_water;

# 统计表/超级表中某列的值最后写入的非 NULL 值。
select last(*) from s_water;

# 返回表/超级表的最后一条记录。
select last_row(*) from s_water;

DISTINCT去重

DISTINCT 关键字可以对结果集中的一列或多列进行去重,去除的列既可以是标签列也可以是数据列。

select distinct location from s_water;

标签列查询

当查询的列只有标签列时,TAGS 关键字可以指定返回所有子表的标签列(类似于去重)。每个子表只返回一行标签列。

select tags location from s_water;

别名

可使用AS来重命名返回结果集合中列的名称,如果不写AS,则用默认的字段名称。

select ts,ts AS primary_key from s_water;

伪列

TBNAME 可以视为超级表中一个特殊的标签,代表子表的表名。

# 获取一个超级表所有的子表名及相关的标签信息:
select tags tbname,location from s_water;

# 统计超级表下子表数量
select count(*) from (select tags tbname,location from s_water);

特殊功能

部分特殊的查询功能可以不使用 FROM 子句执行

# 获取当前数据库
select database();

# 获取服务器和客户端版本号
select client_version();
select server_version();

# 获取服务器状态
select server_status();

# 获取当前时间
select now();

# 获取当前日期
select today();

# 获取当前时区
select timezone();

# 获取当前用户
select current_user();

6. 删除数据

据删除后不可恢复,请慎重使用。为了确保删除的数据确实是自己要删除的,建议可以先使用 select 语句加 where 后的删除条件查看要删除的数据内容,确认无误后再执行 delete 命令。

# 删除超级表某个时间节点之前的数据
delete from s_water  where ts >= '2023-12-28 15:43:18.614';

# 删除超级表中所有的数据
delete from s_water;
  • 19
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值