上云无忧 > 文档中心 > 百度智能云时序时空数据库TSDB - 支持SQL查询
时序时空数据库TSDB
百度智能云时序时空数据库TSDB - 支持SQL查询

文档简介:
介绍: TSDB支持SQL的查询接口,可以通过SQL语言实现对TSDB数据的筛选和查询。利用SQL的强大能力,用户即可以熟悉方便地对数据进行操作,也可以充分利用SQL函数的计算能力,挖掘数据价值。
*此产品及展示信息均由百度智能云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

介绍

TSDB支持SQL的查询接口,可以通过SQL语言实现对TSDB数据的筛选和查询。利用SQL的强大能力,用户即可以熟悉方便地对数据进行操作,也可以充分利用SQL函数的计算能力,挖掘数据价值。

基础操作说明

  • SQL语句的table对应TSDB的metric
  • SQL语句中的field对应TSDB的timestamp、field、tag
  • SQL的查询条件中如果包含中文字符,应当使用单引号括起来,如果只包含英文字符,则单引号和双引号均可

举个例子:一个智能电表监控的物联网集成方案,采集了智能电表的各个监控点的数据。在TSDB中这样组织(如下图),metric为SmartMeter,表示TSDB存的是智能电表的数据,每个电表有power和MeterCurrent两个域(field),用两个tag,即MeterID和City,来代表每个数据点来自哪个电表ID和城市。电表每5s上传一次功率值和电流值。

可以将上表看成一个二维表,针对二维表来写SQL语句

应用场景一:要过滤功率值大于400、电流值小于5,电表ID为2345HDYE的数据

select timestamp, power, MeterCurrent, MeterID, City from SmartMeter where power > 400 and current<5 and MeterID = '2345HDYE'

应用场景二:电表ID为2345HDYE的电表中,返回每10秒的功率平均值

select time_bucket(timestamp, '10 seconds') as TIME, avg(power) as AVG_POWER from SmartMeter group by time_bucket(timestamp, '10 seconds') order by time_bucket(timestamp, '10 seconds')

应用场景三:join两个metric

两个metric如下表

用MeterID将两个表进行join,SQL语句如下: select * from SmartMeter join SmartTemperature on SmartMeter.MeterID = SmartTemperature.MeterID ;

得到以下数据:

TSDB_SQL_01-1

SQL函数

  • 查询函数举例
类型 SQL 解释
时间查询 select timestamp from metric timestamp: 固定查询时间戳关键字,系统默认使用UTC时间
metric:用户需要查询的metric名称
单域查询 select value from metric value:用户需要查询的field的名称
metric:用户需要查询的metric名称
Tag查询 select tag_key from metric tag_key:用户需要查询的tag的key
metric:用户需要查询的metric名称
多列查询 select timestamp,field1 from metric
select * from metric
tag_key:用户需要查询的tag的key
field1:用户需要查询的field的名称
metric:用户需要查询的metric名称
按照时间排序 select timestamp, value from metric order by timestamp
select timestamp, value from metric order by timestamp desc
select timestamp, value from metric order by timestamp offset 1 limit 1
order by:查询排序方式
asc/desc:升序/降序
offset和limit:排序后从第offset条开始,取limit条
带过滤查询 select timestamp, value from metric where value > 30 and timestamp >150937263000 value > 30:过滤value的值,UTC时间戳精度毫秒
分组查询 select tag_key, count(1) from metric group by tag_key group by tag_key:按照tag的Key值分组
聚合查询 select time_bucket(timestamp, '2 days') as DAY, sum(value) as SUM from metric group by time_bucket(timestamp, '2 days') order by time_bucket(timestamp, '2 days') time_bucket: 时间聚合函数
timestamp:实际数据点中的时间戳字段(不用修改)
2 days:时间窗口是2天
group by time_bucket:按照时间2 days分组
sum(value):聚合2 days的value的值

time_bucket支持日历对齐和自定义起始时间:
如time_bucket(timestamp, 1dc),字符'c'表示日历对齐。时间单位请参考文档时间单位
窗口的默认起始时间是2000-01-01 00:00:00,如需自定义起始时间可以将'2 days'改成'2 days,2019-01-01 00:00:00',即表示从2019-01-01开始 每2天一个时间窗口。

