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

相关推荐
阿杰学AI12 分钟前
AI核心知识129—大语言模型之 向量数据库(简洁且通俗易懂版)
数据库·人工智能·ai·语言模型·自然语言处理·向量数据库·vector database
SPC的存折14 分钟前
D在 Alpine 容器中手动搭建 Discuz 全攻略(包含镜像一键部署脚本,可直接用)
linux·数据库·mysql·缓存
李兆龙的博客20 分钟前
从一到无穷大 #67 大查询根因分析 - 从 PinSQL 到 RCRank
数据库·时序数据库
AgCl2337 分钟前
MYSQL-6-函数与约束-3/17
android·数据库·mysql
junqiduhang44 分钟前
Win11 MySQL 8.0 安装八步走
数据库·mysql
zhangchaoxies1 小时前
golang如何使用SQLx原生SQL查询_golang SQLx原生SQL查询使用方法
jvm·数据库·python
m0_743623921 小时前
mysql如何优化InnoDB缓冲池大小_mysql缓冲池内存调优
jvm·数据库·python
孟意昶1 小时前
Doris专题31-SQL手册-基础元素
大数据·数据库·数据仓库·分布式·sql·知识图谱·doris
m0_617881421 小时前
如何操作 XML 数据_XMLTYPE 与 EXTRACT 函数解析节点
jvm·数据库·python
qq_334563551 小时前
golang如何实现SSTable持久化_golang SSTable持久化实现要点
jvm·数据库·python