InfluxDB全语法指南

InfluxDB 全语法指南

InfluxDB 是一个开源的时间序列数据库,专门用于处理高写入和查询负载。以下是 InfluxDB 的主要语法和功能概述。

1. 数据库管理

创建数据库

sql 复制代码
CREATE DATABASE <database_name> [WITH [DURATION <duration>] [REPLICATION <n>] [SHARD DURATION <duration>] [NAME <retention-policy-name>]]

删除数据库

sql 复制代码
DROP DATABASE <database_name>

显示数据库

sql 复制代码
SHOW DATABASES

2. 保留策略(Retention Policy)管理

创建保留策略

sql 复制代码
CREATE RETENTION POLICY <rp_name> ON <database_name> DURATION <duration> REPLICATION <n> [SHARD DURATION <duration>] [DEFAULT]

修改保留策略

sql 复制代码
ALTER RETENTION POLICY <rp_name> ON <database_name> DURATION <duration> REPLICATION <n> [SHARD DURATION <duration>] [DEFAULT]

删除保留策略

sql 复制代码
DROP RETENTION POLICY <rp_name> ON <database_name>

显示保留策略

sql 复制代码
SHOW RETENTION POLICIES [ON <database_name>]

3. 数据写入

行协议(Line Protocol)格式

xml 复制代码
<measurement>[,<tag_key>=<tag_value>[,<tag_key>=<tag_value>]] <field_key>=<field_value>[,<field_key>=<field_value>] [<timestamp>]

示例写入

sql 复制代码
INSERT cpu,host=serverA,region=us_west value=0.64
INSERT temperature,machine=unit42,type=assembly external=25,internal=37 1434055562000000000

4. 数据查询(SELECT)

基本查询

sql 复制代码
SELECT <field_key>[,<field_key>,<tag_key>] FROM <measurement_name>[,<measurement_name>]

条件查询

sql 复制代码
SELECT * FROM "cpu_load" WHERE "region" = 'us-west' AND time > now() - 1h

分组查询

sql 复制代码
SELECT MEAN("value") FROM "cpu" GROUP BY "host", time(1h) fill(0)

聚合函数

sql 复制代码
SELECT COUNT("value") FROM "cpu"
SELECT MEAN("value") FROM "cpu" WHERE time > now() - 1h GROUP BY time(10m)

5. 连续查询(Continuous Queries)

创建连续查询

sql 复制代码
CREATE CONTINUOUS QUERY <cq_name> ON <database_name> 
BEGIN
  SELECT <function[s]> INTO <destination_measurement> FROM <measurement> [WHERE <stuff>] GROUP BY time(<interval>)[,<tag_key[s]>]
END

删除连续查询

sql 复制代码
DROP CONTINUOUS QUERY <cq_name> ON <database_name>

显示连续查询

sql 复制代码
SHOW CONTINUOUS QUERIES

6. 用户管理

创建用户

sql 复制代码
CREATE USER <username> WITH PASSWORD '<password>' [WITH ALL PRIVILEGES]

授予权限

sql 复制代码
GRANT ALL PRIVILEGES TO <username>
GRANT [READ|WRITE|ALL] ON <database_name> TO <username>

撤销权限

sql 复制代码
REVOKE ALL PRIVILEGES FROM <username>
REVOKE [READ|WRITE|ALL] ON <database_name> FROM <username>

删除用户

sql 复制代码
DROP USER <username>

显示用户

sql 复制代码
SHOW USERS

7. 特殊查询

SHOW 系列

sql 复制代码
SHOW SERIES [ON <database_name>] [FROM <measurement_name>] [WHERE <tag_key> <operator> [ '<tag_value>' | <regular_expression>]] [LIMIT <N>] [OFFSET <N>]

SHOW 测量值

sql 复制代码
SHOW MEASUREMENTS [ON <database_name>] [WITH MEASUREMENT <operator> ['<measurement_name>' | <regular_expression>]] [WHERE <tag_key> <operator> ['<tag_value>' | <regular_expression>]] [LIMIT <N>] [OFFSET <N>]

SHOW 标签键

sql 复制代码
SHOW TAG KEYS [ON <database_name>] [FROM <measurement_name>] [WHERE <tag_key> <operator> ['<tag_value>' | <regular_expression>]] [LIMIT <N>] [OFFSET <N>]

SHOW 标签值

sql 复制代码
SHOW TAG VALUES [ON <database_name>] [FROM <measurement_name>] WITH KEY [ [<operator> "<tag_key>" | <regular_expression>] | [IN ("<tag_key1>","<tag_key2")]] [WHERE <tag_key> <operator> ['<tag_value>' | <regular_expression>]] [LIMIT <N>] [OFFSET <N>]

