tencent cloud

时序数据库 CTSDB

动态与公告
产品动态
公告
产品简介
产品概述
系统架构
应用场景
关键概念
实例类型与规格
购买指南
产品定价
购买实例
续费说明
欠费说明
退费说明
快速入门
连接并写入数据
操作指南
访问管理
管理实例
自动备份
系统监控
库管理
账号管理
管理安全组
外网访问
InfluxQL 兼容性
数据库管理
Schema 查询
数据类型
数据查询
InfluxQL 函数
客户端
SDK 参考
influx CLI 客户端
API 文档
History
Introduction
API Category
Making API Requests
Instance APIs
Database APIs
Data Types
Error Codes
实践教程
数据表定义推荐
接入 Grafana 服务
接入 Telegraf 服务
性能白皮书
测试环境
测试工具
写入性能测试
查询性能测试
常见问题
词汇表
CTSDB 政策
隐私政策
数据处理和安全协议
联系我们

数据查询

PDF
聚焦模式
字号
最后更新时间: 2025-04-29 23:09:47

Select 查询

时序数据库 CTSDB 3.0在使用 select 查询数据时,相比开源 InfluxDB,存在如下差异。各个子句的语义,请参见 子句及表达式
into_clause子句用于将数据写入指定的测量(measurement)中,当前不支持。
timezone_clause子句用于在查询结果中将时间戳转换为指定时区的本地时间,当前已支持。
sql_order_by_clause为时序数据库 InfluxDB 版新增的子句,它允许您使用 SQL 风格的表达式对查询结果进行排序。
开源 InfluxDB
时序数据库 CTSDB 3.0版
select_stmt = "SELECT" fields from_clause [into_clause] [ where_clause ] [ group_by_clause ] [ order_by_clause ] [ limit_clause ] [ offset_clause ] [ slimit_clause ] [ soffset_clause ] [ timezone_clause ]
select_stmt = "SELECT" fields from_clause [ where_clause ] [ group_by_clause ] [ order_by_clause ] [ limit_clause ] [ offset_clause ] [ slimit_clause ] [ soffset_clause ] [ sql_order_by_clause ]
SELECT_clause FROM ( SELECT_clause FROM ( SELECT_statement ) [...] ) [...]
完全兼容
如下查询示例,以 使用数据库实例 中的关于车辆的时序数据为例。每行代表一个车辆的信息,包括车辆的 id、所在城市、类型、速度和温度等。时间戳位于每行末尾,表示这些信息是在对应的时间戳时刻记录的。
查询数据类别
查询语句
查询全部数据
select * from car
分页获取部分数据
select * from car limit 3 offset 2
聚合函数作为复杂表达式的参数
select (max(speed) + max(temp) - min(speed)) * count(speed) / 20 % 5 as f1, floor(min(speed)) & ceil(max(temp)) | round(min(speed)) ^ round(max(temp)) as f2, sqrt(pow(abs(max(speed)*min(speed)), 2)) as f3 from car group by time(3s), type fill(none)
聚合计算
select count(speed), mean(speed), count(temp), percentile(temp, 50) from car group by time(3s), type fill(none) limit 1 offset 1 slimit 2 soffset 1
混合一个 Selectors 与 field,group by time intervals
select max(speed)*6, speed*10 from car where time <= 2000000000ns group by time(1s)
混合一个 Selectors 与 field,group by tag
select max(speed), pow(speed, temp/100.0) from car group by type
仅 fields,group by tag
select *, temp, sqrt(pow(abs(max(speed)), 3)) FROM car group by city

InfluxQL 子句及表达式

