influxdb 端点使用http进行sql查询,写数据

简介: influxdb 端点使用http进行sql查询,写数据

转载请注明出处:

InfluxDB有以下几个常用的端点,它们的作用和传参方式如下:

1./ping

端点:

  • 作用:用于检查InfluxDB实例的状态,返回InfluxDB的构建类型和版本信息。
  • 传参:无需传参,仅发送GET请求即可。

调用示例:  

curl http://localhost:8086/ping

2./write

端点:

  • 作用:用于将数据写入InfluxDB。
  • 传参:
  • 请求方式:发送POST请求。
  • 请求头:
  • Content-Type:设置为application/x-www-form-urlencodedtext/plain,表示请求体中的数据格式为InfluxDB的行协议(Line Protocol)。
  • 请求体:需要将要写入的数据按照InfluxDB的行协议格式进行编码,并作为请求体发送。

当有标签(tag)和字段(field)如下所示时,可以通过在数据点中使用逗号分隔并以键值对的形式传递参数:

curl -XPOST 'http://localhost:8086/write?db=my_database' \
    --data-binary '
measurement_name,host=example_host,ip=192.168.1.100 name="John Doe",num=42 1627842300000000000

'

  也可以添加更多的数据点,每个数据点之间使用换行符进行分隔,以传递多个标签和字段的参数。

3./query

端点:

  • 作用:用于执行查询操作,从InfluxDB中检索数据。
  • 传参:
  • 请求方式:发送POST请求。
  • 请求头:
  • Content-Type:设置为application/x-www-form-urlencodedapplication/json,表示请求体中的数据格式为InfluxDB查询语句的格式(InfluxQL或Flux)。
  • 请求体:将查询语句编写为InfluxQL或Flux格式,并作为请求体发送。
curl -XPOST 'http://localhost:8086/query' \
    -H 'Content-Type: application/x-www-form-urlencoded' \
    --data-urlencode 'q=SELECT * FROM measurement_name WHERE time > now() - 1h'

4./query

端点(批量查询):

  • 作用:用于在单个请求中执行多个查询操作。
  • 传参:
  • 请求方式:发送POST请求。
  • 请求头:
  • Content-Type:设置为application/x-www-form-urlencodedapplication/json,表示请求体中的数据格式为InfluxDB查询语句的格式(InfluxQL或Flux)。
  • 请求体:将多个查询语句按照InfluxQL或Flux格式编写,并使用分号(;)作为分隔符,将它们放在请求体中一起发送。
curl -XPOST 'http://localhost:8086/query?db=my_database' \
    --data-raw '
        [
            {
                "measurement": "measurement_name1",
                "tags": { "tag_key": "tag_value" },
                "fields": [ "field_key1", "field_key2" ],
                "time": "2022-01-01T00:00:00Z",
                "query": "SELECT field_key1, field_key2 FROM measurement_name1 WHERE tag_key = 'tag_value'"
            },
            {
                "measurement": "measurement_name2",
                "tags": { "tag_key": "tag_value" },
                "fields": [ "field_key1", "field_key2" ],
                "time": "2022-01-01T00:00:00Z",
                "query": "SELECT field_key1, field_key2 FROM measurement_name2 WHERE tag_key = 'tag_value'"
            }
        ]
    '

对每个部分的详细说明:

  • -XPOST:指定 HTTP 请求方法为 POST。
  • http://localhost:8086/query?db=my_database:设置目标 URL,其中 http://localhost:8086 是 InfluxDB 服务地址,query 是端点路径,db=my_database 是查询参数,指定要查询的数据库名称为 my_database
  • --data-raw:用于发送原始数据的 curl 选项。在这里,我们使用它来传递批量查询的 JSON 数据。
  • 这是实际的批量查询 JSON 数据示例。其中包含两个查询对象,每个对象都有以下属性:
  • measurement:测量名称;
  • tags:标签键值对;
  • fields:字段列表;
  • time:时间戳(可选);
  • query:实际的 InfluxDB 查询语句。

  请根据实际需求替换示例中的参数,并确保提供正确的查询语句和数据库名称。

  响应将返回多个查询结果,每个查询结果都以 JSON 格式表示。你可以通过解析响应来获取每个查询的结果。

 

5.异常总结

  5.1 unable to parse authentication credentials

  报错 "unable to parse authentication credentials" 表明在发送 InfluxDB 查询请求时,认证凭据解析错误。这是由于未正确配置或提供身份验证信息导致的。需要在发送 curl 请求时,提供了正确的用户名和密码来进行身份验证。可以使用 -u 参数来指定用户名和密码。以下是一个示例:

curl -XPOST 'http://localhost:8086/query' \
    -H 'Content-Type: application/x-www-form-urlencoded' \
    -u username:password \
    --data-urlencode 'q=SELECT * FROM measurement_name WHERE time > now() - 1h'

  请确保在 InfluxDB 的配置文件中启用了身份验证,并且提供了正确的用户名和密码。默认情况下,InfluxDB 的身份验证是禁用的,因此需要手动启用并配置用户凭据。

  如果问题仍然存在,请检查用户名和密码是否正确,以及 InfluxDB 配置文件中是否正确配置了身份验证。

  5.2 database name required

  报错 "database name required" 表明在发送 InfluxDB 查询请求时,未提供数据库名称。查询语句需要指定要使用的数据库。

