文档

InfluxDB行协议参考

本页面记录了InfluxDB OSS的早期版本。 InfluxDB OSS v2 是最新稳定版本。 查看等效的 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]
时间戳时间戳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子句中同时使用双引号和转义的双引号(\)。

特殊字符

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

  • 在字符串字段值中,您必须转义
    • 双引号
    • 反斜杠字符

例如,\"转义双引号。

关于反斜杠的说明

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

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

    • 逗号
    • 等号
    • 空格

例如,\, 转义一个逗号。

  • 在测量值中,您必须进行转义
    • 逗号
    • 空格

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

示例

使用特殊字符书写一个点
> 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"

系统在测量值为 "带有引号和表情符号的测量值",标签键为 带有空格的标签键,标签值为 带有逗号的标签值,字段键为 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集群版现已正式发布

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

InfluxDB v3性能和功能

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

了解新的v3增强功能


InfluxDB集群版正式发布

InfluxDB集群版现已正式发布,并为您在自管理堆栈中提供了InfluxDB v3的力量。

与我们讨论InfluxDB集群版