From cf8eeca143b62a0997f89692069496ba3673db97 Mon Sep 17 00:00:00 2001 From: Sunbrye Ly Date: Fri, 19 Aug 2022 18:15:17 -0700 Subject: [PATCH 1/4] fix: not working on cloud yet... --- .../cloud/api-guide/tutorials/_index.md | 8 ++--- .../client-library-starter/_index.md | 13 -------- .../{client-library-starter => }/nodejs.md | 2 +- .../{client-library-starter => }/python.md | 2 +- .../v2.3/api-guide/tutorials/_index.md | 23 ++++++++++++-- .../client-library-starter/_index.md | 30 ------------------- .../{client-library-starter => }/nodejs.md | 0 .../{client-library-starter => }/python.md | 0 8 files changed, 26 insertions(+), 52 deletions(-) delete mode 100644 content/influxdb/cloud/api-guide/tutorials/client-library-starter/_index.md rename content/influxdb/cloud/api-guide/tutorials/{client-library-starter => }/nodejs.md (92%) rename content/influxdb/cloud/api-guide/tutorials/{client-library-starter => }/python.md (91%) delete mode 100644 content/influxdb/v2.3/api-guide/tutorials/client-library-starter/_index.md rename content/influxdb/v2.3/api-guide/tutorials/{client-library-starter => }/nodejs.md (100%) rename content/influxdb/v2.3/api-guide/tutorials/{client-library-starter => }/python.md (100%) diff --git a/content/influxdb/cloud/api-guide/tutorials/_index.md b/content/influxdb/cloud/api-guide/tutorials/_index.md index 5e09b82ad..8940a7620 100644 --- a/content/influxdb/cloud/api-guide/tutorials/_index.md +++ b/content/influxdb/cloud/api-guide/tutorials/_index.md @@ -1,7 +1,7 @@ --- -title: InfluxDB API client library tutorials -seotitle: Get started with InfluxDB API client libraries -description: Follow step-by-step tutorials to for InfluxDB API client libraries in your favorite framework or language. +title: InfluxDB API client library starter +seotitle: Starter tutorial for InfluxDB API client libraries +description: Follow step-by-step tutorials to build an IoT dashboard with API client libraries in your favorite framework or language. weight: 4 menu: influxdb_cloud: @@ -10,4 +10,4 @@ menu: influxdb/cloud/tags: [api] --- -{{< children >}} +{{< duplicate-oss >}} diff --git a/content/influxdb/cloud/api-guide/tutorials/client-library-starter/_index.md b/content/influxdb/cloud/api-guide/tutorials/client-library-starter/_index.md deleted file mode 100644 index 144a42a88..000000000 --- a/content/influxdb/cloud/api-guide/tutorials/client-library-starter/_index.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: InfluxDB API client library starter -seotitle: Starter tutorial for InfluxDB API client libraries -description: Follow step-by-step tutorials to build an IoT dashboard with API client libraries in your favorite framework or language. -weight: 4 -menu: - influxdb_cloud: - name: Client library starter - parent: Client library tutorials -influxdb/cloud/tags: [api] ---- - -{{< duplicate-oss >}} diff --git a/content/influxdb/cloud/api-guide/tutorials/client-library-starter/nodejs.md b/content/influxdb/cloud/api-guide/tutorials/nodejs.md similarity index 92% rename from content/influxdb/cloud/api-guide/tutorials/client-library-starter/nodejs.md rename to content/influxdb/cloud/api-guide/tutorials/nodejs.md index ee9c897d3..f8067452e 100644 --- a/content/influxdb/cloud/api-guide/tutorials/client-library-starter/nodejs.md +++ b/content/influxdb/cloud/api-guide/tutorials/nodejs.md @@ -9,7 +9,7 @@ menu: influxdb_cloud: identifier: client-library-starter-js name: JavaScript - parent: Client library starter + parent: Client library tutorials influxdb/cloud/tags: [api, javascript, nodejs] --- diff --git a/content/influxdb/cloud/api-guide/tutorials/client-library-starter/python.md b/content/influxdb/cloud/api-guide/tutorials/python.md similarity index 91% rename from content/influxdb/cloud/api-guide/tutorials/client-library-starter/python.md rename to content/influxdb/cloud/api-guide/tutorials/python.md index 683360a54..dffdeaead 100644 --- a/content/influxdb/cloud/api-guide/tutorials/client-library-starter/python.md +++ b/content/influxdb/cloud/api-guide/tutorials/python.md @@ -10,7 +10,7 @@ menu: influxdb_cloud: identifier: client-library-starter-py name: Python - parent: Client library starter + parent: Client library tutorials influxdb/cloud/tags: [api, python] --- diff --git a/content/influxdb/v2.3/api-guide/tutorials/_index.md b/content/influxdb/v2.3/api-guide/tutorials/_index.md index 653be6318..80cfb69cf 100644 --- a/content/influxdb/v2.3/api-guide/tutorials/_index.md +++ b/content/influxdb/v2.3/api-guide/tutorials/_index.md @@ -1,7 +1,7 @@ --- -title: InfluxDB API client library tutorials -seotitle: Get started with InfluxDB API client libraries -description: Follow step-by-step tutorials to for InfluxDB API client libraries in your favorite framework or language. +title: InfluxDB API client library starter +seotitle: Starter tutorial for InfluxDB API client libraries +description: Follow step-by-step tutorials to build an IoT dashboard with API client libraries in your favorite framework or language. weight: 4 menu: influxdb_2_3: @@ -10,4 +10,21 @@ menu: influxdb/v2.3/tags: [api] --- +Follow step-by-step tutorials to build an Internet-of-Things (IoT) application with InfluxData client libraries and your favorite framework or language. +InfluxData and the user community maintain client libraries for developers who want to take advantage of: + +- Idioms for InfluxDB requests, responses, and errors. +- Common patterns in a familiar programming language. +- Faster development and less boilerplate code. + +These tutorials walk through using the InfluxDB API and +client libraries to build a modern application as you learn the following: + +- InfluxDB core concepts. +- How the application interacts with devices and InfluxDB. +- How to authenticate apps and devices to the API. +- How to install a client library. +- How to write and query data in InfluxDB. +- How to use the InfluxData UI libraries to format data and create visualizations. + {{< children >}} diff --git a/content/influxdb/v2.3/api-guide/tutorials/client-library-starter/_index.md b/content/influxdb/v2.3/api-guide/tutorials/client-library-starter/_index.md deleted file mode 100644 index 083cfc910..000000000 --- a/content/influxdb/v2.3/api-guide/tutorials/client-library-starter/_index.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: InfluxDB API client library starter -seotitle: Starter tutorial for InfluxDB API client libraries -description: Follow step-by-step tutorials to build an IoT dashboard with API client libraries in your favorite framework or language. -weight: 4 -menu: - influxdb_2_3: - name: Client library starter - parent: Client library tutorials -influxdb/v2.3/tags: [api] ---- - -Follow step-by-step tutorials to build an Internet-of-Things (IoT) application with InfluxData client libraries and your favorite framework or language. -InfluxData and the user community maintain client libraries for developers who want to take advantage of: - -- Idioms for InfluxDB requests, responses, and errors. -- Common patterns in a familiar programming language. -- Faster development and less boilerplate code. - -These tutorials walk through using the InfluxDB API and -client libraries to build a modern application as you learn the following: - -- InfluxDB core concepts. -- How the application interacts with devices and InfluxDB. -- How to authenticate apps and devices to the API. -- How to install a client library. -- How to write and query data in InfluxDB. -- How to use the InfluxData UI libraries to format data and create visualizations. - -{{< children >}} diff --git a/content/influxdb/v2.3/api-guide/tutorials/client-library-starter/nodejs.md b/content/influxdb/v2.3/api-guide/tutorials/nodejs.md similarity index 100% rename from content/influxdb/v2.3/api-guide/tutorials/client-library-starter/nodejs.md rename to content/influxdb/v2.3/api-guide/tutorials/nodejs.md diff --git a/content/influxdb/v2.3/api-guide/tutorials/client-library-starter/python.md b/content/influxdb/v2.3/api-guide/tutorials/python.md similarity index 100% rename from content/influxdb/v2.3/api-guide/tutorials/client-library-starter/python.md rename to content/influxdb/v2.3/api-guide/tutorials/python.md From c57cba0527be95a95b0aa7a73bb52777378d8b4d Mon Sep 17 00:00:00 2001 From: Sunbrye Ly Date: Tue, 23 Aug 2022 12:18:30 -0700 Subject: [PATCH 2/4] fix: bump client library tutorials up one level --- .../cloud/api-guide/tutorials/nodejs.md | 2 +- .../cloud/api-guide/tutorials/python.md | 2 +- .../v2.3/api-guide/tutorials/nodejs.md | 2 +- .../v2.3/api-guide/tutorials/python.md | 2 +- .../v2.4/api-guide/tutorials/_index.md | 17 +++++++++++ .../client-library-starter/_index.md | 30 ------------------- .../{client-library-starter => }/nodejs.md | 2 +- .../{client-library-starter => }/python.md | 2 +- 8 files changed, 23 insertions(+), 36 deletions(-) delete mode 100644 content/influxdb/v2.4/api-guide/tutorials/client-library-starter/_index.md rename content/influxdb/v2.4/api-guide/tutorials/{client-library-starter => }/nodejs.md (99%) rename content/influxdb/v2.4/api-guide/tutorials/{client-library-starter => }/python.md (99%) diff --git a/content/influxdb/cloud/api-guide/tutorials/nodejs.md b/content/influxdb/cloud/api-guide/tutorials/nodejs.md index f8067452e..a2faed80c 100644 --- a/content/influxdb/cloud/api-guide/tutorials/nodejs.md +++ b/content/influxdb/cloud/api-guide/tutorials/nodejs.md @@ -13,4 +13,4 @@ menu: influxdb/cloud/tags: [api, javascript, nodejs] --- -{{% duplicate-oss %}} +{{< duplicate-oss >}} diff --git a/content/influxdb/cloud/api-guide/tutorials/python.md b/content/influxdb/cloud/api-guide/tutorials/python.md index dffdeaead..34853caeb 100644 --- a/content/influxdb/cloud/api-guide/tutorials/python.md +++ b/content/influxdb/cloud/api-guide/tutorials/python.md @@ -14,4 +14,4 @@ menu: influxdb/cloud/tags: [api, python] --- -{{% duplicate-oss %}} +{{< duplicate-oss >}} diff --git a/content/influxdb/v2.3/api-guide/tutorials/nodejs.md b/content/influxdb/v2.3/api-guide/tutorials/nodejs.md index 1dc43bc78..e7b72439a 100644 --- a/content/influxdb/v2.3/api-guide/tutorials/nodejs.md +++ b/content/influxdb/v2.3/api-guide/tutorials/nodejs.md @@ -9,7 +9,7 @@ menu: influxdb_2_3: identifier: client-library-starter-js name: JavaScript - parent: Client library starter + parent: Client library tutorials influxdb/v2.3/tags: [api, javascript, nodejs] --- diff --git a/content/influxdb/v2.3/api-guide/tutorials/python.md b/content/influxdb/v2.3/api-guide/tutorials/python.md index a573f8dde..72c269796 100644 --- a/content/influxdb/v2.3/api-guide/tutorials/python.md +++ b/content/influxdb/v2.3/api-guide/tutorials/python.md @@ -10,7 +10,7 @@ menu: influxdb_2_3: identifier: client-library-starter-py name: Python - parent: Client library starter + parent: Client library tutorials influxdb/v2.3/tags: [api, python] --- diff --git a/content/influxdb/v2.4/api-guide/tutorials/_index.md b/content/influxdb/v2.4/api-guide/tutorials/_index.md index 90cc8ec1b..05ce50aa3 100644 --- a/content/influxdb/v2.4/api-guide/tutorials/_index.md +++ b/content/influxdb/v2.4/api-guide/tutorials/_index.md @@ -10,4 +10,21 @@ menu: influxdb/v2.4/tags: [api] --- +Follow step-by-step tutorials to build an Internet-of-Things (IoT) application with InfluxData client libraries and your favorite framework or language. +InfluxData and the user community maintain client libraries for developers who want to take advantage of: + +- Idioms for InfluxDB requests, responses, and errors. +- Common patterns in a familiar programming language. +- Faster development and less boilerplate code. + +These tutorials walk through using the InfluxDB API and +client libraries to build a modern application as you learn the following: + +- InfluxDB core concepts. +- How the application interacts with devices and InfluxDB. +- How to authenticate apps and devices to the API. +- How to install a client library. +- How to write and query data in InfluxDB. +- How to use the InfluxData UI libraries to format data and create visualizations. + {{< children >}} diff --git a/content/influxdb/v2.4/api-guide/tutorials/client-library-starter/_index.md b/content/influxdb/v2.4/api-guide/tutorials/client-library-starter/_index.md deleted file mode 100644 index bb5836a62..000000000 --- a/content/influxdb/v2.4/api-guide/tutorials/client-library-starter/_index.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: InfluxDB API client library starter -seotitle: Starter tutorial for InfluxDB API client libraries -description: Follow step-by-step tutorials to build an IoT dashboard with API client libraries in your favorite framework or language. -weight: 4 -menu: - influxdb_2_4: - name: Client library starter - parent: Client library tutorials -influxdb/v2.4/tags: [api] ---- - -Follow step-by-step tutorials to build an Internet-of-Things (IoT) application with InfluxData client libraries and your favorite framework or language. -InfluxData and the user community maintain client libraries for developers who want to take advantage of: - -- Idioms for InfluxDB requests, responses, and errors. -- Common patterns in a familiar programming language. -- Faster development and less boilerplate code. - -These tutorials walk through using the InfluxDB API and -client libraries to build a modern application as you learn the following: - -- InfluxDB core concepts. -- How the application interacts with devices and InfluxDB. -- How to authenticate apps and devices to the API. -- How to install a client library. -- How to write and query data in InfluxDB. -- How to use the InfluxData UI libraries to format data and create visualizations. - -{{< children >}} diff --git a/content/influxdb/v2.4/api-guide/tutorials/client-library-starter/nodejs.md b/content/influxdb/v2.4/api-guide/tutorials/nodejs.md similarity index 99% rename from content/influxdb/v2.4/api-guide/tutorials/client-library-starter/nodejs.md rename to content/influxdb/v2.4/api-guide/tutorials/nodejs.md index a70a0b90d..1782b4b4a 100644 --- a/content/influxdb/v2.4/api-guide/tutorials/client-library-starter/nodejs.md +++ b/content/influxdb/v2.4/api-guide/tutorials/nodejs.md @@ -9,7 +9,7 @@ menu: influxdb_2_4: identifier: client-library-starter-js name: JavaScript - parent: Client library starter + parent: Client library tutorials influxdb/v2.4/tags: [api, javascript, nodejs] --- diff --git a/content/influxdb/v2.4/api-guide/tutorials/client-library-starter/python.md b/content/influxdb/v2.4/api-guide/tutorials/python.md similarity index 99% rename from content/influxdb/v2.4/api-guide/tutorials/client-library-starter/python.md rename to content/influxdb/v2.4/api-guide/tutorials/python.md index 1b14bf020..ba3577a13 100644 --- a/content/influxdb/v2.4/api-guide/tutorials/client-library-starter/python.md +++ b/content/influxdb/v2.4/api-guide/tutorials/python.md @@ -10,7 +10,7 @@ menu: influxdb_2_4: identifier: client-library-starter-py name: Python - parent: Client library starter + parent: Client library tutorials influxdb/v2.4/tags: [api, python] --- From 6a09ba9f17d3ab187987cef14049f9abea315c86 Mon Sep 17 00:00:00 2001 From: Scott Anderson Date: Thu, 25 Aug 2022 09:00:52 -0600 Subject: [PATCH 3/4] Update 'exists' guide with correct static example (#4388) * update exists guide with correct static example, closes #4387 * port exists changes back to all exists guides --- content/influxdb/v1.7/flux/guides/exists.md | 96 ++++++++++++------- content/influxdb/v1.8/flux/guides/exists.md | 96 ++++++++++++------- .../influxdb/v2.0/query-data/flux/exists.md | 92 +++++++++++------- .../influxdb/v2.1/query-data/flux/exists.md | 48 +++++++--- .../influxdb/v2.2/query-data/flux/exists.md | 48 +++++++--- .../influxdb/v2.3/query-data/flux/exists.md | 48 +++++++--- .../influxdb/v2.4/query-data/flux/exists.md | 51 +++++++--- 7 files changed, 322 insertions(+), 157 deletions(-) diff --git a/content/influxdb/v1.7/flux/guides/exists.md b/content/influxdb/v1.7/flux/guides/exists.md index fafb64a65..e70405e47 100644 --- a/content/influxdb/v1.7/flux/guides/exists.md +++ b/content/influxdb/v1.7/flux/guides/exists.md @@ -3,8 +3,8 @@ title: Check if a value exists seotitle: Use Flux to check if a value exists list_title: Exists description: > - Use the Flux `exists` operator to check if a record contains a key or if that - key's value is `null`. + Use the `exists` operator to check if a row record contains a column or if a + column's value is _null_. menu: influxdb_1_7: name: Exists @@ -20,63 +20,87 @@ list_code_example: | ``` --- -Use the Flux `exists` operator to check if a record contains a key or if that -key's value is `null`. +Use the `exists` operator to check if a row record contains a column or if a +column's value is _null_. ```js -p = {firstName: "John", lastName: "Doe", age: 42} - -exists p.firstName -// Returns true - -exists p.height -// Returns false +(r) => exists r.column ``` If you're just getting started with Flux queries, check out the following: -- [Get started with Flux](/influxdb/v1.7/flux/get-started/) for a conceptual overview of Flux and parts of a Flux query. -- [Execute queries](/influxdb/v1.7/flux/guides/execute-queries/) to discover a variety of ways to run your queries. +- [Get started with Flux](/{{< latest "flux" >}}/get-started/) for a conceptual overview of Flux and parts of a Flux query. +- [Execute queries](/influxdb/v2.4/query-data/execute-queries/) to discover a variety of ways to run your queries. Use `exists` with row functions ( [`filter()`](/{{< latest "flux" >}}/stdlib/universe/filter/), [`map()`](/{{< latest "flux" >}}/stdlib/universe/map/), [`reduce()`](/{{< latest "flux" >}}/stdlib/universe/reduce/)) -to check if a row includes a column or if the value for that column is `null`. +to check if a row includes a column or if the value for that column is _null_. #### Filter null values + ```js -from(bucket: "db/rp") - |> range(start: -5m) - |> filter(fn: (r) => exists r._value) +from(bucket: "example-bucket") + |> range(start: -5m) + |> filter(fn: (r) => exists r._value) ``` #### Map values based on existence + ```js from(bucket: "default") - |> range(start: -30s) - |> map(fn: (r) => ({ - r with - human_readable: - if exists r._value then "${r._field} is ${string(v:r._value)}." - else "${r._field} has no value." - })) + |> range(start: -30s) + |> map( + fn: (r) => ({r with + human_readable: if exists r._value then + "${r._field} is ${string(v: r._value)}." + else + "${r._field} has no value.", + }), + ) ``` #### Ignore null values in a custom aggregate function + ```js -customSumProduct = (tables=<-) => - tables +customSumProduct = (tables=<-) => tables |> reduce( - identity: {sum: 0.0, product: 1.0}, - fn: (r, accumulator) => ({ - r with - sum: - if exists r._value then r._value + accumulator.sum - else accumulator.sum, - product: - if exists r._value then r.value * accumulator.product - else accumulator.product - }) + identity: {sum: 0.0, product: 1.0}, + fn: (r, accumulator) => ({r with + sum: if exists r._value then + r._value + accumulator.sum + else + accumulator.sum, + product: if exists r._value then + r.value * accumulator.product + else + accumulator.product, + }), ) ``` + +#### Check if a statically defined record contains a key + +When you use the [record literal syntax](/flux/v0.x/data-types/composite/record/#record-syntax) +to statically define a record, Flux knows the record type and what keys to expect. + +- If the key exists in the static record, `exists` returns `true`. +- If the key does not exist in the static record, because the record type is + statically known, `exists` returns an error. + +```js +import "internal/debug" + +p = { + firstName: "John", + lastName: "Doe", + age: 42, +} + +exists p.firstName +// Returns true + +exists p.height +// Returns "error: record is missing label height" +``` diff --git a/content/influxdb/v1.8/flux/guides/exists.md b/content/influxdb/v1.8/flux/guides/exists.md index 27a9085e7..13a2469b7 100644 --- a/content/influxdb/v1.8/flux/guides/exists.md +++ b/content/influxdb/v1.8/flux/guides/exists.md @@ -3,8 +3,8 @@ title: Check if a value exists seotitle: Use Flux to check if a value exists list_title: Exists description: > - Use the Flux `exists` operator to check if a record contains a key or if that - key's value is `null`. + Use the `exists` operator to check if a row record contains a column or if a + column's value is _null_. menu: influxdb_1_8: name: Exists @@ -20,63 +20,87 @@ list_code_example: | ``` --- -Use the Flux `exists` operator to check if a record contains a key or if that -key's value is `null`. +Use the `exists` operator to check if a row record contains a column or if a +column's value is _null_. ```js -p = {firstName: "John", lastName: "Doe", age: 42} - -exists p.firstName -// Returns true - -exists p.height -// Returns false +(r) => exists r.column ``` If you're just getting started with Flux queries, check out the following: -- [Get started with Flux](/influxdb/v1.8/flux/get-started/) for a conceptual overview of Flux and parts of a Flux query. -- [Execute queries](/influxdb/v1.8/flux/guides/execute-queries/) to discover a variety of ways to run your queries. +- [Get started with Flux](/{{< latest "flux" >}}/get-started/) for a conceptual overview of Flux and parts of a Flux query. +- [Execute queries](/influxdb/v2.4/query-data/execute-queries/) to discover a variety of ways to run your queries. Use `exists` with row functions ( [`filter()`](/{{< latest "flux" >}}/stdlib/universe/filter/), [`map()`](/{{< latest "flux" >}}/stdlib/universe/map/), [`reduce()`](/{{< latest "flux" >}}/stdlib/universe/reduce/)) -to check if a row includes a column or if the value for that column is `null`. +to check if a row includes a column or if the value for that column is _null_. #### Filter null values + ```js -from(bucket: "db/rp") - |> range(start: -5m) - |> filter(fn: (r) => exists r._value) +from(bucket: "example-bucket") + |> range(start: -5m) + |> filter(fn: (r) => exists r._value) ``` #### Map values based on existence + ```js from(bucket: "default") - |> range(start: -30s) - |> map(fn: (r) => ({ - r with - human_readable: - if exists r._value then "${r._field} is ${string(v:r._value)}." - else "${r._field} has no value." - })) + |> range(start: -30s) + |> map( + fn: (r) => ({r with + human_readable: if exists r._value then + "${r._field} is ${string(v: r._value)}." + else + "${r._field} has no value.", + }), + ) ``` #### Ignore null values in a custom aggregate function + ```js -customSumProduct = (tables=<-) => - tables +customSumProduct = (tables=<-) => tables |> reduce( - identity: {sum: 0.0, product: 1.0}, - fn: (r, accumulator) => ({ - r with - sum: - if exists r._value then r._value + accumulator.sum - else accumulator.sum, - product: - if exists r._value then r.value * accumulator.product - else accumulator.product - }) + identity: {sum: 0.0, product: 1.0}, + fn: (r, accumulator) => ({r with + sum: if exists r._value then + r._value + accumulator.sum + else + accumulator.sum, + product: if exists r._value then + r.value * accumulator.product + else + accumulator.product, + }), ) ``` + +#### Check if a statically defined record contains a key + +When you use the [record literal syntax](/flux/v0.x/data-types/composite/record/#record-syntax) +to statically define a record, Flux knows the record type and what keys to expect. + +- If the key exists in the static record, `exists` returns `true`. +- If the key does not exist in the static record, because the record type is + statically known, `exists` returns an error. + +```js +import "internal/debug" + +p = { + firstName: "John", + lastName: "Doe", + age: 42, +} + +exists p.firstName +// Returns true + +exists p.height +// Returns "error: record is missing label height" +``` diff --git a/content/influxdb/v2.0/query-data/flux/exists.md b/content/influxdb/v2.0/query-data/flux/exists.md index 60dc55cec..ed0df123b 100644 --- a/content/influxdb/v2.0/query-data/flux/exists.md +++ b/content/influxdb/v2.0/query-data/flux/exists.md @@ -3,8 +3,8 @@ title: Check if a value exists seotitle: Use Flux to check if a value exists list_title: Exists description: > - Use the Flux `exists` operator to check if a record contains a key or if that - key's value is `null`. + Use the `exists` operator to check if a row record contains a column or if a + column's value is _null_. influxdb/v2.0/tags: [exists] menu: influxdb_2_0: @@ -24,63 +24,87 @@ list_code_example: | ``` --- -Use the Flux `exists` operator to check if a record contains a key or if that -key's value is `null`. +Use the `exists` operator to check if a row record contains a column or if a +column's value is _null_. ```js -p = {firstName: "John", lastName: "Doe", age: 42} - -exists p.firstName -// Returns true - -exists p.height -// Returns false +(r) => exists r.column ``` If you're just getting started with Flux queries, check out the following: - [Get started with Flux](/{{< latest "flux" >}}/get-started/) for a conceptual overview of Flux and parts of a Flux query. -- [Execute queries](/influxdb/v2.0/query-data/execute-queries/) to discover a variety of ways to run your queries. +- [Execute queries](/influxdb/v2.4/query-data/execute-queries/) to discover a variety of ways to run your queries. Use `exists` with row functions ( [`filter()`](/{{< latest "flux" >}}/stdlib/universe/filter/), [`map()`](/{{< latest "flux" >}}/stdlib/universe/map/), [`reduce()`](/{{< latest "flux" >}}/stdlib/universe/reduce/)) -to check if a row includes a column or if the value for that column is `null`. +to check if a row includes a column or if the value for that column is _null_. #### Filter null values + ```js from(bucket: "example-bucket") - |> range(start: -5m) - |> filter(fn: (r) => exists r._value) + |> range(start: -5m) + |> filter(fn: (r) => exists r._value) ``` #### Map values based on existence + ```js from(bucket: "default") - |> range(start: -30s) - |> map(fn: (r) => ({ - r with - human_readable: - if exists r._value then "${r._field} is ${string(v:r._value)}." - else "${r._field} has no value." - })) + |> range(start: -30s) + |> map( + fn: (r) => ({r with + human_readable: if exists r._value then + "${r._field} is ${string(v: r._value)}." + else + "${r._field} has no value.", + }), + ) ``` #### Ignore null values in a custom aggregate function + ```js -customSumProduct = (tables=<-) => - tables +customSumProduct = (tables=<-) => tables |> reduce( - identity: {sum: 0.0, product: 1.0}, - fn: (r, accumulator) => ({ - r with - sum: - if exists r._value then r._value + accumulator.sum - else accumulator.sum, - product: - if exists r._value then r.value * accumulator.product - else accumulator.product - }) + identity: {sum: 0.0, product: 1.0}, + fn: (r, accumulator) => ({r with + sum: if exists r._value then + r._value + accumulator.sum + else + accumulator.sum, + product: if exists r._value then + r.value * accumulator.product + else + accumulator.product, + }), ) ``` + +#### Check if a statically defined record contains a key + +When you use the [record literal syntax](/flux/v0.x/data-types/composite/record/#record-syntax) +to statically define a record, Flux knows the record type and what keys to expect. + +- If the key exists in the static record, `exists` returns `true`. +- If the key does not exist in the static record, because the record type is + statically known, `exists` returns an error. + +```js +import "internal/debug" + +p = { + firstName: "John", + lastName: "Doe", + age: 42, +} + +exists p.firstName +// Returns true + +exists p.height +// Returns "error: record is missing label height" +``` diff --git a/content/influxdb/v2.1/query-data/flux/exists.md b/content/influxdb/v2.1/query-data/flux/exists.md index 2af8d69c2..a7d7fd909 100644 --- a/content/influxdb/v2.1/query-data/flux/exists.md +++ b/content/influxdb/v2.1/query-data/flux/exists.md @@ -3,8 +3,8 @@ title: Check if a value exists seotitle: Use Flux to check if a value exists list_title: Exists description: > - Use the Flux `exists` operator to check if a record contains a key or if that - key's value is `null`. + Use the `exists` operator to check if a row record contains a column or if a + column's value is _null_. influxdb/v2.1/tags: [exists] menu: influxdb_2_1: @@ -24,31 +24,26 @@ list_code_example: | ``` --- -Use the Flux `exists` operator to check if a record contains a key or if that -key's value is `null`. +Use the `exists` operator to check if a row record contains a column or if a +column's value is _null_. ```js -p = {firstName: "John", lastName: "Doe", age: 42} - -exists p.firstName -// Returns true - -exists p.height -// Returns false +(r) => exists r.column ``` If you're just getting started with Flux queries, check out the following: - [Get started with Flux](/{{< latest "flux" >}}/get-started/) for a conceptual overview of Flux and parts of a Flux query. -- [Execute queries](/influxdb/v2.1/query-data/execute-queries/) to discover a variety of ways to run your queries. +- [Execute queries](/influxdb/v2.4/query-data/execute-queries/) to discover a variety of ways to run your queries. Use `exists` with row functions ( [`filter()`](/{{< latest "flux" >}}/stdlib/universe/filter/), [`map()`](/{{< latest "flux" >}}/stdlib/universe/map/), [`reduce()`](/{{< latest "flux" >}}/stdlib/universe/reduce/)) -to check if a row includes a column or if the value for that column is `null`. +to check if a row includes a column or if the value for that column is _null_. #### Filter null values + ```js from(bucket: "example-bucket") |> range(start: -5m) @@ -56,6 +51,7 @@ from(bucket: "example-bucket") ``` #### Map values based on existence + ```js from(bucket: "default") |> range(start: -30s) @@ -70,6 +66,7 @@ from(bucket: "default") ``` #### Ignore null values in a custom aggregate function + ```js customSumProduct = (tables=<-) => tables |> reduce( @@ -86,3 +83,28 @@ customSumProduct = (tables=<-) => tables }), ) ``` + +#### Check if a statically defined record contains a key + +When you use the [record literal syntax](/flux/v0.x/data-types/composite/record/#record-syntax) +to statically define a record, Flux knows the record type and what keys to expect. + +- If the key exists in the static record, `exists` returns `true`. +- If the key does not exist in the static record, because the record type is + statically known, `exists` returns an error. + +```js +import "internal/debug" + +p = { + firstName: "John", + lastName: "Doe", + age: 42, +} + +exists p.firstName +// Returns true + +exists p.height +// Returns "error: record is missing label height" +``` diff --git a/content/influxdb/v2.2/query-data/flux/exists.md b/content/influxdb/v2.2/query-data/flux/exists.md index ec900c312..ebfc1aedb 100644 --- a/content/influxdb/v2.2/query-data/flux/exists.md +++ b/content/influxdb/v2.2/query-data/flux/exists.md @@ -3,8 +3,8 @@ title: Check if a value exists seotitle: Use Flux to check if a value exists list_title: Exists description: > - Use the Flux `exists` operator to check if a record contains a key or if that - key's value is `null`. + Use the `exists` operator to check if a row record contains a column or if a + column's value is _null_. influxdb/v2.2/tags: [exists] menu: influxdb_2_2: @@ -24,31 +24,26 @@ list_code_example: | ``` --- -Use the Flux `exists` operator to check if a record contains a key or if that -key's value is `null`. +Use the `exists` operator to check if a row record contains a column or if a +column's value is _null_. ```js -p = {firstName: "John", lastName: "Doe", age: 42} - -exists p.firstName -// Returns true - -exists p.height -// Returns false +(r) => exists r.column ``` If you're just getting started with Flux queries, check out the following: - [Get started with Flux](/{{< latest "flux" >}}/get-started/) for a conceptual overview of Flux and parts of a Flux query. -- [Execute queries](/influxdb/v2.2/query-data/execute-queries/) to discover a variety of ways to run your queries. +- [Execute queries](/influxdb/v2.4/query-data/execute-queries/) to discover a variety of ways to run your queries. Use `exists` with row functions ( [`filter()`](/{{< latest "flux" >}}/stdlib/universe/filter/), [`map()`](/{{< latest "flux" >}}/stdlib/universe/map/), [`reduce()`](/{{< latest "flux" >}}/stdlib/universe/reduce/)) -to check if a row includes a column or if the value for that column is `null`. +to check if a row includes a column or if the value for that column is _null_. #### Filter null values + ```js from(bucket: "example-bucket") |> range(start: -5m) @@ -56,6 +51,7 @@ from(bucket: "example-bucket") ``` #### Map values based on existence + ```js from(bucket: "default") |> range(start: -30s) @@ -70,6 +66,7 @@ from(bucket: "default") ``` #### Ignore null values in a custom aggregate function + ```js customSumProduct = (tables=<-) => tables |> reduce( @@ -86,3 +83,28 @@ customSumProduct = (tables=<-) => tables }), ) ``` + +#### Check if a statically defined record contains a key + +When you use the [record literal syntax](/flux/v0.x/data-types/composite/record/#record-syntax) +to statically define a record, Flux knows the record type and what keys to expect. + +- If the key exists in the static record, `exists` returns `true`. +- If the key does not exist in the static record, because the record type is + statically known, `exists` returns an error. + +```js +import "internal/debug" + +p = { + firstName: "John", + lastName: "Doe", + age: 42, +} + +exists p.firstName +// Returns true + +exists p.height +// Returns "error: record is missing label height" +``` diff --git a/content/influxdb/v2.3/query-data/flux/exists.md b/content/influxdb/v2.3/query-data/flux/exists.md index e2dc3e2ba..2701bb9df 100644 --- a/content/influxdb/v2.3/query-data/flux/exists.md +++ b/content/influxdb/v2.3/query-data/flux/exists.md @@ -3,8 +3,8 @@ title: Check if a value exists seotitle: Use Flux to check if a value exists list_title: Exists description: > - Use the Flux `exists` operator to check if a record contains a key or if that - key's value is `null`. + Use the `exists` operator to check if a row record contains a column or if a + column's value is _null_. influxdb/v2.3/tags: [exists] menu: influxdb_2_3: @@ -24,31 +24,26 @@ list_code_example: | ``` --- -Use the Flux `exists` operator to check if a record contains a key or if that -key's value is `null`. +Use the `exists` operator to check if a row record contains a column or if a +column's value is _null_. ```js -p = {firstName: "John", lastName: "Doe", age: 42} - -exists p.firstName -// Returns true - -exists p.height -// Returns false +(r) => exists r.column ``` If you're just getting started with Flux queries, check out the following: - [Get started with Flux](/{{< latest "flux" >}}/get-started/) for a conceptual overview of Flux and parts of a Flux query. -- [Execute queries](/influxdb/v2.3/query-data/execute-queries/) to discover a variety of ways to run your queries. +- [Execute queries](/influxdb/v2.4/query-data/execute-queries/) to discover a variety of ways to run your queries. Use `exists` with row functions ( [`filter()`](/{{< latest "flux" >}}/stdlib/universe/filter/), [`map()`](/{{< latest "flux" >}}/stdlib/universe/map/), [`reduce()`](/{{< latest "flux" >}}/stdlib/universe/reduce/)) -to check if a row includes a column or if the value for that column is `null`. +to check if a row includes a column or if the value for that column is _null_. #### Filter null values + ```js from(bucket: "example-bucket") |> range(start: -5m) @@ -56,6 +51,7 @@ from(bucket: "example-bucket") ``` #### Map values based on existence + ```js from(bucket: "default") |> range(start: -30s) @@ -70,6 +66,7 @@ from(bucket: "default") ``` #### Ignore null values in a custom aggregate function + ```js customSumProduct = (tables=<-) => tables |> reduce( @@ -86,3 +83,28 @@ customSumProduct = (tables=<-) => tables }), ) ``` + +#### Check if a statically defined record contains a key + +When you use the [record literal syntax](/flux/v0.x/data-types/composite/record/#record-syntax) +to statically define a record, Flux knows the record type and what keys to expect. + +- If the key exists in the static record, `exists` returns `true`. +- If the key does not exist in the static record, because the record type is + statically known, `exists` returns an error. + +```js +import "internal/debug" + +p = { + firstName: "John", + lastName: "Doe", + age: 42, +} + +exists p.firstName +// Returns true + +exists p.height +// Returns "error: record is missing label height" +``` diff --git a/content/influxdb/v2.4/query-data/flux/exists.md b/content/influxdb/v2.4/query-data/flux/exists.md index b508dec17..7056ca9cf 100644 --- a/content/influxdb/v2.4/query-data/flux/exists.md +++ b/content/influxdb/v2.4/query-data/flux/exists.md @@ -3,8 +3,8 @@ title: Check if a value exists seotitle: Use Flux to check if a value exists list_title: Exists description: > - Use the Flux `exists` operator to check if a record contains a key or if that - key's value is `null`. + Use the Flux `exists` operator to check if a row record contains a column or if + that column's value is `null`. influxdb/v2.4/tags: [exists] menu: influxdb_2_4: @@ -24,17 +24,11 @@ list_code_example: | ``` --- -Use the Flux `exists` operator to check if a record contains a key or if that -key's value is `null`. +Use the `exists` operator to check if a row record contains a column or if a +column's value is _null_. ```js -p = {firstName: "John", lastName: "Doe", age: 42} - -exists p.firstName -// Returns true - -exists p.height -// Returns false +(r) => exists r.column ``` If you're just getting started with Flux queries, check out the following: @@ -46,9 +40,10 @@ Use `exists` with row functions ( [`filter()`](/{{< latest "flux" >}}/stdlib/universe/filter/), [`map()`](/{{< latest "flux" >}}/stdlib/universe/map/), [`reduce()`](/{{< latest "flux" >}}/stdlib/universe/reduce/)) -to check if a row includes a column or if the value for that column is `null`. +to check if a row includes a column or if the value for that column is _null_. #### Filter null values + ```js from(bucket: "example-bucket") |> range(start: -5m) @@ -56,6 +51,7 @@ from(bucket: "example-bucket") ``` #### Map values based on existence + ```js from(bucket: "default") |> range(start: -30s) @@ -70,6 +66,7 @@ from(bucket: "default") ``` #### Ignore null values in a custom aggregate function + ```js customSumProduct = (tables=<-) => tables |> reduce( @@ -86,3 +83,33 @@ customSumProduct = (tables=<-) => tables }), ) ``` + +#### Check if a statically defined record contains a key + +When you use the [record literal syntax](/flux/v0.x/data-types/composite/record/#record-syntax) +to statically define a record, Flux knows the record type and what keys to expect. + +- If the key exists in the static record, `exists` returns `true`. +- If the key exists in the static record, but has a _null_ value, `exists` returns `false`. +- If the key does not exist in the static record, because the record type is + statically known, `exists` returns an error. + +```js +import "internal/debug" + +p = { + firstName: "John", + lastName: "Doe", + age: 42, + height: debug.null(type: "int"), +} + +exists p.firstName +// Returns true + +exists p.height +// Returns false + +exists p.hairColor +// Returns "error: record is missing label hairColor" +``` From 75c0d358e94f3bb4cbde4edf6d3f3720f0e1c620 Mon Sep 17 00:00:00 2001 From: Sunbrye Ly Date: Fri, 26 Aug 2022 10:16:45 -0700 Subject: [PATCH 4/4] fix: pr requested changes --- content/influxdb/v2.3/api-guide/tutorials/_index.md | 4 ++-- content/influxdb/v2.4/api-guide/tutorials/_index.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/content/influxdb/v2.3/api-guide/tutorials/_index.md b/content/influxdb/v2.3/api-guide/tutorials/_index.md index 80cfb69cf..3b6da3189 100644 --- a/content/influxdb/v2.3/api-guide/tutorials/_index.md +++ b/content/influxdb/v2.3/api-guide/tutorials/_index.md @@ -17,8 +17,8 @@ InfluxData and the user community maintain client libraries for developers who w - Common patterns in a familiar programming language. - Faster development and less boilerplate code. -These tutorials walk through using the InfluxDB API and -client libraries to build a modern application as you learn the following: +In these tutorials, you'll use the InfluxDB API and +client libraries to build a modern application, and learn the following: - InfluxDB core concepts. - How the application interacts with devices and InfluxDB. diff --git a/content/influxdb/v2.4/api-guide/tutorials/_index.md b/content/influxdb/v2.4/api-guide/tutorials/_index.md index 05ce50aa3..11a2dfb3f 100644 --- a/content/influxdb/v2.4/api-guide/tutorials/_index.md +++ b/content/influxdb/v2.4/api-guide/tutorials/_index.md @@ -17,8 +17,8 @@ InfluxData and the user community maintain client libraries for developers who w - Common patterns in a familiar programming language. - Faster development and less boilerplate code. -These tutorials walk through using the InfluxDB API and -client libraries to build a modern application as you learn the following: +In these tutorials, you'll use the InfluxDB API and +client libraries to build a modern application, and learn the following: - InfluxDB core concepts. - How the application interacts with devices and InfluxDB.