首页

InfluxDB 线路协议参考

InfluxDB line protocol 是一种基于文本的格式,用于将points 写入InfluxDB

line protocol语法

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

Line protocol 接受换行符\n ,并且区分空格

Note Line protocol 不支持tag value 或filed value 中的换行符。

语法描述

InfluxDB line protocol 将数据的measurement,tag set,field set和timestamp 通知给Influxdb.

组件 可选/必须 描述 类型
(有关更多信息,请参见数据类型)。
Measurement 需要 测量名称. InfluxDB 每一个point 接受一次 measurement 字符串
Tag set 可选 该point对应一个 tag key-value 标记键值对. Tag keystag values 都是字符串
Field set 需要 Points 点必须至少具有一个字段. 该pointl 所有 key-value 键值对. Field keys字段键 是字符串. Field values字段值 可以使浮点数, 整数,字符串,或者 Booleans.
Timestamp 可选. 如果时间戳不包含在该point中,Influxdb数据库将使用服务器的本地纳秒时间 (以世界协调为单位) 数据point. Unix 纳秒时间戳. 使用Influxdb数据库应用API接口替代精度

性能提示:

  • 在将数据发送到InfluxDB之前,请按tag keys 排序,以匹配 [Go字节.Compare 函数](http://golang . org/pkg/bytes/# Compare)
  • 为了显著提高压缩性能,请尽可能使用最粗略的时间戳[precision](/influx db/v 1.8/tools/API/# write-http-endpoint).
  • 使用网络时间协议(NTP)来同步主机之间的时间。Influxdb使用主机的本地时间(以世界协调时表示)为数据分配时间戳。如果主机的时钟与NTP不同步,主机写入InfluxDB的数据可能会有不准确的时间戳。

Data types

数据类型 元素 描述
Float Field values(字段值) 默认数字类型。IEEE-754 64位浮点数(NaN或+/- Inf除外)。例子: 1 ', 1.0 ‘, 1.e+78 ', 1。E+78 `。
Integer Field values(字段值) 有符号64位整数(-9223372036854775808至9223372036854775807)。请指定一个在数字后面带有“I”的整数。示例:` 1i
String Measurements, tag keys, tag values, field keys, field values 长度限制64KB.
Boolean Field values 存储TRUE或FASE值.

正确的写入语法:[t, T, true, True, TRUE].

伪写语法:[f, F, false, False, FALSE]
Timestamp Timestamps Unix 纳秒级时间戳. 使用 InfluxDB API.指定替代精度,最小有效时间戳为-92233720368547758061677-09-21T00:12:43.145224194Z. 最大有效时间戳为 92233720368547758062262-04-11T23:47:16.854775806Z`.

用于写入和查询的boolean语法

数据写入和数据查询可接受 Boolean 语法不同, 有关更多信息,请参考常见问题.

字段类型差异

在measurement中, 一个 field’s type 在 shard不能不同, 但在shards可以不同

要了解field value 类型差异如何影响“select *”查询, 请参考InfluxDB 如何处理shards 之间的 field 类型差异?.

例子

将field value -1.234456e+78作为浮点数写入 InfluxDB

> INSERT mymeas value=-1.234456e+78

InfluxDB 支持科学计数法指定的field value.

将field value 1.0 作为浮点数写入 InfluxDB

> INSERT mymeas value=1.0

将field value 1作为浮点数写入 InfluxDB

> INSERT mymeas value=1

将field value 1作为浮点数写入 InfluxDB

> INSERT mymeas value=1i

将filed value stringing along 作为字符串写入 InfluxDB

> INSERT mymeas value="stringing along"

始终用双引号将字符串 field value引起来,更多关于引用如下 below.

将filed value true作为boolean写入influxdb

> INSERT mymeas value=true

不要引用以下语句将true字符串field value 写入InfluxDB:

> INSERT mymeas value="true"

尝试将字符串写入先前接受的浮点型field

如果float和string上的时间戳记存储在同一shards中:

> 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"}

如果浮点数和字符串上的时间戳没有存储在同一个shards中

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

引用、特殊字符和其他命名准则

元素 双引号 单引号
Timestamp 从不 从不
Measurements, tag keys, tag values, field keys 从不* 从不r*
Field values 双引号字符串字段值,不要用引号引上浮点数,整数或者Booleans 从不

* InfluxDB line protocol 允许用户使用双引号和单引号measurement名称,tag keys,tag values和field key。但是,它将假定双引号或单引号是名称,key 或values的一部分。这会使查询语法复杂化(请参见下面的示例)

例子

无效的line protocol-双引号时间戳
> INSERT mymeas value=9 "1466625759000000000"
ERR: {"error":"unable to parse 'mymeas value=9 \"1466625759000000000\"': bad timestamp"}

双重引用(或单引号)时间戳会产生bad time stamp错误.

语义错误 - 双引号表示Boolean
> INSERT mymeas value="true"
> SHOW FIELD KEYS FROM "mymeas"
name: mymeas
------------
fieldKey	 fieldType
value		   string

InfluxDB 假设所有双引号field values都是字符串

Semantic error - Double quote a measurement name
> 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

如果您在line protocol中重复引用measurement值,对此有任何疑问 measurement 要求在 FROM子句

特殊字符

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

  • 在字符串field value中,必须转义:
    • 双引号
    • 反斜杠字符

例如,\ “转义双引号。

反斜杠上的注释:

  • 如果使用多个反斜杠,它们必须被转义。内流按如下方式解释反斜杠:

    • \\\ 解释为 \
    • \\\\\\\解释为 \\
    • \\\\\\\\\\\ 解释为 \\\, 依次类推
  • 在tag key ,tag values和field key中,必须转义

    • 逗号
    • 等号
    • 空格

例如,,转义逗号。

  • 在测量中,您必须转义:
    • commas
    • spaces

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

例子

用特殊字符写Point
> 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 为tag key with sp🚀ces,tag values为tag,value,with"commas",field key 为field_key,field value为string field value, only " need be esc🍭ped

附加命名准则

#行的开头是line protocol的有效注释字符。InfluxDB将忽略所有后续字符,直到下一个换行符为止\n。

measurement 名称,tag keys,tag values,field key 和field values区分大小写。

InfluxDB line protocol接受InfluxQL 关键字标识符 名称.通过, 我们建议避免使用 InfluxQL 关键字, 因为它可能在查询数据时引起混乱 .

注意:避免使用保留键_field_measurement。如果将这些key作为标记或filed key 包括在内,则关联的point 将被丢弃。

关键字time是一种特殊情况。time可以是continuous query 名称,数据库名称,measurement name,retention policy name,,subscription 名称,和user 名称。在这种情况下,time查询中不需要双引号。 time不能是field keytag key; InfluxDB拒绝使用time作为field key 或tag key的写入,否则返回错误。有关更多信息,请参考常见问题

InfluxDB line protocol 实践

要了解如何将line protocol 写入数据库,请参阅工具.。

重复 points

Point由measurement 名称、tag set、filed get和timestamp组成的唯一标识

如果您将一个point 写入到一个具有与现有point 匹配的时间戳的序列中,则该field set 将成为新旧field get 的集合,而冲突则有利于新字field set 。

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

重复 keys

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

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

InfluxDB OSS 2.0 release candidate

InfluxDB OSS v2.0.rc includes breaking changes that require a manual upgrade from all alpha and beta versions. For information, see:

Upgrade to InfluxDB OSS v2.0.rc