文档文档

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 支持在指定以下内容时使用正则表达式

目前,InfluxQL 不支持在 WHERE 子句、数据库保留策略 中使用正则表达式来匹配非字符串字段值。

查询

查询由一个或多个语句组成,语句之间用分号分隔。

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 执行以下步骤

  1. 从索引中选择匹配的序列键,按 WHERE 子句中的标签谓词过滤。
  2. 根据 GROUP BY 维度将过滤后的序列键分组为标签集。
  3. 枚举每个标签集,并为每个序列键创建游标和迭代器。
  4. 合并迭代器并将合并后的结果返回给查询执行器。

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 mSELECT foo+bar FROM m,其中 foobar 是字段。
  • 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 QUERYON “


#### 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 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) 并且 timeWHERE 子句中不受支持时,才支持按 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(时间序列索引)并且 timeWHERE 子句中不受支持时,才支持按 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 列:属于指定 databaseretention policy 的分片 ID。
  • shard_group 列:分片所属的组号。 同一分片组中的分片具有相同的 start_timeend_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(时间序列索引)并且 timeWHERE 子句中不受支持时,才支持按 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 检测到换行符时结束。 此注释类型不能跨越多行。
  • 多行注释以 /* 开头,以 */ 结尾。 此注释类型可以跨越多行。 多行注释不支持嵌套多行注释。

查询引擎内部原理

一旦您了解了语言本身,了解这些语言结构如何在查询引擎中实现也很重要。 这使您可以直观地了解结果将如何处理以及如何创建高效的查询。

查询的生命周期如下所示

  1. InfluxQL 查询字符串被标记化,然后解析为抽象语法树 (AST)。 这是查询本身的代码表示形式。

  2. AST 传递给 QueryExecutor,后者将查询定向到适当的处理程序。 例如,与元数据相关的查询由元服务执行,SELECT 语句由分片本身执行。

  3. 然后,查询引擎确定与 SELECT 语句的时间范围匹配的分片。 从这些分片中,为语句中的每个字段创建迭代器。

  4. 迭代器传递给发射器,发射器排出它们并连接结果点。 发射器的任务是将简单的时间/值点转换为返回给客户端的更复杂的结果对象。

了解迭代器

迭代器是查询引擎的核心。 它们为循环遍历一组点提供了一个简单的接口。 例如,这是一个遍历浮点的迭代器

type FloatIterator interface {
    Next() *FloatPoint
}

这些迭代器是通过 IteratorCreator 接口创建的

type IteratorCreator interface {
    CreateIterator(opt *IteratorOptions) (Iterator, error)
}

IteratorOptions 提供有关字段选择、时间范围和维度的参数,迭代器创建器可以在计划迭代器时使用这些参数。 IteratorCreator 接口在多个级别(例如 ShardsShardEngine)使用。 这允许在适用时执行优化,例如返回预先计算的 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 慢,但是对于返回原始数据点的非聚合查询,此排序保证是必需的。

  • 限制迭代器 - 此迭代器限制每个名称/标签组的点数。 这是 LIMITOFFSET 语法的实现。

  • 填充迭代器 - 如果输入迭代器中缺少点,则此迭代器会注入额外的点。 它可以提供 null 点、具有先前值的点或具有特定值的点。

  • 缓冲迭代器 - 此迭代器提供将点“取消读取”回缓冲区的功能,以便下次可以再次读取它。 这广泛用于为窗口化提供前瞻。

  • Reduce 迭代器 - 此迭代器为窗口中的每个点调用一个 reduce 函数。 当窗口完成时,将输出该窗口的所有点。 这用于简单的聚合函数,例如 COUNT()

  • Reduce Slice 迭代器 - 此迭代器首先收集窗口的所有点,然后一次将它们全部传递给 reduce 函数。 结果从迭代器返回。 这用于聚合函数,例如 DERIVATIVE()

  • 转换迭代器 - 此迭代器为来自输入迭代器的每个点调用一个转换函数。 这用于执行二进制表达式。

  • Dedupe 迭代器 - 此迭代器仅输出唯一点。 它资源密集型,因此仅用于小型查询,例如元查询语句。

调用迭代器

InfluxQL 中的函数调用在两个级别实现。 某些调用可以包装在多个层中以提高效率。 例如,COUNT() 可以在分片级别执行,然后多个 CountIterator 可以用另一个 CountIterator 包装,以计算所有分片的计数。 这些迭代器可以使用 NewCallIterator() 创建。

某些迭代器更复杂或需要在更高级别实现。 例如,DERIVATIVE() 需要先检索窗口的所有点,然后才能执行计算。 此迭代器由引擎本身创建,并且永远不会被较低级别请求创建。


此页是否对您有帮助?

感谢您的反馈!


Flux 的未来

Flux 即将进入维护模式。 您可以继续像现在这样使用它,而无需对您的代码进行任何更改。

阅读更多

InfluxDB 3 开源版本现已发布 Public Alpha

InfluxDB 3 开源版本现已可用于 alpha 测试,根据 MIT 或 Apache 2 许可获得许可。

我们正在发布两种产品作为 alpha 的一部分。

InfluxDB 3 Core 是我们的新开源产品。 它是用于时间序列和事件数据的最新数据引擎。 InfluxDB 3 Enterprise 是一个商业版本,它建立在 Core 的基础上,增加了历史查询功能、读取副本、高可用性、可伸缩性和细粒度的安全性。

有关如何入门的更多信息,请查看