文档文档

InfluxDB 行协议参考

查看等效的 InfluxDB v2 文档: 行协议.

InfluxDB 行协议是一种基于文本的格式,用于将数据点写入 InfluxDB。

行协议语法

<measurement>[,<tag_key>=<tag_value>[,<tag_key>=<tag_value>]] <field_key>=<field_value>[,<field_key>=<field_value>] [<timestamp>]

行协议接受换行符 \n,并且对空白字符敏感。

行协议不支持在标签值或字段值中使用换行符 \n

语法描述

InfluxDB 行协议通知 InfluxDB 数据的度量、标签集、字段集和时间戳。

元素可选/必需描述类型
(有关更多信息,请参阅 数据类型)
度量必需度量名称。InfluxDB 每个点接受一个度量。字符串
标签集可选点的所有标签键值对。标签键标签值 都是字符串。
字段集必需。点必须有至少一个字段。点的所有字段键值对。字段键 是字符串。 字段值 可以是浮点数、整数、字符串或布尔值。
时间戳可选。如果未包含时间戳,InfluxDB 使用服务器的本地纳秒 UTC 时间戳。数据点的时间戳。InfluxDB 每个点接受一个时间戳。Unix 纳秒时间戳。使用 InfluxDB API 指定替代精度。

性能提示

  • 在将数据发送到 InfluxDB 之前,按标签键排序,以匹配来自 Go bytes.Compare 函数 的结果。
  • 为了显著提高压缩,请使用可能的最粗精度 精度 为时间戳。
  • 使用网络时间协议 (NTP) 在主机之间同步时间。InfluxDB 使用主机的本地 UTC 时间来分配数据的时间戳。如果主机的时钟没有与 NTP 同步,则主机写入 InfluxDB 的数据可能具有不准确的时间戳。

数据类型

数据类型元素描述
浮点数字段值默认数值类型。IEEE-754 64 位浮点数(除了 NaN 或 +/- Inf)。示例:11.01.e+781.E+78
整数字段值有符号 64 位整数(-9223372036854775808 到 9223372036854775807)。指定整数时,在数字后面加上 i。示例:1i
字符串度量、标签键、标签值、字段键、字段值长度限制 64KB。
布尔值字段值存储 TRUE 或 FALSE 值。

TRUE 写入语法:[t, T, true, True, TRUE]

FALSE 写入语法:[f, F, false, False, FALSE]
时间戳时间戳自 1970 年 1 月 1 日 UTC 以来的一段时间的 Unix 时间。使用 InfluxDB API 指定替代精度。最小有效时间戳是 -92233720368547758061677-09-21T00:12:43.145224194Z。最大有效时间戳是 92233720368547758062262-04-11T23:47:16.854775806Z

写入和查询的布尔语法

可接受的布尔语法在数据写入和数据查询中有所不同。更多信息,请参阅常见问题解答

字段类型差异

在度量中,一个字段的类型不能在分片中不同,但可以在分片之间不同。

要了解字段值类型差异如何影响SELECT *查询,请参阅InfluxDB如何处理跨分片的字段类型差异?

示例

将字段值-1.234456e+78作为浮点数写入InfluxDB

> INSERT mymeas value=-1.234456e+78

InfluxDB支持科学记数法指定的字段值。

将字段值1.0作为浮点数写入InfluxDB

> INSERT mymeas value=1.0

将字段值1作为浮点数写入InfluxDB

> INSERT mymeas value=1

将字段值1作为整数写入InfluxDB

> INSERT mymeas value=1i

将字段值stringing along作为字符串写入InfluxDB

> INSERT mymeas value="stringing along"

始终用双引号引用字符串字段值。更多关于引号的内容如下

将字段值true作为布尔值写入InfluxDB

> INSERT mymeas value=true

不要引用布尔字段值。以下语句将true作为字符串字段值写入InfluxDB

> INSERT mymeas value="true"

尝试将字符串写入先前接受浮点数的字段

如果浮点数和字符串的戳存储在同一个分片

> INSERT mymeas value=3 1465934559000000000
> INSERT mymeas value="stringing along" 1465934559000000001
ERR: {"error":"field type conflict: input field \"value\" on measurement \"mymeas\" is type string, already exists as type float"}

如果浮点数和字符串的戳没有存储在同一个分片

> INSERT mymeas value=3 1465934559000000000
> INSERT mymeas value="stringing along" 1466625759000000000
>

引号、特殊字符和额外命名指南

引号

元素双引号单引号
时间戳从不从不
度量、标签键、标签值、字段键从不*从不*
字段值用双引号引用字符串字段值。不要用双引号引用浮点数、整数或布尔值。从不

* InfluxDB行协议允许用户用双引号或单引号引用度量名、标签键、标签值和字段键。然而,它将假定双引号或单引号是名称、键或值的一部分。这可能会使查询语法复杂化(见下面的示例)。