日历对齐规则示例如下:
如time_bucket(timestamp,'1 dc,2019-01-01 12:00:00')
则第一个窗口是01月01日12:00:00.000 - 01月01日23:59:59.99
第二个窗口是01月02日00:00:00.000 - 01月02日23:59:59.99
以此类推
自定义函数计算查询 select timestamp, ((field2 - field1) * 10) as RESULT, tag_key from metric (field2 - field1) * 10 :用户自定义函数计算
  • SQL查询常用的时间函数。
分类 支持函数 举例 说明
日期时间操作符 +/- mysql> select (date '2012-08-08' + interval '2' day)
2012-08-10
mysql> select (timestamp '2012-08-08 01:00' + interval '29' hour)
2012-08-09 06:00:00.000
mysql> select (date '2012-08-08' - interval '2' day)
2012-08-06
mysql> select (timestamp '2012-10-31 01:00' - interval '1' month)
2012-09-30 01:00:00.000
操作符
时区转换 AT TIME ZONE mysql> SELECT timestamp '2012-10-31 01:00 UTC' AT TIME ZONE 'America/Los_Angeles'
2012-10-30 18:00:00.000 America/Los_Angeles
mysql> SELECT timestamp '2012-10-31 01:00 UTC' AT TIME ZONE 'Asia/Shanghai'
2012-10-31 09:00:00.000 Asia/Shanghai
UTC时区转换
日期和时间函数 current_date
current_timestamp
from_unixtime(unix_timestamp)
now()
to_unixtime(timestamp)
cast(to_unixtime(timestamp) as bigint)
mysql> select current_date
2021-04-21
mysql> select current_timestamp
2021-04-21 10:59:56.378 UTC
mysql> select from_unixtime(1619031748);
2021-04-21 19:02:28.000
mysql> select now()
2021-04-21 11:01:38.221 UTC
mysql> select to_unixtime(timestamp '2021-04-21 19:02:28')
1.619031748E9
mysql> select cast(to_unixtime(timestamp '2021-04-21 19:02:28') as bigint)
1619031748
日期时间相关
截取函数 date_trunc(unit,timestamp) mysql> select date_trunc('day',timestamp '2021-04-21 19:02:28')
2021-04-21 00:00:00.000
mysql> select date_trunc('hour',timestamp '2021-04-21 19:02:28')
2021-04-21 19:00:00.000
截取timestamp的一部分
时间段 date_add(unit,bigint,timestamp) mysql> select date_add('hour', 8, timestamp '2021-04-21 19:02:28')
2021-04-22 03:02:28.000
基于某个时间加减
持续时长 parse_duration(string) mysql> SELECT parse_duration('5m')
0 00:05:00.000
字符串格式的时间转化
日期格式化 date_format(timestamp,string format) mysql> select date_format(timestamp '2021-04-21 19:02', '%Y-%m-%d %H:%i:%s')
2021-04-21 19:02:00
格式转化
提取函数 day_of_week(timestamp) mysql> select day_of_week(timestamp '2021-04-21 19:02')
3
返回bigint
  • 自定义函数

TSDB支持标准ANSI SQL语义,选取常用的部分自定义函数如下所示。

自定义函数说明:

分类 支持函数 举例 说明
条件表达式 CASE SELECT field1,
               CASE field1
                         WHEN 1 THEN 'one'
                         WHEN 2 THEN 'two'
                         ELSE 'many'
               END

FROM metric
case表达式
条件表达式 IF SELECT field1,
               IF (field1>100,1,0) as result

FROM metric
if表达式,if(condition, true_value)或
if(condition, true_value, false_value)
条件表达式 COALESCE SELECT field1, field2,
               COALESCE (field1, field2) as result

FROM metric
返回列表中第一个非空值
计算函数 abs(x) SELECT field1,
                abs (field1) as result

FROM metric
返回x的绝对值
计算函数 sqrt(x) SELECT field1,
                sqrt (field1) as result

FROM metric
返回x的平方根
计算函数 cbrt(x) SELECT field1,
                cbrt (field1) as result

FROM metric
返回x的立方根
计算函数 ceil(x) SELECT field1,
               ceil (field1) as result

FROM metric
返回不小于x的最小整数值
计算函数 ceiling(x) 同ceil(x) 返回大于或等于x的最小整数值
计算函数 floor(x) SELECT field1,
               floor (field1) as result

