Influx 查询语言 (InfluxQL) 参考
此页面记录了早期版本的 InfluxDB OSS。 InfluxDB OSS v2 是最新的稳定版本。 请参阅 InfluxDB v2 文档。
简介
查找 Influx 查询语言 (InfluxQL) 定义和详细信息,包括
要了解有关 InfluxQL 的更多信息,请浏览以下主题
InfluxQL 是一种类似 SQL 的查询语言,用于与 InfluxDB 交互并提供特定于存储和分析时间序列数据的功能。
符号
语法使用扩展巴科斯-诺尔范式(“EBNF”)指定。 EBNF 与 Go 编程语言规范中使用的符号相同,可以在 此处 找到。 并非巧合的是,InfluxDB 是用 Go 编写的。
Production = production_name "=" [ Expression ] "." .
Expression = Alternative { "|" Alternative } .
Alternative = Term { Term } .
Term = production_name | token [ "…" token ] | Group | Option | Repetition .
Group = "(" Expression ")" .
Option = "[" Expression "]" .
Repetition = "{" Expression "}" .
符号运算符按优先级递增顺序排列
| alternation
() grouping
[] option (0 or 1 times)
{} repetition (0 to n times)
查询表示
字符
InfluxQL 是以 UTF-8 编码的 Unicode 文本。
newline = /* the Unicode code point U+000A */ .
unicode_char = /* an arbitrary Unicode code point except newline */ .
字母和数字
字母是 ASCII 字符集加上下划线字符 _ (U+005F),被视为字母。
仅支持十进制数字。
letter = ascii_letter | "_" .
ascii_letter = "A" … "Z" | "a" … "z" .
digit = "0" … "9" .
标识符
标识符是引用 数据库 名称、保留策略 名称、用户 名称、指标 名称、标签键 和 字段键 的标记。
规则
- 双引号标识符可以包含除换行符之外的任何 unicode 字符
- 双引号标识符可以包含转义的
"
字符(即\"
) - 双引号标识符可以包含 InfluxQL 关键字
- 未加引号的标识符必须以大写或小写 ASCII 字符或“_”开头
- 未加引号的标识符只能包含 ASCII 字母、十进制数字和“_”
identifier = unquoted_identifier | quoted_identifier .
unquoted_identifier = ( letter ) { letter | digit } .
quoted_identifier = `"` unicode_char { unicode_char } `"` .
示例
cpu
_cpu_stats
"1h"
"anything really"
"1_Crazy-1337.identifier>NAME👍"
关键字
ALL ALTER ANY AS ASC BEGIN
BY CREATE CONTINUOUS DATABASE DATABASES DEFAULT
DELETE DESC DESTINATIONS DIAGNOSTICS DISTINCT DROP
DURATION END EVERY EXPLAIN FIELD FOR
FROM GRANT GRANTS GROUP GROUPS IN
INF INSERT INTO KEY KEYS KILL
LIMIT SHOW MEASUREMENT MEASUREMENTS NAME OFFSET
ON ORDER PASSWORD POLICY POLICIES PRIVILEGES
QUERIES QUERY READ REPLICATION RESAMPLE RETENTION
REVOKE SELECT SERIES SET SHARD SHARDS
SLIMIT SOFFSET STATS SUBSCRIPTION SUBSCRIPTIONS TAG
TO USER USERS VALUES WHERE WITH
WRITE
如果您使用 InfluxQL 关键字作为 标识符,则需要在每个查询中用双引号引起来该标识符。
关键字 time
是一种特殊情况。 time
可以是 持续查询 名称、数据库名称、指标 名称、保留策略 名称、订阅 名称和 用户 名称。 在这些情况下,time
在查询中不需要双引号。 time
不能是 字段键 或 标签键; InfluxDB 拒绝将 time
作为字段键或标签键的写入,并返回错误。 有关更多信息,请参阅 常见问题。
字面量
整数
InfluxQL 支持十进制整数文字。 当前不支持十六进制和八进制文字。
int_lit = ( "1" … "9" ) { digit } .
浮点数
InfluxQL 支持浮点文字。 当前不支持指数。
float_lit = int_lit "." int_lit .
字符串
字符串文字必须用单引号括起来。 字符串可以包含 '
字符,只要它们被转义(即 \'
)。
string_lit = `'` { unicode_char } `'` .
持续时间
持续时间文字指定一段时间长度。 紧跟整数文字(没有空格)的下面列出的持续时间单位被解释为持续时间文字。 持续时间可以使用混合单位指定。
持续时间单位
单位 | 含义 |
---|---|
ns | 纳秒(十亿分之一秒) |
u 或 µ | 微秒(百万分之一秒) |
ms | 毫秒(千分之一秒) |
s | 秒 |
m | 分钟 |
h | 小时 |
d | 天 |
w | 周 |
duration_lit = int_lit duration_unit .
duration_unit = "ns" | "u" | "µ" | "ms" | "s" | "m" | "h" | "d" | "w" .
日期和时间
日期和时间文字格式未像本文档的其余部分那样在 EBNF 中指定。 它使用 Go 的日期/时间解析格式指定,这是一个以 InfluxQL 要求的格式编写的参考日期。 参考日期时间是
InfluxQL 参考日期时间:2006 年 1 月 2 日下午 3:04:05
time_lit = "2006-01-02 15:04:05.999999" | "2006-01-02" .
布尔值
bool_lit = TRUE | FALSE .
正则表达式
regex_lit = "/" { unicode_char } "/" .
比较器: =~
匹配 !~
不匹配
注意: InfluxQL 支持在指定以下内容时使用正则表达式
查询
查询由一个或多个语句组成,语句之间用分号分隔。
query = statement { ";" statement } .
statement = alter_retention_policy_stmt |
create_continuous_query_stmt |
create_database_stmt |
create_retention_policy_stmt |
create_subscription_stmt |
create_user_stmt |
delete_stmt |
drop_continuous_query_stmt |
drop_database_stmt |
drop_measurement_stmt |
drop_retention_policy_stmt |
drop_series_stmt |
drop_shard_stmt |
drop_subscription_stmt |
drop_user_stmt |
explain_stmt |
explain_analyze_stmt |
grant_stmt |
kill_query_statement |
revoke_stmt |
select_stmt |
show_continuous_queries_stmt |
show_databases_stmt |
show_diagnostics_stmt |
show_field_key_cardinality_stmt |
show_field_keys_stmt |
show_grants_stmt |
show_measurement_cardinality_stmt |
show_measurement_exact_cardinality_stmt |
show_measurements_stmt |
show_queries_stmt |
show_retention_policies_stmt |
show_series_cardinality_stmt |
show_series_exact_cardinality_stmt |
show_series_stmt |
show_shard_groups_stmt |
show_shards_stmt |
show_stats_stmt |
show_subscriptions_stmt |
show_tag_key_cardinality_stmt |
show_tag_key_exact_cardinality_stmt |
show_tag_keys_stmt |
show_tag_values_stmt |
show_tag_values_cardinality_stmt |
show_users_stmt .
语句
ALTER RETENTION POLICY
alter_retention_policy_stmt = "ALTER RETENTION POLICY" policy_name on_clause
retention_policy_option
[ retention_policy_option ]
[ retention_policy_option ]
[ retention_policy_option ] .
示例
-- Set default retention policy for mydb to 1h.cpu.
ALTER RETENTION POLICY "1h.cpu" ON "mydb" DEFAULT
-- Change duration and replication factor.
-- REPLICATION (replication factor) not valid for OSS instances.
ALTER RETENTION POLICY "policy1" ON "somedb" DURATION 1h REPLICATION 4
CREATE CONTINUOUS QUERY
create_continuous_query_stmt = "CREATE CONTINUOUS QUERY" query_name on_clause
[ "RESAMPLE" resample_opts ]
"BEGIN" select_stmt "END" .
query_name = identifier .
resample_opts = (every_stmt for_stmt | every_stmt | for_stmt) .
every_stmt = "EVERY" duration_lit
for_stmt = "FOR" duration_lit
示例
-- selects from DEFAULT retention policy and writes into 6_months retention policy
CREATE CONTINUOUS QUERY "10m_event_count"
ON "db_name"
BEGIN
SELECT count("value")
INTO "6_months"."events"
FROM "events"
GROUP (10m)
END;
-- this selects from the output of one continuous query in one retention policy and outputs to another series in another retention policy
CREATE CONTINUOUS QUERY "1h_event_count"
ON "db_name"
BEGIN
SELECT sum("count") as "count"
INTO "2_years"."events"
FROM "6_months"."events"
GROUP BY time(1h)
END;
-- this customizes the resample interval so the interval is queried every 10s and intervals are resampled until 2m after their start time
-- when resample is used, at least one of "EVERY" or "FOR" must be used
CREATE CONTINUOUS QUERY "cpu_mean"
ON "db_name"
RESAMPLE EVERY 10s FOR 2m
BEGIN
SELECT mean("value")
INTO "cpu_mean"
FROM "cpu"
GROUP BY time(1m)
END;
CREATE DATABASE
create_database_stmt = "CREATE DATABASE" db_name
[ WITH
[ retention_policy_duration ]
[ retention_policy_replication ]
[ retention_policy_shard_group_duration ]
[ retention_policy_name ]
] .
复制因子在单节点实例中不起作用。
示例
-- Create a database called foo
CREATE DATABASE "foo"
-- Create a database called bar with a new DEFAULT retention policy and specify the duration, replication, shard group duration, and name of that retention policy
CREATE DATABASE "bar" WITH DURATION 1d REPLICATION 1 SHARD DURATION 30m NAME "myrp"
-- Create a database called mydb with a new DEFAULT retention policy and specify the name of that retention policy
CREATE DATABASE "mydb" WITH NAME "myrp"
CREATE RETENTION POLICY
create_retention_policy_stmt = "CREATE RETENTION POLICY" policy_name on_clause
retention_policy_duration
retention_policy_replication
[ retention_policy_shard_group_duration ]
[ "DEFAULT" ] .
复制因子在单节点实例中不起作用。
示例
-- Create a retention policy.
CREATE RETENTION POLICY "10m.events" ON "somedb" DURATION 60m REPLICATION 2
-- Create a retention policy and set it as the DEFAULT.
CREATE RETENTION POLICY "10m.events" ON "somedb" DURATION 60m REPLICATION 2 DEFAULT
-- Create a retention policy and specify the shard group duration.
CREATE RETENTION POLICY "10m.events" ON "somedb" DURATION 60m REPLICATION 2 SHARD DURATION 30m
CREATE SUBSCRIPTION
订阅告诉 InfluxDB 将其接收的所有数据发送到 Kapacitor。
create_subscription_stmt = "CREATE SUBSCRIPTION" subscription_name "ON" db_name "." retention_policy "DESTINATIONS" ("ANY"|"ALL") host { "," host} .
示例
-- Create a SUBSCRIPTION on database 'mydb' and retention policy 'autogen' that send data to 'example.com:9090' via UDP.
CREATE SUBSCRIPTION "sub0" ON "mydb"."autogen" DESTINATIONS ALL 'udp://example.com:9090'
-- Create a SUBSCRIPTION on database 'mydb' and retention policy 'autogen' that round robins the data to 'h1.example.com:9090' and 'h2.example.com:9090'.
CREATE SUBSCRIPTION "sub0" ON "mydb"."autogen" DESTINATIONS ANY 'udp://h1.example.com:9090', 'udp://h2.example.com:9090'
CREATE USER
create_user_stmt = "CREATE USER" user_name "WITH PASSWORD" password
[ "WITH ALL PRIVILEGES" ] .
示例
-- Create a normal database user.
CREATE USER "jdoe" WITH PASSWORD '1337password'
-- Create an admin user.
-- Note: Unlike the GRANT statement, the "PRIVILEGES" keyword is required here.
CREATE USER "jdoe" WITH PASSWORD '1337password' WITH ALL PRIVILEGES
注意: 密码字符串必须用单引号括起来。
DELETE
delete_stmt = "DELETE" ( from_clause | where_clause | from_clause where_clause ) .
示例
DELETE FROM "cpu"
DELETE FROM "cpu" WHERE time < '2000-01-01T00:00:00Z'
DELETE WHERE time < '2000-01-01T00:00:00Z'
DROP CONTINUOUS QUERY
drop_continuous_query_stmt = "DROP CONTINUOUS QUERY" query_name on_clause .
示例
DROP CONTINUOUS QUERY "myquery" ON "mydb"
DROP DATABASE
drop_database_stmt = "DROP DATABASE" db_name .
示例
DROP DATABASE "mydb"
DROP MEASUREMENT
drop_measurement_stmt = "DROP MEASUREMENT" measurement .
示例
-- drop the cpu measurement
DROP MEASUREMENT "cpu"
DROP RETENTION POLICY
drop_retention_policy_stmt = "DROP RETENTION POLICY" policy_name on_clause .
示例
-- drop the retention policy named 1h.cpu from mydb
DROP RETENTION POLICY "1h.cpu" ON "mydb"
DROP SERIES
drop_series_stmt = "DROP SERIES" ( from_clause | where_clause | from_clause where_clause ) .
注意:
WHERE
子句中不支持按时间过滤。
示例
DROP SERIES FROM "telegraf"."autogen"."cpu" WHERE cpu = 'cpu8'
DROP SHARD
drop_shard_stmt = "DROP SHARD" ( shard_id ) .
示例
DROP SHARD 1
DROP SUBSCRIPTION
drop_subscription_stmt = "DROP SUBSCRIPTION" subscription_name "ON" db_name "." retention_policy .
示例
DROP SUBSCRIPTION "sub0" ON "mydb"."autogen"
DROP USER
drop_user_stmt = "DROP USER" user_name .
示例
DROP USER "jdoe"
EXPLAIN
解析和计划查询,然后打印估计成本的摘要。
许多 SQL 引擎使用 EXPLAIN
语句来显示连接顺序、连接算法以及谓词和表达式下推。 由于 InfluxQL 不支持连接,因此 InfluxQL 查询的成本通常是访问的总序列数、对 TSM 文件的迭代器访问次数以及需要扫描的 TSM 块数的函数。
EXPLAIN
查询计划的元素包括
- 表达式
- 辅助字段
- 分片数
- 序列数
- 缓存值
- 文件数
- 块数
- 块大小
explain_stmt = "EXPLAIN" select_stmt .
示例
> explain select sum(pointReq) from "_internal"."monitor"."write" group by hostname;
> QUERY PLAN
------
EXPRESSION: sum(pointReq::integer)
NUMBER OF SHARDS: 2
NUMBER OF SERIES: 2
CACHED VALUES: 110
NUMBER OF FILES: 1
NUMBER OF BLOCKS: 1
SIZE OF BLOCKS: 931
EXPLAIN ANALYZE
执行指定的 SELECT 语句并返回有关运行时查询性能和存储的数据,以树状图可视化。 使用此语句分析查询性能和存储,包括 执行时间 和 计划时间,以及 迭代器类型 和 游标类型。
例如,执行以下语句
> explain analyze select mean(usage_steal) from cpu where time >= '2018-02-22T00:00:00Z' and time < '2018-02-22T12:00:00Z'
可能会产生类似于以下的输出
EXPLAIN ANALYZE
---------------
.
└── select
├── execution_time: 2.25823ms
├── planning_time: 18.381616ms
├── total_time: 20.639846ms
└── field_iterators
├── labels
│ └── statement: SELECT mean(usage_steal::float) FROM telegraf."default".cpu
└── expression
├── labels
│ └── expr: mean(usage_steal::float)
└── create_iterator
├── labels
│ ├── measurement: cpu
│ └── shard_id: 608
├── cursors_ref: 779
├── cursors_aux: 0
├── cursors_cond: 0
├── float_blocks_decoded: 431
├── float_blocks_size_bytes: 1003552
├── integer_blocks_decoded: 0
├── integer_blocks_size_bytes: 0
├── unsigned_blocks_decoded: 0
├── unsigned_blocks_size_bytes: 0
├── string_blocks_decoded: 0
├── string_blocks_size_bytes: 0
├── boolean_blocks_decoded: 0
├── boolean_blocks_size_bytes: 0
└── planning_time: 14.805277ms```
注意:EXPLAIN ANALYZE 忽略查询输出,因此不考虑序列化为 JSON 或 CSV 的成本。
execution_time
显示查询执行所花费的时间量,包括读取时间序列数据、执行操作(当数据流经迭代器时)以及从迭代器中排出处理后的数据。 执行时间不包括将输出序列化为 JSON 或其他格式所花费的时间。
planning_time
显示查询计划所花费的时间量。 在 InfluxDB 中计划查询需要多个步骤。 根据查询的复杂性,计划可能比执行查询需要更多的工作并消耗更多的 CPU 和内存资源。 例如,执行查询所需的序列键的数量会影响查询计划的速度和所需的内存。
首先,InfluxDB 确定查询的有效时间范围,并选择要访问的分片(在 InfluxDB Enterprise 中,分片可能位于远程节点上)。 接下来,对于每个分片和每个指标,InfluxDB 执行以下步骤
- 从索引中选择匹配的序列键,按 WHERE 子句中的标签谓词过滤。
- 根据 GROUP BY 维度将过滤后的序列键分组为标签集。
- 枚举每个标签集,并为每个序列键创建游标和迭代器。
- 合并迭代器并将合并后的结果返回给查询执行器。
iterator type
EXPLAIN ANALYZE 支持以下迭代器类型
create_iterator
节点表示本地 influxd 实例完成的工作——嵌套迭代器的复杂组合,组合和合并以生成最终查询输出。- (仅限 InfluxDB Enterprise)
remote_iterator
节点表示在远程计算机上完成的工作。
有关迭代器的更多信息,请参阅 了解迭代器。
cursor type
EXPLAIN ANALYZE 区分 3 种游标类型。 虽然游标类型具有相同的数据结构和相等的 CPU 和 I/O 成本,但每种游标类型都是出于不同的原因而构建的,并在最终输出中分开。 在调整语句时,请考虑以下游标类型
- cursor_ref:为包含函数的 SELECT 投影创建的引用游标,例如
last()
或mean()
。 - cursor_aux:为简单表达式投影(非选择器或聚合)创建的辅助游标。 例如,
SELECT foo FROM m
或SELECT foo+bar FROM m
,其中foo
和bar
是字段。 - cursor_cond:为 WHERE 子句中引用的字段创建的条件游标。
有关游标的更多信息,请参阅 了解游标。
block types
EXPLAIN ANALYZE 分隔存储块类型,并报告解码的块总数及其在磁盘上的大小(以字节为单位)。 支持以下块类型
| float
| 64 位 IEEE-754 浮点数 | | integer
| 64 位有符号整数 | | unsigned
| 64 位无符号整数 | | boolean
| 1 位,LSB 编码 | | string
| UTF-8 字符串 |
有关存储块的更多信息,请参阅 TSM 文件。
GRANT
注意: 可以向尚不存在的数据库授予用户权限。
grant_stmt = "GRANT" privilege [ on_clause ] to_clause .
示例
-- grant admin privileges
GRANT ALL TO "jdoe"
-- grant read access to a database
GRANT READ ON "mydb" TO "jdoe"
KILL QUERY
停止当前正在运行的查询。
kill_query_statement = "KILL QUERY" query_id .
其中 query_id
是查询 ID,在 SHOW QUERIES
输出中显示为 qid
。
InfluxDB Enterprise 集群: 要终止集群上的查询,您需要指定查询 ID (qid) 和 TCP 主机(例如,
myhost:8088
),可在SHOW QUERIES
输出中找到。
KILL QUERY
#### Examples
```sql
-- kill query with qid of 36 on the local host
KILL QUERY 36
-- kill query on InfluxDB Enterprise cluster
KILL QUERY 53 ON "myhost:8088"
REVOKE
revoke_stmt = "REVOKE" privilege [ on_clause ] "FROM" user_name .
示例
-- revoke admin privileges from jdoe
REVOKE ALL PRIVILEGES FROM "jdoe"
-- revoke read privileges from jdoe on mydb
REVOKE READ ON "mydb" FROM "jdoe"
SELECT
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 ] .
示例
从以 cpu 开头的所有指标中选择数据,并将其放入 cpu_1h 保留策略中的相同指标名称中
SELECT mean("value") INTO "cpu_1h".:MEASUREMENT FROM /cpu.*/
从按天分组并带有时区的指标中选择数据
SELECT mean("value") FROM "cpu" GROUP BY region, time(1d) fill(0) tz('America/Chicago')
SHOW CARDINALITY
指用于估计或精确计数指标、序列、标签键、标签键值和字段键的基数的命令组。
SHOW CARDINALITY 命令有两种变体:估计值和精确值。 估计值是使用草图计算的,对于所有基数大小都是安全的默认值。 精确值是直接从 TSM(时间结构合并树)数据中计数的,但对于高基数数据运行成本很高。 除非必要,否则请使用估计值变体。
仅当数据库上启用时间序列索引 (TSI) 时,才支持按 time
过滤。
有关详细信息,请参阅特定的 SHOW CARDINALITY 命令
- SHOW FIELD KEY CARDINALITY
- SHOW MEASUREMENT CARDINALITY
- SHOW SERIES CARDINALITY
- SHOW TAG KEY CARDINALITY
- SHOW TAG VALUES CARDINALITY
SHOW CONTINUOUS QUERIES
show_continuous_queries_stmt = "SHOW CONTINUOUS QUERIES" .
示例
-- show all continuous queries
SHOW CONTINUOUS QUERIES
SHOW DATABASES
show_databases_stmt = "SHOW DATABASES" .
示例
-- show all databases
SHOW DATABASES
SHOW DIAGNOSTICS
显示节点信息,例如构建信息、正常运行时间、主机名、服务器配置、内存使用情况和 Go 运行时诊断。
有关使用 SHOW DIAGNOSTICS
命令的更多信息,请参阅 使用 SHOW DIAGNOSTICS 命令监控 InfluxDB。
show_diagnostics_stmt = "SHOW DIAGNOSTICS"
SHOW FIELD KEY CARDINALITY
估计或精确计数当前数据库的字段键集的基数,除非使用 ON <database>
选项指定数据库。
注意:
ON <database>
、FROM <sources>
、WITH KEY = <key>
、WHERE <condition>
、GROUP BY <dimensions>
和LIMIT/OFFSET
子句是可选的。 使用这些查询子句时,查询会回退到精确计数。 仅当启用时间序列索引 (TSI) 并且time
在WHERE
子句中不受支持时,才支持按time
过滤。
show_field_key_cardinality_stmt = "SHOW FIELD KEY CARDINALITY" [ on_clause ] [ from_clause ] [ where_clause ] [ group_by_clause ] [ limit_clause ] [ offset_clause ]
show_field_key_exact_cardinality_stmt = "SHOW FIELD KEY EXACT CARDINALITY" [ on_clause ] [ from_clause ] [ where_clause ] [ group_by_clause ] [ limit_clause ] [ offset_clause ]
示例
-- show estimated cardinality of the field key set of current database
SHOW FIELD KEY CARDINALITY
-- show exact cardinality on field key set of specified database
SHOW FIELD KEY EXACT CARDINALITY ON mydb
SHOW FIELD KEYS
show_field_keys_stmt = "SHOW FIELD KEYS" [on_clause] [ from_clause ] .
示例
-- show field keys and field value data types from all measurements
SHOW FIELD KEYS
-- show field keys and field value data types from specified measurement
SHOW FIELD KEYS FROM "cpu"
SHOW GRANTS
show_grants_stmt = "SHOW GRANTS FOR" user_name .
示例
-- show grants for jdoe
SHOW GRANTS FOR "jdoe"
SHOW MEASUREMENT CARDINALITY
估计或精确计数当前数据库的指标集的基数,除非使用 ON <database>
选项指定数据库。
注意:
ON <database>
、FROM <sources>
、WITH KEY = <key>
、WHERE <condition>
、GROUP BY <dimensions>
和LIMIT/OFFSET
子句是可选的。 使用这些查询子句时,查询会回退到精确计数。 仅当启用 TSI(时间序列索引)并且time
在WHERE
子句中不受支持时,才支持按time
过滤。
show_measurement_cardinality_stmt = "SHOW MEASUREMENT CARDINALITY" [ on_clause ] [ from_clause ] [ where_clause ] [ group_by_clause ] [ limit_clause ] [ offset_clause ]
show_measurement_exact_cardinality_stmt = "SHOW MEASUREMENT EXACT CARDINALITY" [ on_clause ] [ from_clause ] [ where_clause ] [ group_by_clause ] [ limit_clause ] [ offset_clause ]
示例
-- show estimated cardinality of measurement set on current database
SHOW MEASUREMENT CARDINALITY
-- show exact cardinality of measurement set on specified database
SHOW MEASUREMENT EXACT CARDINALITY ON mydb
SHOW MEASUREMENTS
show_measurements_stmt = "SHOW MEASUREMENTS" [on_clause] [ with_measurement_clause ] [ where_clause ] [ limit_clause ] [ offset_clause ] .
示例
-- show all measurements
SHOW MEASUREMENTS
-- show measurements where region tag = 'uswest' AND host tag = 'serverA'
SHOW MEASUREMENTS WHERE "region" = 'uswest' AND "host" = 'serverA'
-- show measurements that start with 'h2o'
SHOW MEASUREMENTS WITH MEASUREMENT =~ /h2o.*/
SHOW QUERIES
show_queries_stmt = "SHOW QUERIES" .
示例
-- show all currently-running queries
SHOW QUERIES
--
SHOW RETENTION POLICIES
show_retention_policies_stmt = "SHOW RETENTION POLICIES" [on_clause] .
示例
-- show all retention policies on a database
SHOW RETENTION POLICIES ON "mydb"
SHOW SERIES
show_series_stmt = "SHOW SERIES" [on_clause] [ from_clause ] [ where_clause ] [ limit_clause ] [ offset_clause ] .
示例
SHOW SERIES FROM "telegraf"."autogen"."cpu" WHERE cpu = 'cpu8'
SHOW SERIES CARDINALITY
估计或精确计数当前数据库的序列基数,除非使用 ON <database>
选项指定数据库。
序列基数 是影响 RAM 需求的主要因素。 有关更多信息,请参阅
注意:
ON <database>
、FROM <sources>
、WITH KEY = <key>
、WHERE <condition>
、GROUP BY <dimensions>
和LIMIT/OFFSET
子句是可选的。 使用这些查询子句时,查询会回退到精确计数。WHERE
子句中不支持按time
过滤。
show_series_cardinality_stmt = "SHOW SERIES CARDINALITY" [ on_clause ] [ from_clause ] [ where_clause ] [ group_by_clause ] [ limit_clause ] [ offset_clause ]
show_series_exact_cardinality_stmt = "SHOW SERIES EXACT CARDINALITY" [ on_clause ] [ from_clause ] [ where_clause ] [ group_by_clause ] [ limit_clause ] [ offset_clause ]
示例
-- show estimated cardinality of the series on current database
SHOW SERIES CARDINALITY
-- show estimated cardinality of the series on specified database
SHOW SERIES CARDINALITY ON mydb
-- show exact series cardinality
SHOW SERIES EXACT CARDINALITY
-- show series cardinality of the series on specified database
SHOW SERIES EXACT CARDINALITY ON mydb
SHOW SHARD GROUPS
show_shard_groups_stmt = "SHOW SHARD GROUPS" .
示例
SHOW SHARD GROUPS
SHOW SHARDS
show_shards_stmt = "SHOW SHARDS" .
示例
SHOW SHARDS
name: telegraf
id database retention_policy shard_group start_time end_time expiry_time owners
-- -------- ---------------- ----------- ---------- -------- ----------- ------
16 telegraf autogen 6 2020-10-19T00:00:00Z 2020-10-26T00:00:00Z 2020-10-26T00:00:00Z 6,7,8
17 telegraf autogen 6 2020-10-19T00:00:00Z 2020-10-26T00:00:00Z 2020-10-26T00:00:00Z 9,4,5
21 telegraf autogen 8 2020-10-26T00:00:00Z 2020-11-02T00:00:00Z 2020-11-02T00:00:00Z 8,9,4
22 telegraf autogen 8 2020-10-26T00:00:00Z 2020-11-02T00:00:00Z 2020-11-02T00:00:00Z 5,6,7
26 telegraf autogen 10 2020-11-02T00:00:00Z 2020-11-09T00:00:00Z 2020-11-09T00:00:00Z 9,4,5
27 telegraf autogen 10 2020-11-02T00:00:00Z 2020-11-09T00:00:00Z 2020-11-09T00:00:00Z 6,7,8
31 telegraf autogen 12 2020-11-09T00:00:00Z 2020-11-16T00:00:00Z 2020-11-16T00:00:00Z 6,7,8
SHOW SHARDS
输出以下数据
id
列:属于指定database
和retention policy
的分片 ID。shard_group
列:分片所属的组号。 同一分片组中的分片具有相同的start_time
和end_time
。 此间隔指示分片处于活动状态的时间长度,expiry_time
列显示分片组何时过期。 如果保留策略持续时间设置为无限,则expiry_time
下不会显示时间戳。owners
列:显示拥有分片的数据节点。 拥有分片的节点数等于复制因子。 在此示例中,复制因子为 3,因此 3 个节点拥有每个分片。
SHOW STATS
返回有关 InfluxDB 节点的可用组件和可用(已启用)组件的详细统计信息。
有关使用 SHOW STATS
命令的更多信息,请参阅 使用 SHOW STATS 命令监控 InfluxDB。
show_stats_stmt = "SHOW STATS [ FOR '<component>' | 'indexes' ]"
SHOW STATS
SHOW STATS
命令不列出索引内存使用情况 – 请使用SHOW STATS FOR 'indexes'
命令。SHOW STATS
返回的统计信息存储在内存中,并在节点重新启动时重置为零,但每 10 秒触发一次SHOW STATS
以填充_internal
数据库。
SHOW STATS FOR <component>
- 对于指定的组件 (<component>),该命令返回可用的统计信息。
- 对于
runtime
组件,该命令返回 InfluxDB 系统内存使用情况的概述,使用 Go runtime 包。
SHOW STATS FOR 'indexes'
- 返回所有索引的内存使用情况的估计值。 索引内存使用情况未与
SHOW STATS
一起报告,因为它可能是一个昂贵的操作。
示例
> show stats
name: runtime
-------------
Alloc Frees HeapAlloc HeapIdle HeapInUse HeapObjects HeapReleased HeapSys Lookups Mallocs NumGC NumGoroutine PauseTotalNs Sys TotalAlloc
4136056 6684537 4136056 34586624 5816320 49412 0 40402944 110 6733949 83 44 36083006 46692600 439945704
name: graphite
tags: proto=tcp
batches_tx bytes_rx connections_active connections_handled points_rx points_tx
---------- -------- ------------------ ------------------- --------- ---------
159 3999750 0 1 158110 158110
SHOW SUBSCRIPTIONS
show_subscriptions_stmt = "SHOW SUBSCRIPTIONS" .
示例
SHOW SUBSCRIPTIONS
SHOW TAG KEY CARDINALITY
估计或精确计数当前数据库的标签键集的基数,除非使用 ON <database>
选项指定数据库。
注意:
ON <database>
、FROM <sources>
、WITH KEY = <key>
、WHERE <condition>
、GROUP BY <dimensions>
和LIMIT/OFFSET
子句是可选的。 使用这些查询子句时,查询会回退到精确计数。 仅当启用 TSI(时间序列索引)并且time
在WHERE
子句中不受支持时,才支持按time
过滤。
show_tag_key_cardinality_stmt = "SHOW TAG KEY CARDINALITY" [ on_clause ] [ from_clause ] [ where_clause ] [ group_by_clause ] [ limit_clause ] [ offset_clause ]
show_tag_key_exact_cardinality_stmt = "SHOW TAG KEY EXACT CARDINALITY" [ on_clause ] [ from_clause ] [ where_clause ] [ group_by_clause ] [ limit_clause ] [ offset_clause ]
示例
-- show estimated tag key cardinality
SHOW TAG KEY CARDINALITY
-- show exact tag key cardinality
SHOW TAG KEY EXACT CARDINALITY
SHOW TAG KEYS
show_tag_keys_stmt = "SHOW TAG KEYS" [on_clause] [with_key_clause] [ from_clause ] [ where_clause ]
[ limit_clause ] [ offset_clause ] .
示例
-- show all tag keys
SHOW TAG KEYS
-- show all tag keys from the cpu measurement
SHOW TAG KEYS FROM "cpu"
-- show all tag keys from the cpu measurement where the region key = 'uswest'
SHOW TAG KEYS FROM "cpu" WHERE "region" = 'uswest'
-- show all tag keys where the host key = 'serverA'
SHOW TAG KEYS WHERE "host" = 'serverA'
-- show specific tag keys
SHOW TAG KEYS WITH KEY IN ("region", "host")
SHOW TAG VALUES
show_tag_values_stmt = "SHOW TAG VALUES" [on_clause] [ from_clause ] with_tag_clause [ where_clause ]
[ limit_clause ] [ offset_clause ] .
示例
-- show all tag values across all measurements for the region tag
SHOW TAG VALUES WITH KEY = "region"
-- show tag values from the cpu measurement for the region tag
SHOW TAG VALUES FROM "cpu" WITH KEY = "region"
-- show tag values across all measurements for all tag keys that do not include the letter c
SHOW TAG VALUES WITH KEY !~ /.*c.*/
-- show tag values from the cpu measurement for region & host tag keys where service = 'redis'
SHOW TAG VALUES FROM "cpu" WITH KEY IN ("region", "host") WHERE "service" = 'redis'
SHOW TAG VALUES CARDINALITY
估计或精确计数当前数据库上指定标签键的标签键值的基数,除非使用 ON <database>
选项指定数据库。
注意:
ON <database>
、FROM <sources>
、WITH KEY = <key>
、WHERE <condition>
、GROUP BY <dimensions>
和LIMIT/OFFSET
子句是可选的。 使用这些查询子句时,查询会回退到精确计数。 仅当启用 TSI(时间序列索引)时,才支持按time
过滤。
show_tag_values_cardinality_stmt = "SHOW TAG VALUES CARDINALITY" [ on_clause ] [ from_clause ] [ where_clause ] [ group_by_clause ] [ limit_clause ] [ offset_clause ] with_key_clause
show_tag_values_exact_cardinality_stmt = "SHOW TAG VALUES EXACT CARDINALITY" [ on_clause ] [ from_clause ] [ where_clause ] [ group_by_clause ] [ limit_clause ] [ offset_clause ] with_key_clause
示例
-- show estimated tag key values cardinality for a specified tag key
SHOW TAG VALUES CARDINALITY WITH KEY = "myTagKey"
-- show estimated tag key values cardinality for a specified tag key
SHOW TAG VALUES CARDINALITY WITH KEY = "myTagKey"
-- show exact tag key values cardinality for a specified tag key
SHOW TAG VALUES EXACT CARDINALITY WITH KEY = "myTagKey"
-- show exact tag key values cardinality for a specified tag key
SHOW TAG VALUES EXACT CARDINALITY WITH KEY = "myTagKey"
SHOW USERS
show_users_stmt = "SHOW USERS" .
示例
-- show all users
SHOW USERS
子句
from_clause = "FROM" measurements .
group_by_clause = "GROUP BY" dimensions fill(fill_option).
into_clause = "INTO" ( measurement | back_ref ).
limit_clause = "LIMIT" int_lit .
offset_clause = "OFFSET" int_lit .
slimit_clause = "SLIMIT" int_lit .
soffset_clause = "SOFFSET" int_lit .
timezone_clause = tz(string_lit) .
on_clause = "ON" db_name .
order_by_clause = "ORDER BY" sort_fields .
to_clause = "TO" user_name .
where_clause = "WHERE" expr .
with_measurement_clause = "WITH MEASUREMENT" ( "=" measurement | "=~" regex_lit ) .
with_tag_clause = "WITH KEY" ( "=" tag_key | "!=" tag_key | "=~" regex_lit | "IN (" tag_keys ")" ) .
表达式
binary_op = "+" | "-" | "*" | "/" | "%" | "&" | "|" | "^" | "AND" |
"OR" | "=" | "!=" | "<>" | "<" | "<=" | ">" | ">=" .
expr = unary_expr { binary_op unary_expr } .
unary_expr = "(" expr ")" | var_ref | time_lit | string_lit | int_lit |
float_lit | bool_lit | duration_lit | regex_lit .
其他
alias = "AS" identifier .
back_ref = ( policy_name ".:MEASUREMENT" ) |
( db_name "." [ policy_name ] ".:MEASUREMENT" ) .
db_name = identifier .
dimension = expr .
dimensions = dimension { "," dimension } .
field_key = identifier .
field = expr [ alias ] .
fields = field { "," field } .
fill_option = "null" | "none" | "previous" | int_lit | float_lit | "linear" .
host = string_lit .
measurement = measurement_name |
( policy_name "." measurement_name ) |
( db_name "." [ policy_name ] "." measurement_name ) .
measurements = measurement { "," measurement } .
measurement_name = identifier | regex_lit .
password = string_lit .
policy_name = identifier .
privilege = "ALL" [ "PRIVILEGES" ] | "READ" | "WRITE" .
query_id = int_lit .
query_name = identifier .
retention_policy = identifier .
retention_policy_option = retention_policy_duration |
retention_policy_replication |
retention_policy_shard_group_duration |
"DEFAULT" .
retention_policy_duration = "DURATION" duration_lit .
retention_policy_replication = "REPLICATION" int_lit .
retention_policy_shard_group_duration = "SHARD DURATION" duration_lit .
retention_policy_name = "NAME" identifier .
series_id = int_lit .
shard_id = int_lit .
sort_field = field_key [ ASC | DESC ] .
sort_fields = sort_field { "," sort_field } .
subscription_name = identifier .
tag_key = identifier .
tag_keys = tag_key { "," tag_key } .
user_name = identifier .
var_ref = measurement .
注释
使用 InfluxQL 语句中的注释来描述您的查询。
- 单行注释以两个连字符 (
--
) 开头,并在 InfluxDB 检测到换行符时结束。 此注释类型不能跨越多行。 - 多行注释以
/*
开头,以*/
结尾。 此注释类型可以跨越多行。 多行注释不支持嵌套多行注释。
查询引擎内部原理
一旦您了解了语言本身,了解这些语言结构如何在查询引擎中实现也很重要。 这使您可以直观地了解结果将如何处理以及如何创建高效的查询。
查询的生命周期如下所示
InfluxQL 查询字符串被标记化,然后解析为抽象语法树 (AST)。 这是查询本身的代码表示形式。
AST 传递给
QueryExecutor
,后者将查询定向到适当的处理程序。 例如,与元数据相关的查询由元服务执行,SELECT
语句由分片本身执行。然后,查询引擎确定与
SELECT
语句的时间范围匹配的分片。 从这些分片中,为语句中的每个字段创建迭代器。迭代器传递给发射器,发射器排出它们并连接结果点。 发射器的任务是将简单的时间/值点转换为返回给客户端的更复杂的结果对象。
了解迭代器
迭代器是查询引擎的核心。 它们为循环遍历一组点提供了一个简单的接口。 例如,这是一个遍历浮点的迭代器
type FloatIterator interface {
Next() *FloatPoint
}
这些迭代器是通过 IteratorCreator
接口创建的
type IteratorCreator interface {
CreateIterator(opt *IteratorOptions) (Iterator, error)
}
IteratorOptions
提供有关字段选择、时间范围和维度的参数,迭代器创建器可以在计划迭代器时使用这些参数。 IteratorCreator
接口在多个级别(例如 Shards
、Shard
和 Engine
)使用。 这允许在适用时执行优化,例如返回预先计算的 COUNT()
。
迭代器不仅仅用于从存储读取原始数据。 迭代器可以组合在一起,以便它们围绕输入迭代器提供附加功能。 例如,DistinctIterator
可以计算输入迭代器的每个时间窗口的不同值。 或者 FillIterator
可以生成输入迭代器中缺少的其他点。
这种组合也非常适合聚合。 例如,像这样的语句
SELECT MEAN(value) FROM cpu GROUP BY time(10m)
在这种情况下,MEAN(value)
是一个 MeanIterator
,它包装来自底层分片的迭代器。 但是,如果我们添加一个额外的迭代器来确定均值的导数
SELECT DERIVATIVE(MEAN(value), 20m) FROM cpu GROUP BY time(10m)
了解游标
游标 通过分片在元组(时间、值)中为单个序列(指标、标签集和字段)标识数据。 游标遍历存储为日志结构合并树的数据,并处理跨级别的重复数据删除、已删除数据的墓碑以及合并缓存(预写日志)。 游标按时间升序或降序对 (时间、值)
元组进行排序。
例如,一个查询在 3 个分片上评估 1,000 个序列的一个字段,将构建至少 3,000 个游标(每个分片 1,000 个)。
了解辅助字段
由于 InfluxQL 允许用户使用选择器函数,例如 FIRST()
、LAST()
、MIN()
和 MAX()
,因此引擎必须提供一种在选定点同时返回相关数据的方法。
例如,在此查询中
SELECT FIRST(value), host FROM cpu GROUP BY time(1h)
我们每小时选择第一个出现的 value
,但我们也想检索与该点关联的 host
。 由于 Point
类型仅为效率指定单个类型化的 Value
,因此我们将 host
推送到点的辅助字段中。 这些辅助字段附加到该点,直到它传递到发射器,在那里字段被拆分到它们自己的迭代器。
内置迭代器
有许多辅助迭代器可以让我们构建查询
合并迭代器 - 此迭代器将一个或多个迭代器组合成同一类型的新迭代器。 此迭代器保证在开始下一个窗口之前输出窗口内的所有点,但不提供窗口内的排序保证。 这允许对不需要更强排序保证的聚合查询进行快速访问。
排序合并迭代器 - 此迭代器还将一个或多个迭代器组合成同一类型的新迭代器。 但是,此迭代器保证每个点的时间顺序。 这使其比
MergeIterator
慢,但是对于返回原始数据点的非聚合查询,此排序保证是必需的。限制迭代器 - 此迭代器限制每个名称/标签组的点数。 这是
LIMIT
和OFFSET
语法的实现。填充迭代器 - 如果输入迭代器中缺少点,则此迭代器会注入额外的点。 它可以提供
null
点、具有先前值的点或具有特定值的点。缓冲迭代器 - 此迭代器提供将点“取消读取”回缓冲区的功能,以便下次可以再次读取它。 这广泛用于为窗口化提供前瞻。
Reduce 迭代器 - 此迭代器为窗口中的每个点调用一个 reduce 函数。 当窗口完成时,将输出该窗口的所有点。 这用于简单的聚合函数,例如
COUNT()
。Reduce Slice 迭代器 - 此迭代器首先收集窗口的所有点,然后一次将它们全部传递给 reduce 函数。 结果从迭代器返回。 这用于聚合函数,例如
DERIVATIVE()
。转换迭代器 - 此迭代器为来自输入迭代器的每个点调用一个转换函数。 这用于执行二进制表达式。
Dedupe 迭代器 - 此迭代器仅输出唯一点。 它资源密集型,因此仅用于小型查询,例如元查询语句。
调用迭代器
InfluxQL 中的函数调用在两个级别实现。 某些调用可以包装在多个层中以提高效率。 例如,COUNT()
可以在分片级别执行,然后多个 CountIterator
可以用另一个 CountIterator
包装,以计算所有分片的计数。 这些迭代器可以使用 NewCallIterator()
创建。
某些迭代器更复杂或需要在更高级别实现。 例如,DERIVATIVE()
需要先检索窗口的所有点,然后才能执行计算。 此迭代器由引擎本身创建,并且永远不会被较低级别请求创建。
此页是否对您有帮助?
感谢您的反馈!
支持和反馈
感谢您成为我们社区的一份子! 我们欢迎并鼓励您对 InfluxDB 和本文档提供反馈和错误报告。 要查找支持,请使用以下资源
拥有年度合同或支持合同的客户 可以 联系 InfluxData 支持。