docs-v2/content/influxdb/v1.6/guides/querying_data.md

161 lines
6.2 KiB
Markdown
Raw Normal View History

2020-07-30 03:37:42 +00:00
---
title: Querying data with the HTTP API
alias:
-/docs/v1.6/query_language/querying_data/
menu:
influxdb_1_6:
weight: 20
parent: Guides
---
## Querying data with the HTTP API
The HTTP API is the primary means for querying data in InfluxDB (see the [command line interface](/influxdb/v1.6/tools/shell/) and [client libraries](/influxdb/v1.6/tools/api_client_libraries/) for alternative ways to query the database).
To perform a query send a `GET` request to the `/query` endpoint, set the URL parameter `db` as the target database, and set the URL parameter `q` as your query.
You may also use a `POST` request by sending the same parameters either as URL parameters or as part of the body with `application/x-www-form-urlencoded`.
The example below uses the HTTP API to query the same database that you encountered in [Writing Data](/influxdb/v1.6/guides/writing_data/).
<br>
```bash
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 returns JSON.
The results of your query appear in the `"results"` array.
If an error occurs, InfluxDB sets an `"error"` key with an explanation of the error.
<br>
```
{
"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
]
]
}
]
}
]
}
```
> **Note:** Appending `pretty=true` to the URL enables pretty-printed JSON output.
While this is useful for debugging or when querying directly with tools like `curl`, it is not recommended for production use as it consumes unnecessary network bandwidth.
### Multiple queries
---
Send multiple queries to InfluxDB in a single API call.
Simply delimit each query using a semicolon, for example:
<br>
```bash
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'"
```
returns:
<br>
```
{
"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
]
]
}
]
}
]
}
```
### Other options when querying data
---
#### Timestamp Format
Everything in InfluxDB is stored and reported in UTC.
By default, timestamps are returned in RFC3339 UTC and have nanosecond precision, for example `2015-08-04T19:05:14.318570484Z`.
If you want timestamps in Unix epoch format include in your request the query string parameter `epoch` where `epoch=[h,m,s,ms,u,ns]`.
For example, get epoch in seconds with:
<br>
```bash
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'"
```
#### Authentication
Authentication in InfluxDB is disabled by default.
See [Authentication and Authorization](/influxdb/v1.6/administration/authentication_and_authorization/) for how to enable and set up authentication.
#### Maximum Row Limit
The [`max-row-limit` configuration option](/influxdb/v1.6/administration/config/#max-row-limit-0) allows users to limit the maximum number of returned results to prevent InfluxDB from running out of memory while it aggregates the results.
The `max-row-limit` configuration option is set to `0` by default.
That default setting allows for an unlimited number of rows returned per request.
The maximum row limit only applies to non-chunked queries. Chunked queries can return an unlimited number of points.
#### Chunking
Chunking can be used to return results in streamed batches rather than as a single response by setting the query string parameter `chunked=true`. Responses will be chunked by series or by every 10,000 points, whichever occurs first. To change the maximum chunk size to a different value, set the query string parameter `chunk_size` to a different value.
For example, get your results in batches of 20,000 points with:
<br>
```bash
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
---
Now that you know how to query data, check out the [Data Exploration page](/influxdb/v1.6/query_language/data_exploration/) to get acquainted with InfluxQL.
For more information about querying data with the HTTP API, please see the [API reference documentation](/influxdb/v1.6/tools/api/#query-http-endpoint).