FROM metric
返回小于或等于x的最大整数值
字符串操作 || SELECT field1 || field2 as result
FROM metric
字符串级联
聚合函数 avg(x) SELECT time_bucket(timestamp, '2 days') as DAY, avg(field1) as result
FROM metric group by time_bucket(timestamp, '2 days') order by time_bucket(timestamp, '2 days')
返回field1的平均值
聚合函数 count(*) SELECT count(*) as result
FROM metric where timestamp < 1525611901
返回数量
聚合函数 count(x) SELECT time_bucket(timestamp, '2 days') as DAY, count(field1) as count
FROM metric group by time_bucket(timestamp, '2 days') order by time_bucket(timestamp, '2 days')
返回非空值的数量
聚合函数 max_by(x, y) SELECT max_by(field1,field2) as result
FROM metric where timestamp < 1525611901000
返回y最大时的x,UTC时间戳精度毫秒
聚合函数 min_by(x, y) SELECT min_by(field1,field2) as result
FROM metric where timestamp < 1525611901000
返回y最小时的x,UTC时间戳精度毫秒
聚合函数 max(x) SELECT max(field1) as result
FROM metric where timestamp < 1525611901000
返回x的最大值,UTC时间戳精度毫秒
聚合函数 min(x) SELECT min(field1) as result
FROM metric where timestamp < 1525611901000
返回x的最小值,UTC时间戳精度毫秒
聚合函数 sum(x) SELECT time_bucket(timestamp, '2 days') as DAY, sum(field1) as sum
FROM metric group by time_bucket(timestamp, '2 days') order by time_bucket(timestamp, '2 days')
返回x的和值
聚合函数 first_value(x) SELECT field2, first_value(field1) OVER (PARTITION BY field2 ORDER BY timestamp) FROM metric WHERE timestamp >=0 AND timestamp <= 1600 AND field2 IN (1, 2) GROUP BY (field2, field1) (建议field2对应到TSDB的tag) 返回x的首值
聚合函数 last_value(x) SELECT field2, last_value(field1) OVER (PARTITION BY field2 ORDER BY timestamp RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM metric WHERE timestamp >=0 AND timestamp <= 1600 AND field2 IN (1, 2) GROUP BY (field2, field1) (建议field2对应到TSDB的tag) 返回x的末值

TSDB SDK的SQL使用

TSDB Java-SDK、Node-SDK、Python-SDK以及API均支持了SQL查询,具体使用请分别参考Java-SDK、Node-SDK、Python-SDK、API。

相似文档
  • 介绍: TSDB现已正式支持Mysql协议,可为用户提供更加便捷的SQL使用体验。用户可通过控制台创建Mysql协议账号后,利用Mysql JDBC、以及支持Mysql JDBC的各类工具查询访问TSDB数据。
  • Tsdb storage handler: TSDB对接hive是通过实现一个TSDB的HiveStorageHandler,支持对tsdb数据的读取。 Jar下载地址:https://sdk.bce.baidu.com/console-sdk/hive-tsdb-handler_all.jar 如果是本地hive集群,请下载jar到本地;如果使用bmr,则上传到bos或者直接使用地址bos://iot-tsdb/hive-tsdb-handler_all.jar 支持的hive 1.2.0,jdk 1.7。
  • 1 BMR spark sql: 1.1 Spark-tsdb-connector TSDB对接spark sql是通过实现org.apache.spark.rdd.RDD(即Resilient Distributed Dataset)和一些相关的接口,方便用户通过spark来查询TSDB的数据。
  • 各种物联网设备通过百度智能云天工物联网平台接入上云,设备的状态数据实时高效写入到时序数据库中。您可以: 通过时序数据库的数据API接口读取实时数据; 利用时序数据库查询快的优势对数据进行各种聚合运算得到数据报表;
  • 互联网服务可以将用户的访问延迟、查询返回效率、业务服务指标监控数据写入时序数据库中,时序数据库可以做多维度的聚合分析和监控项展示。举个例子,一个音视频点播的服务商,需要将每个房间的清晰度、流畅度、是否卡顿等监控信息实时记录下来,即可以将这些监控项以一定的频率写入时序数据库。
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部