涛思 TDengine 表设计及SQL
一、 表设计
1、特点:
要充分利用数据的时序性等特点,TDengine 采取一只股票一张表的策略,建议用数股票的代码(如上表中的 600000)来做表名。
表的第一列必须是时间戳,即数据类型为 timestamp。TDengine 将自动按照时间戳建立索引。
好处:
- 无锁方式写入,写入速度就能大幅提升
- 数据是按照时间排序的,因此写的操作可用追加的方式实现。
- 一张表的数据是以块为单位连续存储的。读取一个时间段的数据,能大幅减少随机读取操作。
2、超级表
普通标的特点,是同一类型数据的表,其表结构是完全一样的,但每个表的静态属性(标签)是不一样的。
超级表是指某一特定类型的数据表的集合。
描述一个超级表,除需要定义实时变化数据(采集量)的表结构之外,还需要定义静态不变数据(标签)的 schema。
标签的数据类型可以是整数、浮点数、字符串,标签可以有多个,可以事后增加、删除或修改。
如果整个系统有 N 个不同类型的数据,就需要建立 N 个超级表。
3、子表
通过超级表创建的表称之为子表
- 子表就是表,因此所有正常表的SQL操作都可以在子表上执行。
- 一张超级表包含有多张子表,这些子表具有相同的采集量 schema,但带有不同的标签值
- 不能通过子表调整数据或标签的模式,对于超级表的数据模式修改立即对所有的子表生效。
- 超级表只定义一个模板,自身不存储任何数据或标签信息。因此,不能向一个超级表写入数据,只能将数据写入子表中。
4、查询
查询既可以在表上进行,也可以在超级表上进行。针对超级表的查询,TDengine 将把所有子表中的数据视为一个整体数据集进行处理,会先把满足标签过滤条件的表从超级表中找出来,然后再扫描这些表的时序数据,进行聚合操作
5、库
库是指一组表的集合。TDengine 容许一个运行实例有多个库,而且每个库可以配置不同的存储策略。
TDengine 建议将不同数据特征的超级表创建在不同的库里。
二、SQL
1、创建库
数据库名最大长度为 33,一条 SQL 语句的最大长度为 65480 个字符。
参数 | 含义 | 示例 |
---|---|---|
keep | 该数据库的数据保留多长天数,缺省是 3650 天(10 年) | |
UPDATE | 0=不允许更新;1=行全列更新,未赋值列被设置为NUll;2=行部分列更新,未赋值列不变 | |
cache | 内存块的大小 | 默认16M |
replica | 副本个数 | 默认1个 |
precision | 创建数据库时使用的时间精度 | 默认ms |
#语法
CREATE DATABASE [IF NOT EXISTS] db_name [KEEP keep] [DAYS days] [UPDATE 1];#创建库
CREATE DATABASE power KEEP 365 DAYS 10 BLOCKS 6 UPDATE 1;#删除库
DROP DATABASE [IF EXISTS] db_name;#修改库
ALTER DATABASE db_name COMP 2;#切换库
USE power;
SHOW DATABASES;
SHOW CREATE DATABASE db_name;
2、创建超级表
TAGS 列名不能与其他列名相同;TAGS 列名不能为预留关键字,TAGS 最多允许 128 个,至少 1 个,总长度不超过 16 KB。
#语法
CREATE STABLE [IF NOT EXISTS] stb_name (timestamp_field_name TIMESTAMP, field1_name data_type1 [, field2_name data_type2 ...]) TAGS (tag1_name tag_type1, tag2_name tag_type2 [, tag3_name tag_type3]);#创建超级表
CREATE STABLE meters (ts timestamp, current float, voltage int, phase float) TAGS (location binary(64), groupId int);DROP STABLE [IF EXISTS] stb_name;
SHOW STABLES [LIKE tb_name_wildcard];
SHOW CREATE STABLE stb_name;
DESCRIBE stb_name;
ALTER STABLE stb_name ADD COLUMN field_name data_type;
ALTER STABLE stb_name DROP COLUMN field_name;
ALTER STABLE stb_name MODIFY COLUMN field_name data_type(length);
ALTER STABLE stb_name ADD TAG new_tag_name tag_type;
ALTER STABLE stb_name DROP TAG tag_name;
ALTER STABLE stb_name CHANGE TAG old_tag_name new_tag_name;
ALTER STABLE stb_name MODIFY TAG tag_name data_type(length);
超级表查询
使用 SELECT 语句可以完成在超级表上的投影及聚合两类查询,在 WHERE 语句中可以对标签及列进行筛选及过滤。
如果在超级表查询语句中不加 ORDER BY, 返回顺序是先返回一个子表的所有数据,然后再返回下个子表的所有数据,所以返回的数据是无序的。如果增加了 ORDER BY 语句,会严格按 ORDER BY 语句指定的顺序返回的
3、创建表
TDengine 对每个数据采集点需要独立建表。与标准的关系型数据库一样,一张表有表名,Schema,但除此之外,还可以带有一到多个标签。创建时,需要使用超级表做模板,同时指定标签的具体值。以表 1中的智能电表为例,可以使用如下的 SQL 命令建表:
表的第一个字段必须是 TIMESTAMP,并且系统自动将其设为主键;表的每行长度不能超过 48KB;
#语法-创建普通表
CREATE TABLE [IF NOT EXISTS] tb_name (timestamp_field_name TIMESTAMP, field1_name data_type1 [, field2_name data_type2 ...]);#语法-以超级表为模板创建数据表
CREATE TABLE [IF NOT EXISTS] tb_name USING stb_name TAGS (tag_value1, ...);#语法-批量创建数据表
#批量建表方式要求数据表必须以超级表为模板。 2.在不超出 SQL 语句长度限制的前提下,单条语句中的建表数量建议控制在 1000 ~ 3000 之间,将会获得比较理想的建表速度。
CREATE TABLE [IF NOT EXISTS] tb_name1 USING stb_name TAGS (tag_value1, ...) [IF NOT EXISTS] tb_name2 USING stb_name TAGS (tag_value2, ...) ...;#示例
CREATE TABLE d1001 USING meters TAGS ("California.SanFrancisco", 2);#插入时自动建表
INSERT INTO d1001 USING meters TAGS ("California.SanFrancisco", 2) VALUES (now, 10.2, 219, 0.32);DROP TABLE [IF EXISTS] tb_name;
SHOW CREATE TABLE tb_name;
SHOW CREATE TABLE tb_name;
DESCRIBE tb_name;
ALTER TABLE tb_name ADD COLUMN field_name data_type;
ALTER TABLE tb_name DROP COLUMN field_name;
ALTER TABLE tb_name MODIFY COLUMN field_name data_type(length);
ALTER TABLE tb_name SET TAG tag_name=new_tag_value;
4、插入数据
文档参考:https://docs.taosdata.com/develop/insert-data/sql-writing
一条记录不能超过 48K,一条 SQL 语句总长度不能超过 1M ,一个客户端需打开不大于 20 个以上的线程同时写。
对同一张表,如果新插入记录的时间戳已经存在,在update=0模式下,新数据被抛弃;在update=1的模式下,用新数据覆盖旧数据。写入的数据的时间戳必须大于当前时间减去配置参数 keep 的时间。
#插入一条
INSERT INTO d1001 VALUES (1538548685000, 10.3, 219, 0.31);#批量插入
INSERT INTO d1001 VALUES (1538548684000, 10.2, 220, 0.23) (1538548696650, 10.3, 218, 0.25);#写入多表
INSERT INTO d1001 VALUES (1538548685000, 10.3, 219, 0.31) (1538548695000, 12.6, 218, 0.33) d1002 VALUES (1538548696800, 12.3, 221, 0.31);
5、查询
支持
- 单列、多列数据查询
- 标签和数值的多种过滤条件:>, <, =, <>, like 等
- 聚合结果的分组(Group by)、排序(Order by)、约束输出(Limit/Offset)
- 数值列及聚合结果的四则运算
- 时间戳对齐的连接查询(Join Query: 隐式连接)操作
- 多种聚合/计算函数: count, max, min, avg, sum, twa, stddev, leastsquares, top, bottom, first, last, percentile, apercentile, last_row, spread, diff 等
TDengine 仅容许对属于同一个超级表的表之间进行聚合查询,不同超级表之间的聚合查询不支持
#文档参考:https://docs.taosdata.com/taos-sql/select/
#查询语法
SELECT select_expr [, select_expr ...]FROM {tb_name_list}[WHERE where_condition][SESSION(ts_col, tol_val)][STATE_WINDOW(col)][INTERVAL(interval_val [, interval_offset]) [SLIDING sliding_val]][FILL(fill_mod_and_val)][GROUP BY col_list][ORDER BY col_list { DESC | ASC }][SLIMIT limit_val [SOFFSET offset_val]][LIMIT limit_val [OFFSET offset_val]][>> export_file];#单表查询
select * from d1001 where voltage > 215 order by ts desc limit 2;
#超级表聚合查询
SELECT AVG(voltage) FROM meters GROUP BY location;
SELECT count(*), max(current) FROM meters where groupId = 2 and ts > now - 24h;
涛思 TDengine 表设计及SQL相关推荐
- 万字归纳总结 | 数据库表设计与SQL编写技巧
点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群"加入公众号专属技术群 前言 随着移动云平台系统业务不断增长,必然需要对各系统进行 ...
- SQL数据库不用SQL语句能显示全表的内容_MySQL DBA必读:万字归总表设计与SQL编写技巧...
作者介绍 刘书浩,"移动云"DBA,负责"移动云"业务系统的数据库运维.标准化等工作:擅长MySQL技术领域,熟悉MySQL复制结构.Cluster架构及运维优 ...
- MySQL DBA必读:万字归总表设计与SQL编写技巧
前言 随着移动云平台系统业务不断增长,必然需要对各系统进行更新或者发布新版本,以满足用户的需求.但是在系统更新或者发布新版本时,往往会引起各种的性能隐患,使得系统的稳定性大大降低,这些性能隐患的根本原 ...
- MySQL DBA 必读:万字归总表设计与 SQL 编写技巧
前言 随着移动云平台系统业务不断增长,必然需要对各系统进行更新或者发布新版本,以满足用户的需求.但是在系统更新或者发布新版本时,往往会引起各种的性能隐患,使得系统的稳定性大大降低,这些性能隐患的根本原 ...
- 两年15.5k star只是新起点,涛思数据正式宣布TDengine灯塔计划
2019年7月12日,涛思数据宣布TDengine正式开源.短短两年时间,TDengine取得了令人瞩目的成绩.TDengine在GitHub上已经有15.5k star,3900多个fork,PR和 ...
- 涛思数据 TDengine 与华为云达成合作,正式入驻华为云市场
近日,涛思数据与华为达成合作,涛思数据正式成为华为企业渠道伙伴.华为云解决方案伙伴,涛思数据的物联网大数据平台 TDengine 正式入驻华为云市场.作为率先入驻华为云市场的一款专为物联网而生开源的大 ...
- 时序数据库-TDengine涛思(taos)使用以及踩坑
时序数据库 时序数据库(Time Series Database,TSDB) 全称为时间序列数据库.时间序列数据库指主要用于处理带时间标签(按照时间的顺序变化,即时间序列化)的数据,带时间标签的数据也 ...
- 涛思数据TDengine征稿— ❤️TDEngine 的特点及应用场景❤️
本文正在参与"拥抱开源|涛思数据TDengine有奖征稿:投稿地址. 文章目录 一.前言 二.物联网数据十大特点 1.时序性 2.结构化 3.采集唯一性 4.低频更新删除 5.保留周期 6. ...
- 涛思数据TDengine征稿 — 保姆级教程TDengine客户端服务器安装教程
涛思数据TDengine征稿 - 保姆级教程TDengine客户端服务器安装教程 TDengine 简介 一,在CentOS安装服务器 1.1 获取安装包 1.2 安装服务器包 1.3 安装验证 二, ...
最新文章
- 【Redis】缓存的三大问题及其解决方案
- diy nas配置推荐2020_2020适合大学生专业需求及玩游戏的电脑配置推荐
- 【.NET Core项目实战-统一认证平台】第十三章 授权篇-如何强制有效令牌过期
- [转帖]关于win7共享的问题和解答
- css3弧形跑道效果_Css 实现漂亮弧形
- Matlab--根据bar 的值,用不同的color画
- 负载敏感系统详解_宣布Enarx用于运行敏感工作负载
- 我的github网址链接
- R+大地图时代︱ leaflet/leafletCN 动态、交互式绘制地图(遍地代码图)
- 我的2009:知识管理篇
- 电商网站前台模板_电商热潮汹涌,兴长信达PEC零售商城系统为企业注入新力量...
- chrome extension debug在哪?
- 【疑难杂症】AiO Runtimes 微软常用运行库合集工具一键式安装全部 Windows 系统必备常用运行库合集,解决各种.dll文件缺失问题
- 家园2简易地图编辑器
- 晶振波形不是正弦波_求助各位!有源晶振出来的波形是方波还是正弦波?
- 网页flash遮挡问题
- 微信公众号加外链怎么不管用——已解决
- 类脑计算机器人,机器人的类脑计算是什么?
- 企业如何选择物联网卡以及流量套餐?
- java表格中添加按钮_如何在JavaFX表视图中添加按钮