influxdb java api使用_InfluxDB使用HTTP的API查询数据
仅供学习,转载请注明出处
参考官方开源文档
使用HTTP的API查询数据
HTTP API是在InfluxDB中查询数据的主要方法(有关查询数据库的其他方法,请参阅命令行界面和客户端库)。注意:以下示例使用curl命令行工具,该工具使用URL传输数据。学习的基础知识curl与HTTP脚本指南。
API查询语句
查询语句如下:
curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=testdb" --data-urlencode "q=SELECT \"value\" FROM \"cpu_load_short\" WHERE \"region\"='us-west'"
在前面的篇章中,我已经创建了testdb数据库,以及插入了数据。
首先查看一下当前InfluxDB中的数据,如下:> show databases
name: databases
name
----
_internal
mydb
testdb
>
> use testdb
Using database testdb
>
> show measurements
name: measurements
name
----
cpu_load_short
tobeornottobe
>
> select * from cpu_load_short
name: cpu_load_short
time direction host region value
---- --------- ---- ------ -----1422568543702900257 in server01 us-west 21422568543702900257 server02 us-west 0.551434055562000000000 server01 us-west 0.641546849598178339889 server02 0.671546850175491084332 server02 0.671546850460880063366 server02 0.67>
> select * from cpu_load_short where region = 'us-west'name: cpu_load_short
time direction host region value
---- --------- ---- ------ -----1422568543702900257 in server01 us-west 21422568543702900257 server02 us-west 0.551434055562000000000 server01 us-west 0.64>下面使用API请求查询如下:[root@server81 ~]# curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=testdb" --data-urlencode "q=SELECT \"value\" FROM \"cpu_load_short\" WHERE \"region\"='us-west'"{ "results": [
{ "statement_id": 0, "series": [
{ "name": "cpu_load_short", "columns": [ "time", "value"
], "values": [
[ "2015-01-29T21:55:43.702900257Z", 2
],
[ "2015-01-29T21:55:43.702900257Z", 0.55
],
[ "2015-06-11T20:46:02Z", 0.64
]
]
}
]
}
]
}
[root@server81 ~]#
可以从上面看出,可以正确查询出条件为region = 'us-west' 的三条数据。InfluxDB返回数据的格式是JSON格式。查询结果显示在"results"数组中。如果发生错误,InfluxDB会设置一个"error"带有错误解释。
例如查询region = 'us-south' 这个在数据中是没有的。下面执行看看:[root@server81 ~]# curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=testdb" --data-urlencode "q=SELECT \"value\" FROM \"cpu_load_short\" WHERE \"region\"='us-south'"{ "results": [
{ "statement_id": 0
}
]
}
[root@server81 ~]#注意:附加pretty=true到URL可以启用漂亮的JSON输出。虽然这对于调试或直接使用类似工具查询很有用curl,但不建议将其用于生产,因为它会消耗不必要的网络带宽。
如果没有pretty=true,那么执行会是怎么样的结果呢?执行如下:[root@server81 ~]# curl -G 'http://localhost:8086/query' --data-urlencode "db=testdb" --data-urlencode "q=SELECT \"value\" FROM \"cpu_load_short\" WHERE \"region\"='us-west'"{"results":[{"statement_id":0,"series":[{"name":"cpu_load_short","columns":["time","value"],"values":[["2015-01-29T21:55:43.702900257Z",2],["2015-01-29T21:55:43.702900257Z",0.55],["2015-06-11T20:46:02Z",0.64]]}]}]}
[root@server81 ~]#
API进行多个查询语句
在单个API调用中向InfluxDB发送多个查询。只需使用分号分隔每个查询,例如:
curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=testdb" --data-urlencode "q=SELECT \"value\" FROM \"cpu_load_short\" WHERE \"region\"='us-west';SELECT count(\"value\") FROM \"cpu_load_short\" WHERE \"region\"='us-west'"
执行请求如下:[root@server81 ~]# curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=testdb" --data-urlencode "q=SELECT \"value\" FROM \"cpu_load_short\" WHERE \"region\"='us-west';SELECT count(\"value\") FROM \"cpu_load_short\" WHERE \"region\"='us-west'"{ "results": [
{ "statement_id": 0, "series": [
{ "name": "cpu_load_short", "columns": [ "time", "value"
], "values": [
[ "2015-01-29T21:55:43.702900257Z", 2
],
[ "2015-01-29T21:55:43.702900257Z", 0.55
],
[ "2015-06-11T20:46:02Z", 0.64
]
]
}
]
},
{ "statement_id": 1, "series": [
{ "name": "cpu_load_short", "columns": [ "time", "count"
], "values": [
[ "1970-01-01T00:00:00Z", 3
]
]
}
]
}
]
}
[root@server81 ~]#
可以从上面的返回结果看出,两个查询语句的结果都会合并到result数组中返回。
查询数据的其他选项
设置时间戳格式
curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=testdb" --data-urlencode "epoch=s" --data-urlencode "q=SELECT \"value\" FROM \"cpu_load_short\" WHERE \"region\"='us-west'"
下面对比查看两个请求,一个有写--data-urlencode "epoch=s"条件,第二个没有该条件,分析一下返回结果中的时间格式。[root@server81 ~]# curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=testdb" --data-urlencode "epoch=s" --data-urlencode "q=SELECT \"value\" FROM \"cpu_load_short\" WHERE \"region\"='us-west'"{ "results": [
{ "statement_id": 0, "series": [
{ "name": "cpu_load_short", "columns": [ "time", "value"
], "values": [
[ 1422568543, 2
],
[ 1422568543, 0.55
],
[ 1434055562, 0.64
]
]
}
]
}
]
}
[root@server81 ~]# [root@server81 ~]# curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=testdb" --data-urlencode "q=SELECT \"value\" FROM \"cpu_load_short\" WHERE \"region\"='us-west'"{ "results": [
{ "statement_id": 0, "series": [
{ "name": "cpu_load_short", "columns": [ "time", "value"
], "values": [
[ "2015-01-29T21:55:43.702900257Z", 2
],
[ "2015-01-29T21:55:43.702900257Z", 0.55
],
[ "2015-06-11T20:46:02Z", 0.64
]
]
}
]
}
]
}
[root@server81 ~]#
可以从上面的格式中看出,第一个查询出来的时间戳为1422568543,第二个查询出来的时间戳是2015-01-29T21:55:43.702900257Z。
关于查询是2015-01-29T21:55:43.702900257Z的解释:
InfluxDB中的所有内容都以UTC格式存储和报告。默认情况下,时间戳以RFC3339 UTC返回,并具有纳秒级精度。
关于查询是1422568543的解释:
设置epoch参数,则可以设置返回的时间戳格式,格式为epoch=[h,m,s,ms,u,ns]。
例如,设置秒级的时间戳则是epoch=s。
那么如果查询毫秒(ms)级别的呢?下面来查询看看:
curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=testdb" --data-urlencode "epoch=ms" --data-urlencode "q=SELECT \"value\" FROM \"cpu_load_short\" WHERE \"region\"='us-west'"[root@server81 ~]# curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=testdb" --data-urlencode "epoch=ms" --data-urlencode "q=SELECT \"value\" FROM \"cpu_load_short\" WHERE \"region\"='us-west'"{ "results": [
{ "statement_id": 0, "series": [
{ "name": "cpu_load_short", "columns": [ "time", "value"
], "values": [
[ 1422568543702, 2
],
[ 1422568543702, 0.55
],
[ 1434055562000, 0.64
]
]
}
]
}
]
}
[root@server81 ~]#
秒级的时间戳:1422568543
毫秒级的时间戳:1422568543702
可以看出精度越来越高,多了最后的702三位。
最大行限制
该max-row-limit配置选项允许用户限制返回结果的最大数量,以防止InfluxDB运行内存溢出。默认情况下,max-row-limit配置选项设置为0。该默认设置允许每个请求返回无限数量的行。
最大行限制仅适用于非分块查询。分块查询可以返回无限数量的点。
分块
通过设置chunked=true查询字符串参数,可以使用分块返回结果。
下面使用实操来演示一下分块的返回效果,首先查询一下数据如下:
curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=testdb" --data-urlencode "epoch=ms" --data-urlencode "q=SELECT \"value\" FROM \"cpu_load_short\""[root@server81 ~]# curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=testdb" --data-urlencode "epoch=ms" --data-urlencode "q=SELECT \"value\" FROM \"cpu_load_short\""{ "results": [
{ "statement_id": 0, "series": [
{ "name": "cpu_load_short", "columns": [ "time", "value"
], "values": [
[ 1422568543702, 2
],
[ 1422568543702, 0.55
],
[ 1434055562000, 0.64
],
[ 1546849598178, 0.67
],
[ 1546850175491, 0.67
],
[ 1546850460880, 0.67
]
]
}
]
}
]
}
[root@server81 ~]#
可以从返回的结果看出,所有查询的结果都是写入一个result数组里面的。能否分成多个result数组返回结果呢?
下面来设置分块参数执行语句如下:
设置参数--data-urlencode "chunked=true" --data-urlencode "chunk_size=1"一条数据为一个返回result数组。
整体语句如下:
curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=testdb" --data-urlencode "epoch=ms" --data-urlencode "chunked=true" --data-urlencode "chunk_size=1" --data-urlencode "q=SELECT \"value\" FROM \"cpu_load_short\""[root@server81 ~]# curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=testdb" --data-urlencode "epoch=ms" --data-urlencode "chunked=true" --data-urlencode "chunk_size=1" --data-urlencode "q=SELECT \"value\" FROM \"cpu_load_short\""{ "results": [
{ "statement_id": 0, "series": [
{ "name": "cpu_load_short", "columns": [ "time", "value"
], "values": [
[ 1422568543702, 2
]
], "partial": true
}
], "partial": true
}
]
}
{ "results": [
{ "statement_id": 0, "series": [
{ "name": "cpu_load_short", "columns": [ "time", "value"
], "values": [
[ 1422568543702, 0.55
]
], "partial": true
}
], "partial": true
}
]
}
{ "results": [
{ "statement_id": 0, "series": [
{ "name": "cpu_load_short", "columns": [ "time", "value"
], "values": [
[ 1434055562000, 0.64
]
], "partial": true
}
], "partial": true
}
]
}
{ "results": [
{ "statement_id": 0, "series": [
{ "name": "cpu_load_short", "columns": [ "time", "value"
], "values": [
[ 1546849598178, 0.67
]
], "partial": true
}
], "partial": true
}
]
}
{ "results": [
{ "statement_id": 0, "series": [
{ "name": "cpu_load_short", "columns": [ "time", "value"
], "values": [
[ 1546850175491, 0.67
]
], "partial": true
}
], "partial": true
}
]
}
{ "results": [
{ "statement_id": 0, "series": [
{ "name": "cpu_load_short", "columns": [ "time", "value"
], "values": [
[ 1546850460880, 0.67
]
]
}
]
}
]
}
[root@server81 ~]#
好了,从上面可以看出,已经将每一条查询结果都分块到各自的result数组之中了。
作者:DevOps海洋的渔夫
链接:https://www.jianshu.com/p/a477feff548d
influxdb java api使用_InfluxDB使用HTTP的API查询数据相关推荐
- 使用Java程序消费SAP Leonardo的机器学习API
http://blog.itpub.net/24475491/viewspace-2154590/ 以sap leonardo作为关键字在微信上搜索,能搜到不少文章.但是我浏览了一下,好像没有发现有从 ...
- java.lang.NoSuchMethodError: org.apache.flink.table.api.TableColumn.isGenerated()Z
完整报错如下: select * from dim_behavior; [ERROR] Could not execute SQL statement. Reason: java.lang.NoSuc ...
- Cannot resolve method ‘call(java.lang.String, org.apache.flink.table.api.ApiExpression)‘
intellij提示: Cannot resolve method 'call(java.lang.String, org.apache.flink.table.api.ApiExpression)' ...
- java ee 8 api_Java EE 8安全性API:概述
java ee 8 api 新的安全性API Java EE 8中添加的最重要的一项新功能可能就是新的安全性API. 此新API的主要动机是简化,标准化和现代化跨容器和实现处理安全性问题的方式. 他们 ...
- java asm tree_使用ASM 4处理Java类文件–第二部分:Tree API
java asm tree 什么是ASM树API: ASM树API是ASM的一部分,可让您创建/修改内存中的类. 该类被视为信息树. 像整个类一样,它是ClassNode的实例,其中包含FieldNo ...
- Java EE 7中的WebSocket客户端API
在本文中,让我们探索谈论较少的Web Socket Client API,以及如何在Java EE 7容器本身中利用它. Web套接字服务器API规则 JSR 356的服务器端API(Java的Web ...
- InfluxDB Java入门
添加依赖 <dependency><groupId>org.influxdb</groupId><artifactId>influxdb-java< ...
- Oracle把Java EE的未来押在Rest API上了?
Oracle正在向REST 和 JSON倾斜以使Java EE 适应微服务和云的现代趋势. \\ 作为一种提供Web服务通信的机制,似乎REST从很久以前就抢过了SOAP的风头.SOAP 因其复杂性已 ...
- 基于java的圆通快递单号自动识别api接口代码实例
一.产品介绍 快递单号识别,输入运单号自动识别物流公司,实时返回对应物流公司编码.查询单号时,返回的结果可能存在一个或多个物流公司编码,快递鸟大数据平台通过智能分析,实时更新单号库,保障物流公司编码准 ...
- java api gateway_微服务中的 API 网关(API Gateway)
背景 我们知道在微服务架构风格中,一个大应用被拆分成为了多个小的服务系统提供出来,这些小的系统他们可以自成体系,也就是说这些小系统可以拥有自己的数据库,框架甚至语言等,这些小系统通常以提供 Rest ...
最新文章
- ubuntu 关闭显示,关闭显卡,命令与图形切换
- oracle逻辑结构包含,在Oracle中,逻辑结构由哪几个部分组成?
- GDCM:gdcm::StreamImageWriter的测试程序
- 小动画制作 图片盒子配合定时器 winform 114869633
- 让目标检测和实例分割互相帮助,地平线实习生论文被AAAI 2020收录
- 2021-2025年中国冲浪板鳍行业市场供需与战略研究报告
- Unity VR开发出语音识别功能
- 乌合之众(大众心理研究)之三:群体的一般特征
- JBPM工作流框架应用
- linux jvm gc日志分析,JVM之GC统计以及日志分析
- ubuntu11.04(unix 就可以了) 共享文件以及支持上传文件
- 全球最最可爱的的10种著名小型犬
- 学计算机的女生容易脱单,最容易让男生脱单的5个大学专业,特别是第3个,女生会倒追你!...
- Python查找文件夹中含有指定关键字的文件
- Oracle导入dmp文件(cmd方式)
- 鞋长度和欧美的标准宽度换算表
- 高级 JavaScript(一)
- 莫比乌斯进阶:bzoj 3994 约数个数和(Mobius)
- LaTeX 数学公式编辑
- 信号量 - linux内核锁(三)