163 lines
6.3 KiB
Markdown
163 lines
6.3 KiB
Markdown
Use the `/api/v3/write_lp` endpoint to write data to {{% product-name %}}.
|
|
|
|
This endpoint accepts the same [line protocol](/influxdb3/version/reference/line-protocol/)
|
|
syntax as previous versions of InfluxDB, and supports the following:
|
|
|
|
##### Query parameters
|
|
|
|
- `?accept_partial=<BOOLEAN>`: Accept or reject partial writes (default is `true`).
|
|
- `?no_sync=<BOOLEAN>`: Control when writes are acknowledged:
|
|
- `no_sync=true`: Acknowledge writes before WAL persistence completes.
|
|
- `no_sync=false`: Acknowledges writes after WAL persistence completes (default).
|
|
- `?precision=<PRECISION>`: Specify the precision of the timestamp.
|
|
The default is `ns` (nanosecond) precision.
|
|
You can also use `auto` to let InfluxDB automatically determine the timestamp
|
|
precision by identifying which precisions resolves most closely to _now_.
|
|
|
|
##### Request body
|
|
|
|
- Line protocol
|
|
|
|
{{<api-endpoint endpoint="/api/v3/write_lp?db=mydb&precision=nanosecond&accept_partial=true&no_sync=false" method="post" >}}
|
|
|
|
_The following example uses [cURL](https://curl.se/) to send a write request using
|
|
the {{< influxdb3/home-sample-link >}}, but you can use any HTTP client._
|
|
|
|
{{% influxdb/custom-timestamps %}}
|
|
```bash
|
|
curl -v "http://{{< influxdb/host >}}/api/v3/write_lp?db=sensors&precision=auto" \
|
|
--data-raw "home,room=Living\ Room temp=21.1,hum=35.9,co=0i 1735545600
|
|
home,room=Kitchen temp=21.0,hum=35.9,co=0i 1735545600
|
|
home,room=Living\ Room temp=21.4,hum=35.9,co=0i 1735549200
|
|
home,room=Kitchen temp=23.0,hum=36.2,co=0i 1735549200
|
|
home,room=Living\ Room temp=21.8,hum=36.0,co=0i 1735552800
|
|
home,room=Kitchen temp=22.7,hum=36.1,co=0i 1735552800
|
|
home,room=Living\ Room temp=22.2,hum=36.0,co=0i 1735556400
|
|
home,room=Kitchen temp=22.4,hum=36.0,co=0i 1735556400
|
|
home,room=Living\ Room temp=22.2,hum=35.9,co=0i 1735560000
|
|
home,room=Kitchen temp=22.5,hum=36.0,co=0i 1735560000
|
|
home,room=Living\ Room temp=22.4,hum=36.0,co=0i 1735563600
|
|
home,room=Kitchen temp=22.8,hum=36.5,co=1i 1735563600
|
|
home,room=Living\ Room temp=22.3,hum=36.1,co=0i 1735567200
|
|
home,room=Kitchen temp=22.8,hum=36.3,co=1i 1735567200
|
|
home,room=Living\ Room temp=22.3,hum=36.1,co=1i 1735570800
|
|
home,room=Kitchen temp=22.7,hum=36.2,co=3i 1735570800
|
|
home,room=Living\ Room temp=22.4,hum=36.0,co=4i 1735574400
|
|
home,room=Kitchen temp=22.4,hum=36.0,co=7i 1735574400
|
|
home,room=Living\ Room temp=22.6,hum=35.9,co=5i 1735578000
|
|
home,room=Kitchen temp=22.7,hum=36.0,co=9i 1735578000
|
|
home,room=Living\ Room temp=22.8,hum=36.2,co=9i 1735581600
|
|
home,room=Kitchen temp=23.3,hum=36.9,co=18i 1735581600
|
|
home,room=Living\ Room temp=22.5,hum=36.3,co=14i 1735585200
|
|
home,room=Kitchen temp=23.1,hum=36.6,co=22i 1735585200
|
|
home,room=Living\ Room temp=22.2,hum=36.4,co=17i 1735588800
|
|
home,room=Kitchen temp=22.7,hum=36.5,co=26i 1735588800"
|
|
```
|
|
{{% /influxdb/custom-timestamps %}}
|
|
|
|
- [Partial writes](#partial-writes)
|
|
- [Accept partial writes](#accept-partial-writes)
|
|
- [Do not accept partial writes](#do-not-accept-partial-writes)
|
|
- [Write responses](#write-responses)
|
|
- [Use no_sync for immediate write responses](#use-no_sync-for-immediate-write-responses)
|
|
|
|
> [!Note]
|
|
> #### InfluxDB client libraries
|
|
>
|
|
> InfluxData provides supported InfluxDB 3 client libraries that you can
|
|
> integrate with your code to construct data as time series points, and then
|
|
> write them as line protocol to an {{% product-name %}} database.
|
|
> For more information, see how to [use InfluxDB client libraries to write data](/influxdb3/version/write-data/client-libraries/).
|
|
|
|
## Partial writes
|
|
|
|
The `/api/v3/write_lp` endpoint lets you accept or reject partial writes using
|
|
the `accept_partial` parameter. This parameter changes the behavior of the API
|
|
when the write request contains invalid line protocol or schema conflicts.
|
|
|
|
For example, the following line protocol contains two points, each using a
|
|
different datatype for the `temp` field, which causes a schema conflict:
|
|
|
|
```
|
|
home,room=Sunroom temp=96 1735545600
|
|
home,room=Sunroom temp="hi" 1735549200
|
|
```
|
|
|
|
### Accept partial writes
|
|
|
|
With `accept_partial=true` (default), InfluxDB:
|
|
|
|
- Accepts and writes line `1`
|
|
- Rejects line `2`
|
|
- Returns a `400 Bad Request` status code and the following response body:
|
|
|
|
```
|
|
< HTTP/1.1 400 Bad Request
|
|
...
|
|
{
|
|
"error": "partial write of line protocol occurred",
|
|
"data": [
|
|
{
|
|
"original_line": "home,room=Sunroom temp=hi 1735549200",
|
|
"line_number": 2,
|
|
"error_message": "invalid column type for column 'temp', expected iox::column_type::field::float, got iox::column_type::field::string"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
### Do not accept partial writes
|
|
|
|
With `accept_partial=false`, InfluxDB:
|
|
|
|
- Rejects _all_ points in the batch
|
|
- Returns a `400 Bad Request` status code and the following response body:
|
|
|
|
```
|
|
< HTTP/1.1 400 Bad Request
|
|
...
|
|
{
|
|
"error": "parsing failed for write_lp endpoint",
|
|
"data": {
|
|
"original_line": "home,room=Sunroom temp=hi 1735549200",
|
|
"line_number": 2,
|
|
"error_message": "invalid column type for column 'temp', expected iox::column_type::field::float, got iox::column_type::field::string"
|
|
}
|
|
}
|
|
```
|
|
|
|
_For more information about the ingest path and data flow, see
|
|
[Data durability](/influxdb3/version/reference/internals/durability/)._
|
|
|
|
## Write responses
|
|
|
|
By default, {{% product-name %}} acknowledges writes after flushing the WAL file
|
|
to the Object store (occurring every second).
|
|
For high write throughput, you can send multiple concurrent write requests.
|
|
|
|
### Use no_sync for immediate write responses
|
|
|
|
To reduce the latency of writes, use the `no_sync` write option, which
|
|
acknowledges writes _before_ WAL persistence completes.
|
|
When `no_sync=true`, InfluxDB validates the data, writes the data to the WAL,
|
|
and then immediately responds to the client, without waiting for persistence to
|
|
the Object store.
|
|
|
|
> [!Tip]
|
|
> Using `no_sync=true` is best when prioritizing high-throughput writes over
|
|
> absolute durability.
|
|
|
|
- Default behavior (`no_sync=false`): Waits for data to be written to the Object
|
|
store before acknowledging the write. Reduces the risk of data loss, but
|
|
increases the latency of the response.
|
|
- With `no_sync=true`: Reduces write latency, but increases the risk of data
|
|
loss in case of a crash before WAL persistence.
|
|
|
|
The following example immediately returns a response without waiting for WAL
|
|
persistence:
|
|
|
|
```bash
|
|
curl "http://localhost:8181/api/v3/write_lp?db=sensors&no_sync=true" \
|
|
--data-raw "home,room=Sunroom temp=96"
|
|
```
|