前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >InfluxDB使用HTTP的API查询数据

InfluxDB使用HTTP的API查询数据

作者头像
Devops海洋的渔夫
发布于 2019-05-31 08:22:24
发布于 2019-05-31 08:22:24
3.8K00
代码可运行
举报
文章被收录于专栏:Devops专栏Devops专栏
运行总次数:0
代码可运行

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

参考官方开源文档

使用HTTP API查询数据

使用HTTP的API查询数据

HTTP API是在InfluxDB中查询数据的主要方法(有关查询数据库的其他方法,请参阅命令行界面客户端库)。

注意:以下示例使用curl命令行工具,该工具使用URL传输数据。学习的基础知识curlHTTP脚本指南

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中的数据,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> 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 2
1422568543702900257           server02 us-west 0.55
1434055562000000000           server01 us-west 0.64
1546849598178339889           server02         0.67
1546850175491084332           server02         0.67
1546850460880063366           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 2
1422568543702900257           server02 us-west 0.55
1434055562000000000           server01 us-west 0.64
> 

下面使用API请求查询如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[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' 这个在数据中是没有的。下面执行看看:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[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,那么执行会是怎么样的结果呢?执行如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[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'" 执行请求如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[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"条件,第二个没有该条件,分析一下返回结果中的时间格式。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[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'"

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[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\""

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[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\""

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[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数组之中了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.01.07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
如何使用质心法进行目标追踪
如今,“图像分类”、“目标检测”、“语义分割”、“实例分割”和“目标追踪”等5大领域是计算机视觉的热门应用。其中“图像分类”与“目标检测”是最基础的应用,在此基础上,派生出了“语义分割”、“实例分割”和“目标跟踪”等相对高级的应用。
OpenCV学堂
2023/11/01
4900
如何使用质心法进行目标追踪
利用双目相机数机数据进行实时动态障碍物检测和跟踪
Leveraging Stereo-Camera Data for Real-Time Dynamic Obstacle Detection and Tracking
3D视觉工坊
2020/12/03
1.2K0
利用双目相机数机数据进行实时动态障碍物检测和跟踪
CVPR 2019 | 惊艳的SiamMask:开源快速同时进行目标跟踪与分割算法
上面这张Gif图演示了 SiamMask 的效果,只需要鼠标滑动选择目标的包围框,即可同时实现目标跟踪与分割。
AI科技大本营
2019/03/19
1K0
CVPR 2019 | 惊艳的SiamMask:开源快速同时进行目标跟踪与分割算法
ICCV 2019 | 变形曲面如何跟踪?亮风台公布最新算法
ICCV 由IEEE 主办,每两年召开一次,与计算机视觉模式识别会议(CVPR)和欧洲计算机视觉会议(ECCV)并称计算机视觉方向的三大顶级会议。据了解,今年一共收到4328篇投稿,与上一届 2143 篇相比,数量超出一倍,“竞争”激烈。10 月 27 日 - 11 月 2 日,ICCV 2019 将在韩国首尔举行。
AI科技评论
2019/09/12
1.2K0
ICCV 2019 | 变形曲面如何跟踪?亮风台公布最新算法
一文带你了解机器人是如何通过视觉实现目标跟踪的!
视觉跟踪技术是计算机视觉领域(人工智能分支)的一个重要课题,有着重要的研究意义。在军事制导、视频监控、机器人视觉导航、人机交互、以及医疗诊断等许多方面有着广泛的应用前景。随着研究人员不断地深入研究,视觉目标跟踪在近十几年里有了突破性的进展,使得视觉跟踪算法不仅仅局限于传统的机器学习方法,更是结合了近些年人工智能热潮—深度学习(神经网络)和相关滤波器等方法。本文主要介绍以下几点:什么是视觉目标跟踪(单目标跟踪)、单目标跟踪的基本结构(框架),目标跟踪存在的挑战,目标跟踪经典相关方法及研究趋势等。
一点人工一点智能
2023/02/25
1.1K0
一文带你了解机器人是如何通过视觉实现目标跟踪的!
使用姿势估计进行跌倒检测
所有目标检测已成为动作识别研究的重要垫脚石,即训练AI对行走和坐下等一般动作进行分类。为了使AI能够理解接收到的输入,我们需要教它检测特定的图案和形状,并制定自己的规则。
AI算法与图像处理
2021/03/26
2K0
使用姿势估计进行跌倒检测
Java版人脸跟踪三部曲之二:开发设计
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本篇是《Java版人脸跟踪三部曲》系列的第二篇,前文体验了人脸跟踪的效果,想要编码实现这样的效果,咱们需要做好设计工作,也就是本篇的任务 本篇主要包含以下内容: 核心逻辑 重要知识点:HSV、HUE 重要知识点:反向投影 重要知识点:CamShift 重要知识点:JavaCV的API支持 如何开局? 前文的完整功能分析 异常处理 期待下一篇的实战(虎年
程序员欣宸
2022/04/13
6540
Java版人脸跟踪三部曲之二:开发设计
多目标跟踪MOT16数据集和评价指标
多目标跟踪处理的对象是视频,从视频的第一帧到最后一帧,里边有多个目标在不断运动。多目标跟踪的目的就是将每个目标和其他目标进行区分开来,具体方法是给每个目标分配一个ID,并记录他们的轨迹。
BBuf
2020/02/25
1.7K0
【项目实践】从零开始学习Deep SORT+YOLO V3进行多目标跟踪(附注释项目代码)
首先要说明一点,现在多目标跟踪算法的效果,与目标检测的结果息息相关,因为主流的多目标跟踪算法都是TBD(Tracking-by-Detecton)策略,SORT同样使用的是TBD,也就是说先检测,再跟踪。这也是跟踪领域的主流方法。所以,检测器的好坏将决定跟踪的效果。
公众号机器学习与AI生成创作
2020/07/15
1.4K0
【项目实践】从零开始学习Deep SORT+YOLO V3进行多目标跟踪(附注释项目代码)
跟踪算法性能测试之二:常用评价标准实现
这一篇均是在上一篇的基础上实现的,在上一篇写了如何批量测试VOT数据集及保存跟踪结果。并进行了简单的CLE绘制,这一篇总结一下常用的跟踪评价标准及其实现。
和蔼的zhxing
2019/03/06
1.3K0
视频分割在移动端的算法进展综述
语义分割任务要求给图像上的每一个像素赋予一个带有语义的标签,视频语义分割任务是要求给视频中的每一帧图像上的每一个像素赋予一个带有语义的标签。
SIGAI学习与实践平台
2019/04/26
2.1K0
视频分割在移动端的算法进展综述
使用OpenCV测量图像中物体之间的距离
本文来自光头哥哥的博客【Measuring distance between objects in an image with OpenCV】,仅做学习分享。
OpenCV学堂
2020/11/09
5.3K0
使用OpenCV测量图像中物体之间的距离
单目标跟踪SOT常用评价指标
以上评估方式一般都是用ground-truth中目标的位置初始化第一帧,然后运行跟踪算法得到平均精度和成功率。这种方法被称为one-pass evaluation (OPE)。这种方法有2个缺点。一是一个跟踪算法可能对第一帧给定的初始位置比较敏感,在不同位置或者帧初始会造成比较大的影响。二是大多数算法遇到跟踪失败后没有重新初始化的机制。
孔西皮
2024/02/19
8680
单目标跟踪SOT常用评价指标
目标跟踪基础:两张图片相似度算法
不管是传统的目标跟踪中的生成模型和判别模型,还是用深度学习来做目标跟踪,本质上都是来求取目标区域与搜索区域的相似度,这就是典型的多输入。
一点人工一点智能
2023/07/08
3.3K0
目标跟踪基础:两张图片相似度算法
OpenCV系列学习之(六)
把A的转置与A相乘再取逆,把这个矩阵对角化为特征值x1,x2,当两个特征值都很大时,矩阵才可逆,即为角点时矩阵才可逆。图片中80%以上的像素点都是不可逆的,只有角点才可逆。所以在做光流估计时,输入要是角点。
墨明棋妙27
2022/08/24
3800
OpenCV系列学习之(六)
TLD跟踪算法介绍
TLD跟踪算法介绍 TLD(Tracking-Learning-Detection)是一种长时视频对象跟踪算法,首先要在视频一帧中指明对象位置,Tracking完成在视频的每一帧中跟踪对象;Dtect
OpenCV学堂
2018/04/04
2.4K0
TLD跟踪算法介绍
DarkLabel:支持检测、跟踪、ReID数据集的标注软件
DarkLabel是一个轻量的视频标注软件,相比于ViTBAT等软件而言,不需要安装就可以使用, 本文将介绍darklabel软件的使用指南。
BBuf
2020/04/26
5.9K0
深度多目标跟踪算法综述
原创声明:本文为 SIGAI 原创文章,仅供个人学习使用,未经允许,不得转载,不能用于商业目的。
SIGAI学习与实践平台
2018/10/23
2.4K0
深度多目标跟踪算法综述
多目标追踪小抄:快速了解MOT的基本概念
来源:Deephub Imba本文共2400字,建议阅读5分钟本文介绍了MOT的基本概念。 多目标跟踪(Multiple Object Tracking) MOT 获取单个连续视频并以特定帧速率 (fps) 将其拆分为离散帧以输出。 检测每帧中存在哪些对象 标注对象在每一帧中的位置 关联不同帧中的对象是属于同一个对象还是属于不同对象 MOT的典型应用 多目标跟踪(MOT) 用于交通控制、数字取证的视频监控 手势识别 机器人技术 增强现实 自动驾驶 MOT 面临的挑战 准确的对象检测的问题是未能检测到
数据派THU
2022/05/23
8390
多目标追踪小抄:快速了解MOT的基本概念
DenseTrack,利用视觉语言模型提升密度图个体识别能力 !
在应对第一个挑战时,开发了各种基于计数的跟踪方法,以平衡无人机视角下个体的精确定位与外观信息的保留。例如,STNNet(Wang等人,2019年)利用密度图进行人群定位和运动偏移进行跟踪。尽管这种方法显著提高了定位精度,但它仍难以解决由于物体在空中视角下体积小、距离近而引起的位置移动问题。此外,基于多帧注意力的方法(Brockman等人,2017年)通过整合跨多帧的特征来提高跟踪效果。然而,它依赖于连续帧,在帧间间隔较大的场景中效果不佳。
AIGC 先锋科技
2024/08/19
1960
DenseTrack,利用视觉语言模型提升密度图个体识别能力 !
推荐阅读
相关推荐
如何使用质心法进行目标追踪
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验