Influxdb行协议

行协议

InfluxDB的行协议是一种写入数据点到InfluxDB的文本格式。必须要是这样的格式的数据点才能被Influxdb解析和写入成功,当然除非你使用一些其他服务插件。

语法

一行Line Protocol表示InfluxDB中的一个数据点。它向InfluxDB通知点的measurement,tag set,field set和timestamp。以下代码块显示了行协议的示例,并将其分解为其各个组件

weather,location=us-midwest temperature=82 1465839830100400200
  |    -------------------- --------------  |
  |             |             |             |
  |             |             |             |
+-----------+--------+-+---------+-+---------+
|measurement|,tag_set| |field_set| |timestamp|
+-----------+--------+-+---------+-+---------+

measurement

你想要写入数据的measurement,这在行协议中是必需的,例如这里的measurement是`weather`

相当于数据库的table概念

Tag set

你想要数据点中包含的tag,tag在行协议里是可选的。注意measurement和tag set是用不带空格的逗号分开的。

用不带空格的`=`来分割一组tag的键值:

<tag_key>=<tag_value>

多组tag直接用不带空格的逗号分开:

<tag_key>=<tag_value>,<tag_key>=<tag_value>

上面的tag set由一个tag组成`location=us-midwest`,现在加另一个tag(`season=summer`),就变成了这样:

weather,location=us-midwest,season=summer temperature=82 1465839830100400200

补充

分离measurement和field set,或者如果您使用数据点包含tag set,则使用空格分隔tag set和field set。行协议中空格是必需的。

没有tag set的有效行协议:

weather temperature=82 1465839830100400200

Field set

每个数据点在行协议中至少需要一个field。使用无空格的`=`分隔field的键值对:

<field_key>=<field_value>

多组field直接用不带空格的逗号分开:

<field_key>=<field_value>,<field_key>=<field_value>

上面的field set由一个field组成`temperature=82`,现在加另一个field(`bug_concentration=98`),就变成了这样:

weather,location=us-midwest temperature=82,bug_concentration=98 1465839830100400200

Timestamp

数据点的时间戳记以纳秒精度Unix时间。行协议中的时间戳是可选的。 如果没有为数据点指定时间戳,InfluxDB会使用服务器的本地纳秒时间戳。

在这个例子中,时间戳记是`1465839830100400200`(这就是RFC6393格式的`2016-06-13T17:43:50.1004002Z`)。下面的行协议是相同的数据点,但没有时间戳。当InfluxDB将其写入数据库时,它将使用您的服务器的本地时间戳而不是`2016-06-13T17:43:50.1004002Z`。

数据类型

本节介绍行协议的主要组件的数据类型:measurement,tag keys,tag values,field keys,field values和timestamp。其中measurement,tag keys,tag values,field keys始终是字符串。

Field value可以是整数、浮点数、字符串和布尔值:

  1. 浮点数 —— 默认是浮点数,InfluxDB假定收到的所有field value都是浮点数
  2. 整数 —— 添加一个i在field之后,告诉InfluxDB以整数类型存储
  3. 字符串 —— 双引号把字段值引起来表示字符串
  4. 布尔型 —— 表示TRUE可以用t,T,true,True,TRUE;表示FALSE可以用f,F,false,False或者 FALSE

引号

  1. 时间戳不要双或单引号
  2. field value不要单引号,即时是字符串类型
  3. measurement名称,tag keys,tag value和field key不用单双引号
  4. 当field value是整数,浮点数或是布尔型时,不要使用双引号,不然InfluxDB会假定值是字符串类型
  5. 当Field value是字符串时,使用双引号

特殊字符和关键字

特殊字符

  1. 对于tag key,tag value和field key,始终使用反斜杠字符\来进行转义
  2. 对于measurement,也要反斜杠\来转义

关键字

关键字time是特殊情况。time可以是cq的名称,数据库名称,measurement名称,RP名称,subscription名称和用户名 在这种情况下,查询time不需要双引号。time不能是field key或tag key; 当把time作为field key或是tag key写入时,InfluxDB会拒绝并返回错误

写数据到InfluxDB

HTTP API

# InfluxDB 1.x
curl -i -XPOST "http://localhost:8086/write?db=science_is_cool" --data-binary 'weather,location=us-midwest temperature=82 1465839830100400200'

# InfluxDB 2.x
curl --request POST \
"http://localhost:8086/api/v2/write?org=yn&bucket=science_is_cool&precision=ns" \
  --header "Authorization: Token Z_vCTA9N51QP47ES-KFsm3eq0kTKLsba2jRfBHzFIfy0a_D3E4Mg2t-0aKsJ9WDyKX50-9Gn02GjLH5GgunAMQ==" \
  --header "Content-Type: text/plain; charset=utf-8" \
  --header "Accept: application/json" \
  --data-binary 'weather,location=us-midwest temperature=82 1465839830100400200'

 1465839830100400200这个时间戳需要修改,可能会违法时间戳策略。

influx bucket list -o yn,查看桶的策略。

CLI

# InfluxDB 1.x
INSERT weather,location=us-midwest temperature=82 1465839830100400200

# InfluxDB 2.x
influx write --bucket science_is_cool "weather,location=us-midwest temperature=82 1465839830100400200"

重复数据

一个点由measurement名称,tag set和timestamp唯一标识。如果您提交具有相同measurement,tag set和timestamp,但具有不同field set的行协议,则field set将变为旧field set与新field set的合并,并且如果有任何冲突以新field set为准。

  • 21
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值