一、 表设计

1、特点:

要充分利用数据的时序性等特点,TDengine 采取一只股票一张表的策略,建议用数股票的代码(如上表中的 600000)来做表名。

表的第一列必须是时间戳,即数据类型为 timestamp。TDengine 将自动按照时间戳建立索引。

好处:

  1. 无锁方式写入,写入速度就能大幅提升
  2. 数据是按照时间排序的,因此写的操作可用追加的方式实现。
  3. 一张表的数据是以块为单位连续存储的。读取一个时间段的数据,能大幅减少随机读取操作。

2、超级表

普通标的特点,是同一类型数据的表,其表结构是完全一样的,但每个表的静态属性(标签)是不一样的。
超级表是指某一特定类型的数据表的集合。
描述一个超级表,除需要定义实时变化数据(采集量)的表结构之外,还需要定义静态不变数据(标签)的 schema。
标签的数据类型可以是整数、浮点数、字符串,标签可以有多个,可以事后增加、删除或修改。
如果整个系统有 N 个不同类型的数据,就需要建立 N 个超级表。

3、子表

通过超级表创建的表称之为子表

  1. 子表就是表,因此所有正常表的SQL操作都可以在子表上执行。
  2. 一张超级表包含有多张子表,这些子表具有相同的采集量 schema,但带有不同的标签值
  3. 不能通过子表调整数据或标签的模式,对于超级表的数据模式修改立即对所有的子表生效。
  4. 超级表只定义一个模板,自身不存储任何数据或标签信息。因此,不能向一个超级表写入数据,只能将数据写入子表中。

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相关推荐

  1. 万字归纳总结 | 数据库表设计与SQL编写技巧

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群"加入公众号专属技术群 前言 随着移动云平台系统业务不断增长,必然需要对各系统进行 ...

  2. SQL数据库不用SQL语句能显示全表的内容_MySQL DBA必读:万字归总表设计与SQL编写技巧...

    作者介绍 刘书浩,"移动云"DBA,负责"移动云"业务系统的数据库运维.标准化等工作:擅长MySQL技术领域,熟悉MySQL复制结构.Cluster架构及运维优 ...

  3. MySQL DBA必读:万字归总表设计与SQL编写技巧

    前言 随着移动云平台系统业务不断增长,必然需要对各系统进行更新或者发布新版本,以满足用户的需求.但是在系统更新或者发布新版本时,往往会引起各种的性能隐患,使得系统的稳定性大大降低,这些性能隐患的根本原 ...

  4. MySQL DBA 必读:万字归总表设计与 SQL 编写技巧

    前言 随着移动云平台系统业务不断增长,必然需要对各系统进行更新或者发布新版本,以满足用户的需求.但是在系统更新或者发布新版本时,往往会引起各种的性能隐患,使得系统的稳定性大大降低,这些性能隐患的根本原 ...

  5. 两年15.5k star只是新起点,涛思数据正式宣布TDengine灯塔计划

    2019年7月12日,涛思数据宣布TDengine正式开源.短短两年时间,TDengine取得了令人瞩目的成绩.TDengine在GitHub上已经有15.5k star,3900多个fork,PR和 ...

  6. 涛思数据 TDengine 与华为云达成合作,正式入驻华为云市场

    近日,涛思数据与华为达成合作,涛思数据正式成为华为企业渠道伙伴.华为云解决方案伙伴,涛思数据的物联网大数据平台 TDengine 正式入驻华为云市场.作为率先入驻华为云市场的一款专为物联网而生开源的大 ...

  7. 时序数据库-TDengine涛思(taos)使用以及踩坑

    时序数据库 时序数据库(Time Series Database,TSDB) 全称为时间序列数据库.时间序列数据库指主要用于处理带时间标签(按照时间的顺序变化,即时间序列化)的数据,带时间标签的数据也 ...

  8. 涛思数据TDengine征稿— ❤️TDEngine 的特点及应用场景❤️

    本文正在参与"拥抱开源|涛思数据TDengine有奖征稿:投稿地址. 文章目录 一.前言 二.物联网数据十大特点 1.时序性 2.结构化 3.采集唯一性 4.低频更新删除 5.保留周期 6. ...

  9. 涛思数据TDengine征稿 — 保姆级教程TDengine客户端服务器安装教程

    涛思数据TDengine征稿 - 保姆级教程TDengine客户端服务器安装教程 TDengine 简介 一,在CentOS安装服务器 1.1 获取安装包 1.2 安装服务器包 1.3 安装验证 二, ...

最新文章

  1. 【Redis】缓存的三大问题及其解决方案
  2. diy nas配置推荐2020_2020适合大学生专业需求及玩游戏的电脑配置推荐
  3. 【.NET Core项目实战-统一认证平台】第十三章 授权篇-如何强制有效令牌过期
  4. [转帖]关于win7共享的问题和解答
  5. css3弧形跑道效果_Css 实现漂亮弧形
  6. Matlab--根据bar 的值,用不同的color画
  7. 负载敏感系统详解_宣布Enarx用于运行敏感工作负载
  8. 我的github网址链接
  9. R+大地图时代︱ leaflet/leafletCN 动态、交互式绘制地图(遍地代码图)
  10. 我的2009:知识管理篇
  11. 电商网站前台模板_电商热潮汹涌,兴长信达PEC零售商城系统为企业注入新力量...
  12. chrome extension debug在哪?
  13. 【疑难杂症】AiO Runtimes 微软常用运行库合集工具一键式安装全部 Windows 系统必备常用运行库合集,解决各种.dll文件缺失问题
  14. 家园2简易地图编辑器
  15. 晶振波形不是正弦波_求助各位!有源晶振出来的波形是方波还是正弦波?
  16. 网页flash遮挡问题
  17. 微信公众号加外链怎么不管用——已解决
  18. 类脑计算机器人,机器人的类脑计算是什么?
  19. 企业如何选择物联网卡以及流量套餐?
  20. java表格中添加按钮_如何在JavaFX表视图中添加按钮

热门文章

  1. Chips-2.0(二)DEMO工程综合实现
  2. 5G网络正式商用对4G物联网卡造成何种影响?
  3. 深入理解编译注解(三)依赖关系 apt/annotationProcessor与Provided的区别
  4. 软件设计的不同模型:瀑布式、快速原型法以及迭代式
  5. c语言花样编程,C语言表达式的花样表达
  6. 时间管理的基础是精力管理
  7. Python实战之数字、日期和时间的高级处理
  8. 百分点科技位居中国数据治理解决方案市场第二
  9. 永恒python奇美拉_87级稀有双龙头奇美拉 等到熊猫人时再来抓
  10. .NET-房贷计算器