示例

无效行协议 - 引号括起来的时间戳
> INSERT mymeas value=9 "1466625759000000000"
ERR: {"error":"unable to parse 'mymeas value=9 \"1466625759000000000\"': bad timestamp"}

双引号(或单引号)括起来的时间戳会引发bad timestamp错误。

语义错误 - 引号括起来的布尔字段值
> INSERT mymeas value="true"
> SHOW FIELD KEYS FROM "mymeas"
name: mymeas
------------
fieldKey	 fieldType
value		   string

InfluxDB假定所有引号括起来的字段值都是字符串。

语义错误 - 引号括起来的度量名
> INSERT "mymeas" value=200
> SHOW MEASUREMENTS
name: measurements
------------------
name
"mymeas"
> SELECT * FROM mymeas
> SELECT * FROM "mymeas"
> SELECT * FROM "\"mymeas\""
name: "mymeas"
--------------
time				                        value
2016-06-14T20:36:21.836131014Z	 200

如果您在行协议中用双引号括起来度量,对该度量的任何查询都需要在FROM子句中同时使用双引号和转义的双引号(\)。

特殊字符

您必须使用反斜杠字符\来转义以下特殊字符

  • 在字符串字段值中,您必须转义

    • 双引号:\"转义双引号。

    • 反斜杠字符:如果您使用多个反斜杠,它们必须被转义。InfluxDB解释反斜杠如下

      • \\\被解释为\
      • \\\\\\\被解释为\\
      • \\\\\\\\\\\被解释为\\\,依此类推
  • 在标签键、标签值和字段键中,您必须转义

    • 逗号
    • 等号
    • 空格

例如,\,转义逗号。

  • 在度量中,您必须转义
    • 逗号
    • 空格

您不需要转义其他特殊字符。

示例

写入包含特殊字符的点
> INSERT "measurement\ with\ quo⚡️es\ and\ emoji",tag\ key\ with\ sp🚀ces=tag\,value\,with"commas" field_k\ey="string field value, only \" need be esc🍭ped"

系统写入一个度量是"measurement with quo⚡️es and emoji",标签键是tag key with sp🚀ces,标签值是tag,value,with"commas",字段键是field_k\ey,字段值是string field value, only " need be esc🍭ped的点。

额外命名指南

行首的#是行协议中的有效注释字符。InfluxDB会忽略直到下一个换行符\n的所有后续字符。

度量名称、标签键、标签值、字段键和字段值是区分大小写的。

InfluxDB行协议接受InfluxQL关键字作为标识符名称。通常,我们建议在您的模式中避免使用InfluxQL关键字,因为它在查询数据时可能导致混淆

注意:避免使用保留键_field_measurement。如果这些键作为标签或字段键包含在内,则相关的点将被丢弃。

关键字time是一个特殊情况。time可以是连续查询名称、数据库名称、度量名称、保留策略名称、订阅名称和用户名称。在这些情况下,time在查询中不需要双引号。time不能作为字段键标签键;InfluxDB拒绝将time作为字段键或标签键的写入,并返回错误。有关更多信息,请参阅常见问题解答

InfluxDB行协议实践

要了解如何将行协议写入数据库,请参阅工具

重复点

一个点由度量名称、标签集、字段集和时间戳唯一标识。

如果您将一个点写入具有与现有点匹配的时间戳的序列,则字段集成为旧字段集和新字段集的并集,冲突倾向于新字段集。

有关此行为的完整示例以及如何避免它,请参阅InfluxDB如何处理重复点?

重复键

如果您在度量中有一个具有相同名称的标签键和字段键,则其中一个键将在查询结果中返回时附加_1(并在Chronograf的列标题中)。例如,locationlocation_1。要查询重复键,请删除_1并在您的查询中使用InfluxQL的::tag::field语法,例如

  SELECT "location"::tag, "location"::field FROM "database_name"."retention_policy"."measurement"

这个页面有用吗?

感谢您的反馈!


Flux的未来

Flux将进入维护模式。您可以继续按当前方式使用它,而无需对代码进行任何更改。

了解更多

InfluxDB v3增强功能和InfluxDB Clustered现已正式发布

新功能,包括更快的查询性能和管理工具,推动了InfluxDB v3产品线的进步。InfluxDB Clustered现已正式发布。

InfluxDB v3性能和功能

InfluxDB v3产品线在查询性能方面进行了显著增强,并提供了新的管理工具。这些增强包括一个操作仪表板来监控您的InfluxDB集群的健康状况,InfluxDB Cloud Dedicated中的单点登录(SSO)支持,以及用于令牌和数据库的新管理API。

了解v3增强功能


InfluxDB Clustered正式发布

InfluxDB Clustered现已正式发布,并为您在自行管理的堆栈中提供了InfluxDB v3的功能。

与我们谈论InfluxDB Clustered