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参考文档。