curl -XPOST 'http://localhost:8086/query' \
    -H 'Content-Type: application/x-www-form-urlencoded' \
    -u username:password \
    --data-urlencode 'q=SELECT * FROM measurement_name WHERE time > now() - 1h' \
    --data-urlencode 'db=your_database_name'

  在上述示例中,将 your_database_name 替换为实际的数据库名称,并确保提供了正确的数据库名称。

6.使用postman请求query

  -u 需要转换为 Authorization 的请求头,使用python的base64计算的具体方法为:

import base64
username = 'admin'
password = 'password'
credentials = username + ':' + password
base64_credentials = base64.b64encode(credentials.encode()).decode()
authorization = 'Basic ' + base64_credentials
print(authorization)

  根据 生成的 Authorization 配置到  postman 中。

  将 查询 的sql,db配置到查询的body

  header部分:

  body部分

参考:

  https://docs.influxdata.com/influxdb/v1.7/tools/api/   

 

标签: influxdb

目录
相关文章
|
1月前
|
SQL 数据挖掘 数据库
第三篇:高级 SQL 查询与多表操作
本文深入讲解高级SQL查询技巧,涵盖多表JOIN操作、聚合函数、分组查询、子查询及视图索引等内容。适合已掌握基础SQL的学习者,通过实例解析INNER/LEFT/RIGHT/FULL JOIN用法,以及COUNT/SUM/AVG等聚合函数的应用。同时探讨复杂WHERE条件、子查询嵌套,并介绍视图简化查询与索引优化性能的方法。最后提供实践建议与学习资源,助你提升SQL技能以应对实际数据处理需求。
145 1
|
3月前
|
SQL 自然语言处理 数据库
【Azure Developer】分享两段Python代码处理表格(CSV格式)数据 : 根据每列的内容生成SQL语句
本文介绍了使用Python Pandas处理数据收集任务中格式不统一的问题。针对两种情况:服务名对应多人拥有状态(1/0表示),以及服务名与人名重复列的情况,分别采用双层for循环和字典数据结构实现数据转换,最终生成Name对应的Services列表(逗号分隔)。此方法高效解决大量数据的人工处理难题,减少错误并提升效率。文中附带代码示例及执行结果截图,便于理解和实践。
105 5
|
3月前
|
SQL 运维 监控
SQL查询太慢?实战讲解YashanDB SQL调优思路
本文是Meetup第十期“调优实战专场”的第二篇技术文章,上一篇《高效查询秘诀,解码YashanDB优化器分组查询优化手段》中,我们揭秘了YashanDB分组查询优化秘诀,本文将通过一个案例,助你快速上手YashanDB慢日志功能,精准定位“慢SQL”后进行优化。
|
3月前
|
SQL 索引
【YashanDB知识库】字段加上索引后,SQL查询不到结果
【YashanDB知识库】字段加上索引后,SQL查询不到结果
|
1月前
|
SQL 关系型数据库 MySQL
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
|
2月前
|
存储 C++
UE5 C++:自定义Http节点获取Header数据
综上,通过为UE5创建一个自定义HTTP请求类并覆盖GetResult方法,就能成功地从HTTP响应的Header数据中提取信息。在项目中使用自定义类,不仅可以方便地访问响应头数据,也可随时使用这些信息。希望这种方法可以为你的开发过程带来便利和效益。
119 35
|
1月前
|
SQL 数据挖掘 关系型数据库
【SQL 周周练】一千条数据需要做一天,怎么用 SQL 处理电表数据(如何动态构造自然月)
题目来自于某位发帖人在某 Excel 论坛的求助,他需要将电表缴费数据按照缴费区间拆开后再按月份汇总。当时用手工处理数据,自称一千条数据就需要处理一天。我将这个问题转化为 SQL 题目。
105 12
|
1月前
|
存储 数据库 Python
使用HTTP POST协议将本地压缩数据发送到服务器
总的来说,使用HTTP POST协议将本地压缩数据发送到服务器是一个涉及多个步骤的过程,包括创建压缩文件,设置HTTP客户端,发送POST请求,以及服务器端的处理。虽然这个过程可能看起来复杂,但一旦你理解了每个步骤,就会变得相对简单。
104 19
|
1月前
|
SQL 数据采集 资源调度
【SQL 周周练】爬取短视频发现数据缺失,如何用 SQL 填充
爬虫爬取抖音和快手的短视频数据时,如果遇到数据缺失的情况,如何使用 SQL 语句完成数据的补全。
70 5
|
3月前
|
SQL 人工智能 自然语言处理
OmniSQL:开源文本到SQL神器!自然语言秒转查询到复杂多表连接等SQL需求
OmniSQL是开源的文本到SQL转换模型,通过创新的数据合成框架生成250万条高质量样本,支持7B/14B/32B三种模型版本,能处理从简单查询到复杂多表连接等各种SQL需求。
319 16
OmniSQL:开源文本到SQL神器!自然语言秒转查询到复杂多表连接等SQL需求