InfluxQL 是一种类似于 SQL 的查询语言,用于与 InfluxDB 中的数据进行交互。下表详细列出了时序数据库版 InfluxDB 版相比开源 InfluxDB 在探索数据的查询语法方面的支持程度。具体如何使用,请参见 Explore data using InfluxQL
开源 InfluxDB
时序数据库 InfluxDB 版
语义
with_tag_clause = "WITH KEY" ( "=" tag_key | "!=" tag_key | "=~" regex_lit | "IN (" tag_keys ")" ) .
支持
该查询语义通过正则表达式指定一个或多个标签键。具体信息,请参见 Regular expressions
WITH KEY 是一个关键字,用于指示后面的子句将包含一个或多个标签键和值。
=、!=、=~和 IN:这些是可用于匹配标签键和值的运算符。
=,!=和=~分别表示相等、不相等和正则表达式匹配。
IN 运算符用于指定标签键的值应该是给定列表中的一个。
tag_key:用于匹配的标签键的名称。
regex_lit:用于匹配标签键的值。
tag_keys:用于指定要匹配的多个标签键。
示例:SELECT * FROM http_requests_total WITH KEY (method != 'POST' AND method =~ 'PUT.*') | status_code IN ('200', '404')
with_measurement_clause = "WITH MEASUREMENT" ( "=" measurement | "=~" regex_lit ) .
该语义使用 WITH MEASUREMENT 子句来筛选指定的测量值(measurement),其中 regex_lit 指定了匹配的测量值。
where_clause = "WHERE" expr.
请参见 The WHERE clause
var_ref = measurement .
表示一个变量引用,将变量与测量值进行关联。
user_name = identifier .
定义一个名为 user_name 的字段,其值为 identifier。
unary_expr = "(" expr ")" | var_ref | time_lit | string_lit | int_lit | float_lit | bool_lit | duration_lit | regex_lit .
unary_expr 的表达式,它可以由以下几种子表达式组成:
(expr):表示一个由括号包围的表达式,其中 expr 是另一个表达式。
var_ref:表示一个变量引用,用于引用 InfluxDB 中的测量值、字段或标签。
time_lit:表示一个时间字面量,用于表示时间戳。
string_lit:表示一个字符串字面量,用于表示文本数据。
int_lit:表示一个整数字面量,用于表示整型数据。
float_lit:表示一个浮点数字面量,用于表示浮点型数据。
bool_lit:表示一个布尔字面量,用于表示真或假。
duration_lit:表示一个时间段字面量,用于表示持续时间。
regex_lit:表示一个正则表达式字面量,用于匹配文本数据中的模式。
to_clause = "TO" user_name .
表示在查询 InfluxDB 中的数据时,将查询结果发送到指定的用户。其中,user_name 参数是指接收查询结果的用户的名称。
timezone_clause = tz(string_lit) .
支持
用于时序数据库中的时间戳数据,以指定时间戳的时区信息。如下示例, 指定了时区信息为亚洲/上海的数据。
SELECT time, temperature FROM sensor_data WHERE time >= '2023-07-10T00:00:00.000Z' AND time < '2023-07-11T00:00:00.000Z' timezone_clause = tz('Asia/Shanghai');
tag_keys = tag_key { "," tag_key } .
支持
指定要在查询结果中返回的标签键列表。
逗号表示标签键之间的分隔符。
如下查询语句只返回标签 tag3 的值等于 value3,并且时间戳在过去的一小时内的数据。标签键 tag1 和 tag2,只返回这两个标签键的值。
SELECT * FROM measurement1 WHERE tag3='value3' AND time > now() - 1h TAGS tag_keys=tag1,tag2
tag_key = identifier .
表示标签键由一个标识符组成。标签是存储在 InfluxDB 中的每个时间序列的元数据,由键值对组成。您可以使用标识符来命名标签键。例如:measurement1,tag1=value1,tag2=value2 field1=1,field2=2
subscription_name = identifier .
表示订阅名称由一个标识符组成。
soffset_clause = "SOFFSET" int_lit .
soffset_clause 是用于查询 InfluxDB 中的时间序列数据时指定偏移量的语法结构。它由 SOFFSET 和一个整数字面量 int_lit 组成。例如:SELECT * FROM mymeasurement WHERE time > '2023-05-01T00:00:00Z' AND time < '2023-05-31T00:00:00Z' SOFFSET 10
slimit_clause = "SLIMIT" int_lit .
slimit_clause 是用于查询 InfluxDB 中的时间序列数据时指定返回结果数量限制的语法结构。它由 SLIMIT 和一个整数字面量 int_lit 组成,只能用于 SELECT 语句,并且必须放在查询语句的末尾。例如:SELECT * FROM mymeasurement WHERE time > '2023-05-01T00:00:00Z' AND time < '2023-05-31T00:00:00Z' SLIMIT 10
series_id = int_lit .
series_id 是用于查询 InfluxDB 中的时间序列数据时指定数据系列 ID 的语法结构。它由一个整数字面量 int_lit 组成。使用 series_id,您可以查询指定 ID 的数据系列,但是只能用于 SELECT 语句,并且必须放在查询语句的末尾。例如,查询 ID 为1234的数据系列:SELECT * FROM mymeasurement WHERE series_id = 1234
retention_policy_shard_group_duration = "SHARD DURATION" duration_lit .
不支持
-
retention_policy_replication = "REPLICATION" int_lit .
不支持
-
retention_policy_option = retention_policy_duration | retention_policy_replication | retention_policy_shard_group_duration | "DEFAULT" .
不支持
-
retention_policy_name = "NAME" identifier .
不支持
-
retention_policy_duration = "DURATION" duration_lit .
不支持
-
retention_policy = identifier .
不支持
-
query_name = identifier .
支持
query_name 是用于对查询语句进行命名的语法结构。以下使用 SELECT 语句查询名为 mymeasurement 的测量中在特定时间范围内的所有数据点,并使用 GROUP BY 对结果进行分组。然后,使用 INTO 将查询结果存储到名为 mycount 的查询中。 SELECT COUNT(*) FROM mymeasurement WHERE time > '2023-05-01T00:00:00Z' AND time < '2023-05-31T00:00:00Z' GROUP BY time(1h) INTO mycount
query_id = int_lit .
支持
query_id 是用于查询 InfluxDB 中的已命名查询的标识符。它由一个整数字面量 int_lit 组成。例如:SELECT * FROM 1234
privilege = "ALL" [ "PRIVILEGES" ] | "READ" | "WRITE" .
不支持
-
policy_name = identifier .
不支持
-
password = string_lit .
支持
password 是用于在连接 InfluxDB 时指定密码的语法结构。它由一个字符串字面量 string_lit 组成。使用 password,您可以在连接 InfluxDB 时指定密码,以便进行身份验证。例如,使用 influx 命令连接到名为 myinfluxdb.example.com 的 InfluxDB 实例,并指定用户名为 myuser,密码为 mypassword。示例如下: influx -username myuser -password 'mypassword' -host myinfluxdb.example.com -port 8086
order_by_clause = "ORDER BY" sort_fields .
sort_fields = sort_field { "," sort_field } .
sort_field = field_key [ ASC | DESC ] .
order_by_clause = ORDER BY time [ ASC | DESC ] sql_order_by_clause = SQLORDER BY {sql_order_expr [ ASC | DESC ] } [ ,...n ]  SQLLIMIT N SQLOFFSET N] sql_order_expr = {alias | expr | position}
ORDER BY 子句用于按照指定的列对查询结果进行排序。ORDER BY 子句后面必须跟一个排序字段,通常是 time,它是 InfluxDB 中所有测量的默认时间戳列。您可以选择按升序(ASC)或降序(DESC)排序。例如:SELECT * FROM mymeasurement WHERE time > '2023-05-01T00:00:00Z' AND time < '2023-05-31T00:00:00Z' ORDER BY time DESC
除了 InfluxQL 的 ORDER BY 子句外,还有一个类似的 SQL 语法的
SQLORDER BY 子句。它允许您使用 SQL 风格的表达式对查询结果进行排序,并支持 LIMIT 和 OFFSET 子句。例如,以下是一个使用 SQLORDER BY 子句的示例:
SELECT * FROM mymeasurement SQLORDER BY value DESC, time ASC SQLLIMIT 10 SQLOFFSET 20
on_cluse = "ON" db_name .
支持
ON 子句用于指定查询操作的目标数据库。它通常用于跨数据库查询或在具有多个数据库的 InfluxDB 实例中执行查询。ON 子句后面必须跟一个数据库名称,例如:
SELECT * FROM mymeasurement ON mydatabase WHERE time > '2023-05-01T00:00:00Z' AND time < '2023-05-31T00:00:00Z'
offset_clause = "OFFSET" int_lit .
OFFSET 子句用于指定查询结果集的偏移量。它通常与 LIMIT 子句一起使用,以限制查询结果集的大小并指定从哪个偏移量开始返回结果。OFFSET 子句后面必须跟一个整数值,例如: SELECT * FROM mymeasurement WHERE time > '2023-05-01T00:00:00Z' AND time < '2023-05-31T00:00:00Z' LIMIT 10 OFFSET 20 注意:OFFSET 子句必须放在 LIMIT 子句之后。如果省略 OFFSET 子句,则默认偏移量为0。如果查询结果集的大小小于指定的偏移量,则返回空结果集。
measurements = measurement { "," measurement } .
measurements 是一个由多个测量名称组成的列表,用于指定查询操作的目标测量。它通常用于跨多个测量执行查询操作。measurements 语法结构由一个或多个 measurement 组成,每个 measurement 表示一个测量名称。例如,使用 SELECT 语句查询名为 measurement1 和 measurement2 的两个测量中在特定时间范围内的所有数据点,执行语句如下:SELECT * FROM measurement1, measurement2 WHERE time > '2023-05-01T00:00:00Z' AND time < '2023-05-31T00:00:00Z'
measurement_name = identifier | regex_lit .
measurement_name = identifier
measurement_name 表示一个测量名称,用于标识 InfluxDB 中存储的一组数据。它是一个标识符,由一个或多个字母、数字或下划线组成,且必须以字母开头。
measurement = measurement_name | ( policy_name "." measurement_name ) | ( db_name "." [ policy_name ] "." measurement_name ) .
measurement = measurement_name 
measurement 表示一个测量,它是由测量名称、字段和标签组成的数据存储单位。每个测量都包含一个或多个字段和零个或多个标签,用于描述数据的特征和属性。measurement 语法结构由一个 measurement_name 组成,表示测量的名称。
limit_clause = "LIMIT" int_lit .
支持
limit_clause 用于限制查询结果返回的数据点数量。它由关键字 LIMIT 和一个整数值组成,该整数值表示返回的数据点数量。
into_clause = "INTO" ( measurement | back_ref ).
不支持
-
host = string_lit .
支持
host 表示一个主机名,用于标识 InfluxDB 中存储的数据所属的主机。它是一个字符串,由一系列字符组成,用于唯一标识一个主机。
groupby_clause = "GROUP BY" dimensions fill(fill_option).
GROUP BY 用于将查询结果按照指定的维度进行分组。groupby_clause 语法结构由以下部分组成:
"GROUP BY":关键字。表示按照指定的维度进行分组。
dimensions:一个或多个维度,用逗号分隔。维度可以是测量中的字段或标签名。
fill(fill_option):一个可选的填充选项,用于指定如何处理缺失的数据点。
以下示例使用 SELECT 语句查询名为 my_measurement 的测量中在特定时间范围内的所有数据点,并按照 location 标签对数据点进行分组,最后计算每组数据点的平均值。 SELECT mean(value) FROM my_measurement WHERE time > '2023-05-01T00:00:00Z' AND time < '2023-05-31T00:00:00Z' GROUP BY location
from_clause = "FROM" measurements .
FROM用于指定查询的数据源,即测量名称。
fill_option = "null" | "none" | "previous" | int_lit | float_lit | "linear" .
fill_option = "none" .
fill_option 用于指定如何处理查询结果中的缺失数据点。fill_option 可以是以下三种选项之一:
fill(null):用 null 填充缺失的数据点。
fill(previous):用前一个数据点的值填充缺失的数据点。
fill(none):不对缺失的数据点进行填充,直接将其忽略。
fields = field { "," field } .
支持
fields 用于指定需要查询的字段列表,可以是一个或多个字段,用逗号分隔。如果需要查询所有字段,可以使用通配符“*”。
field:一个或多个字段名,用逗号分隔。
{ "," field }:可选的重复部分,用于指定多个字段名。
field_key = identifier .
field_key 用于指定测量中的字段名。identifier 为一个标识符,用于指定测量中的字段名。
field = expr [ alias ] .
field 用于指定查询结果中的一个字段。field 语法结构由以下部分组成:
expr:一个表达式,用于计算查询结果中的值。
[ alias ]:可选的别名,用于为查询结果中的字段指定一个名称。
expr = unary_expr { binary_op unary_expr } .
expr 用于表示一个表达式,可以是一个常量、一个标识符或一个由运算符和操作数组成的复杂表达式。expr 语法结构由以下部分组成:
unary_expr:一个一元表达式,可以是一个常量、一个标识符或一个由一元运算符和操作数组成的表达式。
{ binary_op unary_expr }:可选的重复部分,用于指定多个二元运算符和操作数。
dimensions = dimension { "," dimension } .
dimensions 用于指定查询结果中的一个或多个维度。
dimensions 语法结构由以下部分组成:
dimension:一个维度,用于指定查询结果中的一个维度。 { "," dimension }:可选的重复部分,用于指定多个维度。
以下示例,使用 SELECT 语句查询名为 my_measurement 的测量中在特定时间范围内的所有数据点,并计算 temperature 字段的平均值。我们还使用 GROUP BY 子句指定了两个维度 location 和 device,这意味着查询结果将按照这两个维度进行分组。
SELECT mean(temperature) FROM my_measurement WHERE time > '2023-05-01T00:00:00Z' AND time < '2023-05-31T00:00:00Z' GROUP BY location, device
dimension = expr .
dimension 用于指定查询结果中的一个维度。expr 指一个表达式,用于计算查询结果中的值。
db_name = identifier .
db_name 用于指定测量中的数据库名。identifier 为一个标识符,用于指定测量中的字段名。
binary_op = "+" | "-" | "*" | "/" | "%" | "&" | "|" | "^" | "AND" | "OR" | "=" | "!=" | "<>" | "<" | "<=" | ">" | ">=" .
表示二元运算符。这些运算符包括加号、减号、乘号、除号、取模运算、按位与、按位或、按位异或、逻辑与、逻辑或、等于、不等于、小于等于、大于等于、小于和大于。这些运算符用于操作两个值,并返回一个结果。
back_ref = ( policy_name ".:MEASUREMENT" ) | ( db_name "." [ policy_name ] ".:MEASUREMENT" ) .
不支持
-
alias = "AS" identifier .
支持
该语义用于创建一个别名。该别名由两个部分组成:AS 和 identifier。AS 是一个关键字,identifier 是用于表示别名的标识符。
SELECT mean(temperature) AS avg_temp, mean(humidity) AS avg_humid FROM weather;

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