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 作为主要查询语言。

相关推荐
APItesterCris2 分钟前
高并发场景下的挑战:1688 商品 API 的流量控制、缓存策略与异步处理方案
大数据·开发语言·数据库·缓存
·云扬·11 分钟前
InnoDB锁监控与排查:从基础到实战
数据库·oracle
代码扳手12 分钟前
Go 微服务数据库实现全解析:读写分离、缓存防护与生产级优化实战
数据库·后端·go
shoubepatien12 分钟前
JavaWeb_Web基础
java·开发语言·前端·数据库·intellij-idea
多云的夏天17 分钟前
SpringBoot3+Vue3基础框架(1)-springboot+对接数据库表登录
数据库·spring boot·后端
cncdns-james17 分钟前
SAP Hana Studio备份生产机数据库——【认识SAP HANA Studio篇】
数据库·sap·sap hana studio
计算机毕设VX:Fegn089525 分钟前
计算机毕业设计|基于springboot + vue旅游信息推荐系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·课程设计·旅游
程序员阿鹏26 分钟前
MySQL中给字段添加唯一约束的方式有哪些?
android·数据库·mysql
前端之虎陈随易38 分钟前
PostgreSQL v18发布,新增AIO uuidv7 OAuth等功能
数据库·postgresql
Billow_lamb2 小时前
redis 中 redisTemplate 的所有操作与函数
数据库·redis·缓存