SHOW 字段键

sql 复制代码
SHOW FIELD KEYS [ON <database_name>] [FROM <measurement_name>]

8. 时间语法

InfluxDB 支持多种时间格式:

  • 相对时间:

    sql 复制代码
    SELECT "value" FROM "cpu" WHERE time > now() - 1h
  • 绝对时间(RFC3339):

    sql 复制代码
    SELECT "value" FROM "cpu" WHERE time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T12:00:00Z'
  • 时间戳(epoch):

    sql 复制代码
    SELECT "value" FROM "cpu" WHERE time >= 1439563077s AND time <= 1439563080s

9. 函数

聚合函数

  • COUNT()
  • DISTINCT()
  • INTEGRAL()
  • MEAN()
  • MEDIAN()
  • MODE()
  • SPREAD()
  • STDDEV()
  • SUM()

选择函数

  • BOTTOM()
  • FIRST()
  • LAST()
  • MAX()
  • MIN()
  • PERCENTILE()
  • SAMPLE()
  • TOP()

转换函数

  • DERIVATIVE()
  • DIFFERENCE()
  • ELAPSED()
  • NON_NEGATIVE_DERIVATIVE()

预测函数

  • HOLT_WINTERS()

10. 数学运算

InfluxQL 支持基本数学运算:

sql 复制代码
SELECT ("field1" + "field2") / "field3" FROM "measurement"

11. 正则表达式

在 WHERE 子句中使用正则表达式:

sql 复制代码
SELECT * FROM /.*/ LIMIT 1
SELECT * FROM "cpu" WHERE "host" =~ /server[1-5]/
SELECT * FROM "cpu" WHERE "host" !~ /server[1-5]/

12. 子查询

sql 复制代码
SELECT MEAN("derivative") FROM (SELECT DERIVATIVE(MEAN("value")) FROM "cpu" GROUP BY "host", time(1h)) GROUP BY time(1h)

13. 数据删除

删除序列

sql 复制代码
DROP SERIES FROM <measurement_name> WHERE <tag_key>='<tag_value>'

删除测量值

sql 复制代码
DROP MEASUREMENT <measurement_name>

删除数据点

sql 复制代码
DELETE FROM <measurement_name> WHERE <tag_key>='<tag_value>' AND time < '2015-01-01'

14. InfluxDB 2.x 的 Flux 语法

InfluxDB 2.x 引入了 Flux 查询语言:

基本查询

flux 复制代码
from(bucket: "example-bucket")
  |> range(start: -1h)
  |> filter(fn: (r) => r._measurement == "cpu" and r._field == "usage_system")

聚合

flux 复制代码
from(bucket: "example-bucket")
  |> range(start: -1h)
  |> filter(fn: (r) => r._measurement == "cpu")
  |> mean()

分组

flux 复制代码
from(bucket: "example-bucket")
  |> range(start: -1h)
  |> filter(fn: (r) => r._measurement == "cpu")
  |> group(columns: ["host"])
  |> mean()

数学运算

flux 复制代码
from(bucket: "example-bucket")
  |> range(start: -1h)
  |> filter(fn: (r) => r._measurement == "cpu")
  |> map(fn: (r) => ({ r with _value: r._value * 100 }))

连接数据

flux 复制代码
cpu = from(bucket: "example-bucket")
  |> range(start: -1h)
  |> filter(fn: (r) => r._measurement == "cpu")

mem = from(bucket: "example-bucket")
  |> range(start: -1h)
  |> filter(fn: (r) => r._measurement == "mem")

join(tables: {cpu: cpu, mem: mem}, on: ["_time", "host"])

以上是 InfluxDB 的主要语法概述。根据您使用的版本(1.x 或 2.x),语法可能有所不同。1.x 主要使用 InfluxQL,而 2.x 引入了 Flux 作为主要查询语言。

相关推荐
CYX_cheng14 分钟前
sqlsugar sqlite
数据库·sqlite
茉莉玫瑰花茶1 小时前
Redis - Bitmap 类型
数据库·redis·缓存
IvorySQL1 小时前
聚焦六大功能:PostgreSQL 18 新特性深度解析
数据库·postgresql·开源
饿了我会自己捡代码吃1 小时前
【MySQL】使用C/C++链接mysql数据库
c语言·数据库·mysql
gb42152871 小时前
DDD 与传统三层架构的详细对比
数据库·架构
不是三毛没有半2 小时前
Mysql 简单的语句回顾
数据库·mysql·oracle
abcefg_h2 小时前
MySQL查询详细介绍
数据库·mysql
whn19773 小时前
批量获取oracle的AWR报告方法
数据库·oracle
小旺不正经4 小时前
数据库表实现账号池管理
数据库·后端·算法