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

相关推荐
q***46522 小时前
Win10下安装 Redis
数据库·redis·缓存
p***92483 小时前
深入理解与实战SQL IFNULL()函数
数据库·sql·oracle
q***81645 小时前
MySQL:数据查询-limit
数据库·mysql
p***92485 小时前
DBeaver连接本地MySQL、创建数据库表的基础操作
数据库·mysql
JIngJaneIL7 小时前
社区互助|社区交易|基于springboot+vue的社区互助交易系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·社区互助
晚风吹人醒.7 小时前
缓存中间件Redis安装及功能演示、企业案例
linux·数据库·redis·ubuntu·缓存·中间件
Y***98517 小时前
DVWA靶场通关——SQL Injection篇
数据库·sql
Yawesh_best7 小时前
告别系统壁垒!WSL+cpolar 让跨平台开发效率翻倍
运维·服务器·数据库·笔记·web安全
蒋士峰DBA修行之路7 小时前
实验二十八 SQL PATCH调优
数据库·sql·gaussdb
I***t7168 小时前
一条sql 在MySQL中是如何执行的
数据库·sql·mysql