仅供学习,转载请注明出处

参考官方开源文档

使用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查询数据相关推荐

  1. 使用Java程序消费SAP Leonardo的机器学习API

    http://blog.itpub.net/24475491/viewspace-2154590/ 以sap leonardo作为关键字在微信上搜索,能搜到不少文章.但是我浏览了一下,好像没有发现有从 ...

  2. 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 ...

  3. 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)' ...

  4. java ee 8 api_Java EE 8安全性API:概述

    java ee 8 api 新的安全性API Java EE 8中添加的最重要的一项新功能可能就是新的安全性API. 此新API的主要动机是简化,标准化和现代化跨容器和实现处理安全性问题的方式. 他们 ...

  5. java asm tree_使用ASM 4处理Java类文件–第二部分:Tree API

    java asm tree 什么是ASM树API: ASM树API是ASM的一部分,可让您创建/修改内存中的类. 该类被视为信息树. 像整个类一样,它是ClassNode的实例,其中包含FieldNo ...

  6. Java EE 7中的WebSocket客户端API

    在本文中,让我们探索谈论较少的Web Socket Client API,以及如何在Java EE 7容器本身中利用它. Web套接字服务器API规则 JSR 356的服务器端API(Java的Web ...

  7. InfluxDB Java入门

    添加依赖 <dependency><groupId>org.influxdb</groupId><artifactId>influxdb-java< ...

  8. Oracle把Java EE的未来押在Rest API上了?

    Oracle正在向REST 和 JSON倾斜以使Java EE 适应微服务和云的现代趋势. \\ 作为一种提供Web服务通信的机制,似乎REST从很久以前就抢过了SOAP的风头.SOAP 因其复杂性已 ...

  9. 基于java的圆通快递单号自动识别api接口代码实例

    一.产品介绍 快递单号识别,输入运单号自动识别物流公司,实时返回对应物流公司编码.查询单号时,返回的结果可能存在一个或多个物流公司编码,快递鸟大数据平台通过智能分析,实时更新单号库,保障物流公司编码准 ...

  10. java api gateway_微服务中的 API 网关(API Gateway)

    背景 我们知道在微服务架构风格中,一个大应用被拆分成为了多个小的服务系统提供出来,这些小的系统他们可以自成体系,也就是说这些小系统可以拥有自己的数据库,框架甚至语言等,这些小系统通常以提供 Rest ...

最新文章

  1. ubuntu 关闭显示,关闭显卡,命令与图形切换
  2. oracle逻辑结构包含,在Oracle中,逻辑结构由哪几个部分组成?
  3. GDCM:gdcm::StreamImageWriter的测试程序
  4. 小动画制作 图片盒子配合定时器 winform 114869633
  5. 让目标检测和实例分割互相帮助,地平线实习生论文被AAAI 2020收录
  6. 2021-2025年中国冲浪板鳍行业市场供需与战略研究报告
  7. Unity VR开发出语音识别功能
  8. 乌合之众(大众心理研究)之三:群体的一般特征
  9. JBPM工作流框架应用
  10. linux jvm gc日志分析,JVM之GC统计以及日志分析
  11. ubuntu11.04(unix 就可以了) 共享文件以及支持上传文件
  12. 全球最最可爱的的10种著名小型犬
  13. 学计算机的女生容易脱单,最容易让男生脱单的5个大学专业,特别是第3个,女生会倒追你!...
  14. Python查找文件夹中含有指定关键字的文件
  15. Oracle导入dmp文件(cmd方式)
  16. 鞋长度和欧美的标准宽度换算表
  17. 高级 JavaScript(一)
  18. 莫比乌斯进阶:bzoj 3994 约数个数和(Mobius)
  19. LaTeX 数学公式编辑
  20. 信号量 - linux内核锁(三)

热门文章

  1. ROS进阶功能—action通信机制
  2. 【深度学习】IMDB数据集上电影评论二分类
  3. 【冈凡记录】阿冈与叶凡超女8进6决赛的全观察!
  4. 计算机处理器天梯,cpu天梯图2020_笔记本cpu天梯排名图2020
  5. 剑指offer——44.翻转单词顺序序列
  6. 【华人学者风采】林达华 香港中文大学
  7. vivo手机计算机怎么开语音,vivo怎么打开语音助手
  8. 液晶拼接大屏的日常维护与保养
  9. Redis Client 之 Jedis与Lettuce
  10. OKHttp源码详解_tony_851122