Write data from InfluxDB OSS to InfluxDB Cloud

Replicate writes to InfluxDB OSS to InfluxDB Cloud

To replicate all writes to an InfluxDB OSS instance to an InfluxDB Cloud instance, use InfluxDB replication streams.

InfluxDB Cloud rate limits

Write requests to InfluxDB Cloud are subject to the rate limits associated with your InfluxDB Cloud pricing plan.

  1. Query data from InfluxDB OSS.

  2. (Optional) or process data to write to InfluxDB Cloud.

  3. Use the following guidelines:

    • to(): Use to write data in field keys to the _field column and field values to the _value column.

    • experimental.to(): Use to write data in column names to corresponding field keys and column values to field values.

    See input and output examples for to() functions.

    • bucket: InfluxDB Cloud bucket to write to
    • host: InfluxDB Cloud region URL
    • org: InfluxDB Cloud organization
    • token: InfluxDB Cloud API Token

experimental.to()

  1. import "experimental"
  2. import "influxdata/influxdb/secrets"
  3. cloudToken = secrets.get(key: "INFLUX_CLOUD_API_TOKEN")
  4. from(bucket: "example-oss-bucket")
  5. |> range(start: -10m)
  6. |> filter(fn: (r) => r._measurement == "example-measurement")
  7. |> pivot(rowKey: ["_time"], columnKey: ["_field"], valueColumn: "_value")
  8. |> experimental.to(
  9. bucket: "example-cloud-bucket",
  10. host: "https://cloud2.influxdata.com",
  11. token: cloudToken,
  12. )

experimental.to()

  • to() requires _time, _measurement, _field, and _value columns.
  • to() writes all other columns as tags where the column name is the tag key and the column value is the tag value.

Input data

Output line protocol

  • experimental.to() requires _time and _measurement columns.
  • Columns in the (other than _measurement) are parsed as tags where the column name is the tag key and the column value is the tag value.
  • Columns not in the group key (other than _time_) are parsed as fields where the column name is the field key and the column value is the field value.

Input data

Group key = [_measurement, exampleTag]

Output line protocol

  1. example-m,exampleTag=A temp=80.0,rpm=4023i 1609459200000000000
  2. example-m,exampleTag=A temp=81.1,rpm=4901i 1609459320000000000

Downsample and write data to InfluxDB Cloud

Write min, max, and mean values to InfluxDB Cloud

  1. import "influxdata/influxdb/secrets"
  2. cloudToken = secrets.get(key: "INFLUX_CLOUD_API_TOKEN")
  3. data = from(bucket: "example-oss-bucket")
  4. |> range(start: -30m)
  5. |> filter(fn: (r) => r._measurement == "example-measurement")
  6. min = data |> aggregateWindow(every: 10m, fn: min) |> map(fn: (r) => ({ r with _field: "{$r._field}_min" }))
  7. max = data |> aggregateWindow(every: 10m, fn: max) |> map(fn: (r) => ({ r with _field: "{$r._field}_max" }))
  8. mean = data |> aggregateWindow(every: 10m, fn: mean) |> map(fn: (r) => ({ r with _field: "{$r._field}_mean" }))
  9. union(tables: [min, max, mean])
  10. |> to(
  11. bucket: "example-cloud-bucket",
  12. host: "https://cloud2.influxdata.com",
  13. org: "example-org",
  14. token: cloudToken,

To automatically and routinely write data from InfluxDB OSS to InfluxDB Cloud, create a task in your InfluxDB OSS instance that regularly queries, processes, and writes data to InfluxDB Cloud.