Documentation

Influx 查询语言 (InfluxQL) 参考

此页面记录了 InfluxDB OSS 的早期版本。InfluxDB OSS v2 是最新的稳定版本。请参阅 InfluxDB v2 文档

简介

查找Influx查询语言(InfluxQL)的定义和详细信息,包括:

要了解更多关于InfluxQL的信息,请浏览以下主题:

InfluxQL是一个类似SQL的查询语言,用于与InfluxDB交互,并提供特定于存储和分析时间序列数据的功能。

符号

语法是使用扩展巴科斯-诺尔范式(“EBNF”)指定的。 EBNF是Go编程语言规范中使用的相同 notation,可以在这里找到。 并非巧合,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或µ微秒(1百万分之一秒)
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_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_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_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_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

创建订阅

订阅告诉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_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_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_stmt = "DROP CONTINUOUS QUERY" query_name on_clause .

示例

DROP CONTINUOUS QUERY "myquery" ON "mydb"

删除数据库

drop_database_stmt = "DROP DATABASE" db_name .

示例

DROP DATABASE "mydb"

删除度量

drop_measurement_stmt = "DROP MEASUREMENT" measurement .

示例

-- drop the cpu measurement
DROP MEASUREMENT "cpu"

删除保留策略

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_stmt = "DROP SERIES" ( from_clause | where_clause | from_clause where_clause ) .

注意:WHERE子句中不支持按时间过滤。

示例

DROP SERIES FROM "telegraf"."autogen"."cpu" WHERE cpu = 'cpu8'

删除分片

drop_shard_stmt = "DROP SHARD" ( shard_id ) .

示例

DROP SHARD 1

删除订阅

drop_subscription_stmt = "DROP SUBSCRIPTION" subscription_name "ON" db_name "." retention_policy .

示例

DROP SUBSCRIPTION "sub0" ON "mydb"."autogen"

删除用户

drop_user_stmt = "DROP USER" user_name .

示例

DROP USER "jdoe"

解释

解析并规划查询,然后打印出估计成本的摘要。

许多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

解释分析

执行指定的 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 的成本不计入。

执行时间

显示查询执行所需的时间,包括读取时间序列数据、在迭代器中进行操作,以及从迭代器中排出处理后的数据。执行时间不包括将输出序列化为JSON或其他格式所需的时间。

计划时间

显示查询计划所需的时间。 在 InfluxDB 中计划查询需要多个步骤。根据查询的复杂性,计划可能需要比执行查询更多的工作,并消耗更多的 CPU 和内存资源。例如,执行查询所需的系列键的数量会影响查询的计划速度和所需的内存。

首先,InfluxDB 确定查询的有效时间范围并选择要访问的分片(在 InfluxDB Enterprise 中,分片可能位于远程节点上)。接下来,对于每个分片和每个测量值,InfluxDB 执行以下步骤:

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

迭代器类型

EXPLAIN ANALYZE 支持以下迭代器类型:

  • create_iterator 节点表示本地 influxd 实例完成的工作──一个复杂的嵌套迭代器组合和合并,生成最终查询输出。
  • (仅限 InfluxDB Enterprise) remote_iterator 节点表示在远程机器上完成的工作。

有关迭代器的更多信息,请参见 Understanding iterators

光标类型

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 子句中引用的字段创建的条件游标。

有关游标的更多信息,请参阅 Understanding cursors

区块类型

EXPLAIN ANALYZE 分离存储块类型,并报告解码的总块数及其在磁盘上的大小(以字节为单位)。支持以下块类型:

| float | 64位 IEEE-754 浮点数 | | integer | 64位有符号整数 | | unsigned | 64位无符号整数 | | boolean | 1位,LSB 编码 | | string | UTF-8 字符串 |

有关存储块的更多信息,请参见 TSM files

授予

注意: 用户可以被授予尚不存在的数据库的权限。

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_statement = "KILL QUERY" query_id .

其中 query_id 是查询 ID,在 SHOW QUERIES 输出中显示为 qid

InfluxDB企业集群: 在集群上终止查询时,您需要指定查询ID(qid)和TCP主机(例如,myhost:8088),可在SHOW QUERIES输出中获得。

终止查询 在“


#### 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_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_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 命令有两种变体:估算和精确。估算值是使用草图计算的,适用于所有基数大小的安全默认值。精确值是直接来自 TSM(时间结构化合并树)数据的计数,但对于高基数数据运行成本很高。除非必要,使用估算变体。

当数据库启用时间序列索引(TSI)时,才能支持通过 time 进行过滤。

有关详细信息,请参阅特定的SHOW CARDINALITY命令:

显示连续查询

show_continuous_queries_stmt = "SHOW CONTINUOUS QUERIES" .

示例

-- show all continuous queries
SHOW CONTINUOUS QUERIES

显示数据库

show_databases_stmt = "SHOW DATABASES" .

示例

