InfluxDB之HTTP API查询数据

本文介绍如何使用InfluxDB的HTTP API查询时间序列数据,包括执行基本查询、使用分块返回大量数据的方法、调整时间戳格式以及设置认证和限制查询结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

要执行查询,请将GET请求发送到/query点,将URL参数db设置为目标数据库,并将URL参数q设置为查询。 您也可以使用POST请求,通过发送相同的参数作为URL参数,或者使用application /x-www-form-urlencoded作为请求内容的一部分。 下面的示例使用HTTP API来查询您在写数据中创建的同一个数据库。

curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=mydb" --data-urlencode "q=SELECT \"value\" FROM \"cpu_load_short\" WHERE \"region\"='us-west'"

 

InfluxDB返回JSON。您的查询结果显示在“results”数组中。 如果发生错误,InfluxDB会设置一个“error”键并附上错误说明。

{
    "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
                        ]
                    ]
                }
            ]
        }
    ]
}

注意:在URL中添加pretty = true将启用漂亮的JSON输出。 虽然这对调试或直接使用curl等工具进行查询很有用,但不建议用于生产,因为它会消耗不必要的网络带宽。

 

多个查询


在单个API调用中向InfluxDB发送多个查询。简单地用分号分隔每个查询即可,例如:

curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=mydb" --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
                        ]
                    ]
                }
            ]
        }
    ]
}

查询数据的其他选项

时间戳格式


InfluxDB中的所有内容都以UTC存储和报告。默认情况下,时间戳以RFC3339 UTC标准返回,具有纳秒精度,例如2015-08-04T19:05:14.318570484Z。 如果你需要Unix格式的时间戳,使用请求查询字符串参数epoch其中epoch=[h,m,s,ms,u,ns]。 例如,获取秒级和时间戳:

 

curl -G 'http://localhost:8086/query' --data-urlencode "db=mydb" --data-urlencode "epoch=s" --data-urlencode "q=SELECT \"value\" FROM \"cpu_load_short\" WHERE \"region\"='us-west'"


认证


InfluxDB中的认证默认不启用。 有关如何启用和设置身份验证,请参阅身份验证和授权


最大行数限制


max-row-limit配置选项允许用户限制返回结果的最大数量,以防止InfluxDB在汇总结果时耗尽内存。最大行数限制选项默认设置为0。 该默认设置允许每个请求返回无限数量的行。 最大行数限制仅适用于非分块查询。 分块查询可以返回无限数量的点。

 

分块


通过设置查询字符串参数chunked=true,可以使用分块返回流式批量结果而不是单个响应。 响应将按照序列或每10000点进行分块,以先发生者为准。 要将最大块大小更改为其他值,请将查询字符串参数chunk_size设置为不同的值。例如,以每批20,000点得到你的结果:

curl -G 'http://localhost:8086/query' --data-urlencode "db=deluge" --data-urlencode "chunked=true" --data-urlencode "chunk_size=20000" --data-urlencode "q=SELECT * FROM liters"

InfluxQL

 

现在您已经知道如何查询数据了,请查看Data Exploration页面以熟悉InfluxQL。 有关使用HTTP API查询数据的更多信息,请参阅API参考文档

### InfluxDB HTTP API 文档与用法 InfluxDB 提供了一个基于 REST 的 HTTP API 接口,用于执行各种操作,例如查询数据库、写入数据以及管理实例状态。当访问 `/` 路径时,如果返回 `204 No Content` 响应,则表示 InfluxDB 实例正在正常运行[^1]。 #### 查询数据 通过 `/query` 终端可以发送 SQL 类似的查询语句来获取存储的数据。通常情况下,这些查询会以 URL 参数的形式传递给服务器。例如: ```bash curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=my_database" --data-urlencode "q=SELECT * FROM my_measurement" ``` 上述命令向本地运行的 InfluxDB 发送了一条 SELECT 查询请求,并指定了目标数据库名称为 `my_database` 和测量名为 `my_measurement`[^2]。 #### 数据写入 为了将时间序列数据导入到 InfluxDB 中,开发者可以通过 POST 请求提交 Line Protocol 格式的字符串至 `/write` 端点实现此目的。下面是一个简单的例子展示如何完成这一过程: ```bash curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary 'cpu_load_short,host=server01,value=0.64' ``` 这里我们创建了一个新的 measurement 叫做 cpu_load_short 并附加了一些标签(tag)和字段(field)[^3]。 #### 流处理库支持 除了基本的功能之外,还有许多第三方工具可以帮助简化流式计算或者响应式编程的任务。比如 go-streams 就是一种流行的 Golang 库用来构建复杂的管道结构来进行实时数据分析[^4]。 ```go package main import ( "fmt" streams "./streams" ) func main() { s := streams.Stream([]int{1, 2, 3}) result := s.Map(func(x int) float64 { return float64(x)*float64(x) }).Sum() fmt.Println(result) } ``` 以上代码片段展示了怎样利用 go-stream 对整数数组应用映射函数并最终求得其平方总和的结果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值