From cc6a13474a7aaded16cc277d7759395267055e5e Mon Sep 17 00:00:00 2001 From: Scott Anderson Date: Thu, 7 Jan 2021 16:42:50 -0700 Subject: [PATCH 1/4] added common query guide for running calculations with multiple fields --- .../mulitple-fields-in-calculations.md | 111 ++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 content/influxdb/v2.0/query-data/common-queries/mulitple-fields-in-calculations.md diff --git a/content/influxdb/v2.0/query-data/common-queries/mulitple-fields-in-calculations.md b/content/influxdb/v2.0/query-data/common-queries/mulitple-fields-in-calculations.md new file mode 100644 index 000000000..06bc1e554 --- /dev/null +++ b/content/influxdb/v2.0/query-data/common-queries/mulitple-fields-in-calculations.md @@ -0,0 +1,111 @@ +--- +title: Use multiple fields in calculations +description: > + ... +influxdb/v2.0/tags: [queries] +menu: + influxdb_2_0: + parent: Common queries +weight: 204 +--- + +To use multiple fields values in a mathematic operation: + +1. [Filter by fields required in your calculation](#filter-by-fields) +2. [Pivot fields into columns](#pivot-fields-into-columns) +3. [Perform the mathematic calculation](#perform-the-calculation) + + +## Filter by fields +Use [`filter()`](/influxdb/v2.0/reference/flux/stdlib/built-in/transformations/filter/) +to return only the fields necessary for your calculation. +Use the [`or` logical operator](/influxdb/v2.0/reference/flux/language/operators/#logical-operators) +to filter by multiple fields. + +The following example queries two fields, `A` and `B`: + +```js +from(bucket: "example-bucket") + |> range(start: -1m) + |> filter(fn: (r) => r._field == "A" or r._field == "B") +``` + +This query returns one or more tables for each field. For example: + +{{< flex >}} +{{% flex-content %}} +| _time | _field | _value | +|:----- |:------:| ------:| +| 2021-01-01T00:00:00Z | A | 12.4 | +| 2021-01-01T00:00:15Z | A | 12.2 | +| 2021-01-01T00:00:30Z | A | 11.6 | +| 2021-01-01T00:00:45Z | A | 11.9 | +{{% /flex-content %}} +{{% flex-content %}} +| _time | _field | _value | +|:----- |:------:| ------:| +| 2021-01-01T00:00:00Z | B | 3.1 | +| 2021-01-01T00:00:15Z | B | 4.8 | +| 2021-01-01T00:00:30Z | B | 2.2 | +| 2021-01-01T00:00:45Z | B | 3.3 | +{{% /flex-content %}} +{{< /flex >}} + +## Pivot fields into columns +Use [`pivot()`](/influxdb/v2.0/reference/flux/stdlib/built-in/transformations/pivot/) +to pivot each field into a column so every row includes a value for each field. +Pivot on the `_time` column to align field values by time. + +{{% note %}} +To correctly pivot on `_time`, points for each field must have identical timestamps. +If timestamps are irregular or do not align perfectly, see +[Normalize irregular timestamps](/influxdb/v2.0/query-data/flux/manipulate-timestamps/#normalize-irregular-timestamps). +{{% /note %}} + +```js +// ... + |> pivot( + rowKey:["_time"], + columnKey: ["_field"], + valueColumn: "_value" + ) +``` + +Using the queried data [above](#filter-by-fields), this `pivot()` function returns: + +| _time | A | B | +|:----- | ------:| ------:| +| 2021-01-01T00:00:00Z | 12.4 | 3.1 | +| 2021-01-01T00:00:15Z | 12.2 | 4.8 | +| 2021-01-01T00:00:30Z | 11.6 | 2.2 | +| 2021-01-01T00:00:45Z | 11.9 | 3.3 | + +## Perform the calculation +Use [`map()`](/influxdb/v2.0/reference/flux/stdlib/built-in/transformations/map/) +to perform the mathematic operation using column values as operands. + +The following example uses values in the `A` and `B` columns to calculate a new `_value` column: + +```js +// ... + |> map(fn: (r) => ({ r with _value: r.A * r.B })) +``` + +Using the pivoted data above, this `map()` function returns: + +| _time | A | B | _value | +|:----- | ------:| ------:| ------:| +| 2021-01-01T00:00:00Z | 12.4 | 3.1 | 38.44 | +| 2021-01-01T00:00:15Z | 12.2 | 4.8 | 58.56 | +| 2021-01-01T00:00:30Z | 11.6 | 2.2 | 25.52 | +| 2021-01-01T00:00:45Z | 11.9 | 3.3 | 39.27 | + + +## Full example query +```js +from(bucket: "example-bucket") + |> range(start: -1m) + |> filter(fn: (r) => r._field == "A" or r._field == "B") + |> pivot(rowKey:["_time"], columnKey: ["_field"], valueColumn: "_value") + |> map(fn: (r) => ({ r with _value: r.A * r.B })) +``` From 294e3b8fc19a35b2bcb31f126692dc92c8d425c5 Mon Sep 17 00:00:00 2001 From: Scott Anderson Date: Thu, 7 Jan 2021 16:46:17 -0700 Subject: [PATCH 2/4] minor text updates --- .../common-queries/mulitple-fields-in-calculations.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/content/influxdb/v2.0/query-data/common-queries/mulitple-fields-in-calculations.md b/content/influxdb/v2.0/query-data/common-queries/mulitple-fields-in-calculations.md index 06bc1e554..4b52f14a4 100644 --- a/content/influxdb/v2.0/query-data/common-queries/mulitple-fields-in-calculations.md +++ b/content/influxdb/v2.0/query-data/common-queries/mulitple-fields-in-calculations.md @@ -1,7 +1,8 @@ --- title: Use multiple fields in calculations description: > - ... + Query multiple fields, pivot results, and use multiple field values to + calculate new values in query results. influxdb/v2.0/tags: [queries] menu: influxdb_2_0: @@ -9,13 +10,12 @@ menu: weight: 204 --- -To use multiple fields values in a mathematic operation: +To use multiple fields values in a mathematic calculations: 1. [Filter by fields required in your calculation](#filter-by-fields) 2. [Pivot fields into columns](#pivot-fields-into-columns) 3. [Perform the mathematic calculation](#perform-the-calculation) - ## Filter by fields Use [`filter()`](/influxdb/v2.0/reference/flux/stdlib/built-in/transformations/filter/) to return only the fields necessary for your calculation. @@ -100,7 +100,6 @@ Using the pivoted data above, this `map()` function returns: | 2021-01-01T00:00:30Z | 11.6 | 2.2 | 25.52 | | 2021-01-01T00:00:45Z | 11.9 | 3.3 | 39.27 | - ## Full example query ```js from(bucket: "example-bucket") From 0af8f5e04706b5f3428b0cb42a6927a4f02d41cc Mon Sep 17 00:00:00 2001 From: Scott Anderson Date: Thu, 7 Jan 2021 16:48:41 -0700 Subject: [PATCH 3/4] duplicated mulit-field guide in cloud --- .../mulitple-fields-in-calculations.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 content/influxdb/cloud/query-data/common-queries/mulitple-fields-in-calculations.md diff --git a/content/influxdb/cloud/query-data/common-queries/mulitple-fields-in-calculations.md b/content/influxdb/cloud/query-data/common-queries/mulitple-fields-in-calculations.md new file mode 100644 index 000000000..060ec8297 --- /dev/null +++ b/content/influxdb/cloud/query-data/common-queries/mulitple-fields-in-calculations.md @@ -0,0 +1,13 @@ +--- +title: Use multiple fields in calculations +description: > + Query multiple fields, pivot results, and use multiple field values to + calculate new values in query results. +influxdb/cloud/tags: [queries] +menu: + influxdb_cloud: + parent: Common queries +weight: 204 +--- + +{{< duplicate-oss >}} \ No newline at end of file From 2d5f6efa59dc3a9a9b2f88abec3700a16b4b90ee Mon Sep 17 00:00:00 2001 From: Scott Anderson Date: Fri, 8 Jan 2021 08:47:42 -0700 Subject: [PATCH 4/4] updates to multi-field-math guide to address PR feedback --- ...-calculations.md => multiple-fields-in-calculations.md} | 2 +- ...-calculations.md => multiple-fields-in-calculations.md} | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) rename content/influxdb/cloud/query-data/common-queries/{mulitple-fields-in-calculations.md => multiple-fields-in-calculations.md} (78%) rename content/influxdb/v2.0/query-data/common-queries/{mulitple-fields-in-calculations.md => multiple-fields-in-calculations.md} (93%) diff --git a/content/influxdb/cloud/query-data/common-queries/mulitple-fields-in-calculations.md b/content/influxdb/cloud/query-data/common-queries/multiple-fields-in-calculations.md similarity index 78% rename from content/influxdb/cloud/query-data/common-queries/mulitple-fields-in-calculations.md rename to content/influxdb/cloud/query-data/common-queries/multiple-fields-in-calculations.md index 060ec8297..15197ee20 100644 --- a/content/influxdb/cloud/query-data/common-queries/mulitple-fields-in-calculations.md +++ b/content/influxdb/cloud/query-data/common-queries/multiple-fields-in-calculations.md @@ -1,5 +1,5 @@ --- -title: Use multiple fields in calculations +title: Use multiple fields in a calculation description: > Query multiple fields, pivot results, and use multiple field values to calculate new values in query results. diff --git a/content/influxdb/v2.0/query-data/common-queries/mulitple-fields-in-calculations.md b/content/influxdb/v2.0/query-data/common-queries/multiple-fields-in-calculations.md similarity index 93% rename from content/influxdb/v2.0/query-data/common-queries/mulitple-fields-in-calculations.md rename to content/influxdb/v2.0/query-data/common-queries/multiple-fields-in-calculations.md index 4b52f14a4..eb7cf2dc4 100644 --- a/content/influxdb/v2.0/query-data/common-queries/mulitple-fields-in-calculations.md +++ b/content/influxdb/v2.0/query-data/common-queries/multiple-fields-in-calculations.md @@ -1,5 +1,5 @@ --- -title: Use multiple fields in calculations +title: Use multiple fields in a calculation description: > Query multiple fields, pivot results, and use multiple field values to calculate new values in query results. @@ -10,7 +10,7 @@ menu: weight: 204 --- -To use multiple fields values in a mathematic calculations: +To use values from multiple fields in a mathematic calculation: 1. [Filter by fields required in your calculation](#filter-by-fields) 2. [Pivot fields into columns](#pivot-fields-into-columns) @@ -53,8 +53,7 @@ This query returns one or more tables for each field. For example: ## Pivot fields into columns Use [`pivot()`](/influxdb/v2.0/reference/flux/stdlib/built-in/transformations/pivot/) -to pivot each field into a column so every row includes a value for each field. -Pivot on the `_time` column to align field values by time. +to align multiple fields by time. {{% note %}} To correctly pivot on `_time`, points for each field must have identical timestamps.