-- show all databases
SHOW DATABASES

显示诊断信息

显示节点信息,例如构建信息、正常运行时间、主机名、服务器配置、内存使用情况和Go运行时诊断。

有关使用 SHOW DIAGNOSTICS 命令的更多信息,请参阅 使用 SHOW DIAGNOSTICS 命令监控 InfluxDB

show_diagnostics_stmt = "SHOW DIAGNOSTICS"

显示字段键基数

估算或准确计算当前数据库的字段键集的基数,除非使用 ON 选项指定了一个数据库。

注意: ON , FROM , WITH KEY = , WHERE , GROUP BY ,以及 LIMIT/OFFSET 子句是可选的。 使用这些查询子句时,查询将退回到精确计数。 只有在启用时间序列索引(TSI)时,才支持按 time 过滤,并且 time 不支持在 WHERE 子句中。

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_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_stmt = "SHOW GRANTS FOR" user_name .

示例

-- show grants for jdoe
SHOW GRANTS FOR "jdoe"

显示测量基数

估算或精确计算当前数据库的测量集的基数,除非使用 ON 选项指定了数据库。

注意: ON , FROM , WITH KEY = , WHERE , GROUP BY , 和 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_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_stmt = "SHOW QUERIES" .

示例

-- show all currently-running queries
SHOW QUERIES
--

显示保留策略

show_retention_policies_stmt = "SHOW RETENTION POLICIES" [on_clause] .

示例

-- show all retention policies on a database
SHOW RETENTION POLICIES ON "mydb"

显示系列

show_series_stmt = "SHOW SERIES" [on_clause] [ from_clause ] [ where_clause ] [ limit_clause ] [ offset_clause ] .

示例

SHOW SERIES FROM "telegraf"."autogen"."cpu" WHERE cpu = 'cpu8'

显示系列基数

估算或精确计算当前数据库系列的基数,除非使用 ON 选项指定了数据库。

系列基数是影响RAM需求的主要因素。有关更多信息,请参见:

注意: ON , FROM , WITH KEY = , WHERE , GROUP BY , 和 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_stmt = "SHOW SHARD GROUPS" .

示例

SHOW SHARD GROUPS

显示分片

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 个节点。

显示统计信息

返回有关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

  • 对于指定的组件 (),该命令返回可用的统计信息。
  • 对于 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_stmt = "SHOW SUBSCRIPTIONS" .

示例

SHOW SUBSCRIPTIONS

显示标签键基数

估计或准确计算当前数据库中标签键集合的基数,除非使用 ON 选项指定了数据库。

注意: 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_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_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'

显示标签值基数

估算或准确计算当前数据库中指定标签键的标签键值的基数,除非使用 ON 选项指定了一个数据库。

注意: ON , FROM , WITH KEY = , WHERE , GROUP BY , 和 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_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. 抽象语法树被传递给 QueryExecutor,该组件将查询指向适当的处理程序。例如,与元数据相关的查询由元服务执行,而 SELECT 语句则由分片本身执行。

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

  4. 迭代器被传递给发射器,它会处理这些迭代器并合并结果点。发射器的工作是将简单的时间/值点转换为返回给客户端的更复杂的结果对象。

理解迭代器

迭代器是查询引擎的核心。它们提供了一个简单的接口用于遍历一组点。例如,这是一个对 Float 点的迭代器:

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)

理解游标

A 游标 通过元组 (时间, 值) 为单个系列 (测量, 标签集和字段) 标识数据。游标遍历存储为日志结构合并树的数据,并处理跨级别的去重,已删除数据的 tombstones,以及合并缓存 (预写日志)。游标按升序或降序对 (time, value) 元组进行排序。

例如,一个评估1,000个系列在3个分片上的一个字段的查询构建了至少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 点、带有前一个值的点或带有特定值的点。

  • 缓冲迭代器 - 该迭代器提供了将一个点“未读”回缓冲区的能力,以便下次可以再次读取。这在窗口处理上被广泛使用,以提供前瞻性。

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

  • 减少切片迭代器 - 该迭代器首先收集窗口中的所有点,然后一次性将它们传递给一个归约函数。结果从迭代器返回。这用于聚合函数,例如DERIVATIVE()

  • 变换迭代器 - 该迭代器对输入迭代器中的每个点调用一个变换函数。这用于执行二元表达式。

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

调用迭代器

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

一些迭代器更为复杂或者需要在更高层次上实现。 例如,DERIVATIVE() 需要首先为一个窗口检索所有点 然后再进行计算。这个迭代器是由引擎本身创建的, 并且从未要求在较低层次创建。



Flux的未来

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

阅读更多

InfluxDB 3 开源版本现已公开Alpha测试

InfluxDB 3 Open Source is now available for alpha testing, licensed under MIT or Apache 2 licensing.

我们将发布两个产品作为测试版的一部分。

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

有关如何开始的更多信息,请查看: