Merge branch 'master' into late-arriving-data

pull/4386/head
kelseiv 2022-08-26 17:38:30 -07:00 committed by GitHub
commit 4e88febd15
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
19 changed files with 371 additions and 245 deletions

View File

@ -1,7 +1,7 @@
--- ---
title: InfluxDB API client library tutorials title: InfluxDB API client library starter
seotitle: Get started with InfluxDB API client libraries seotitle: Starter tutorial for InfluxDB API client libraries
description: Follow step-by-step tutorials to for InfluxDB API client libraries in your favorite framework or language. description: Follow step-by-step tutorials to build an IoT dashboard with API client libraries in your favorite framework or language.
weight: 4 weight: 4
menu: menu:
influxdb_cloud: influxdb_cloud:
@ -10,4 +10,4 @@ menu:
influxdb/cloud/tags: [api] influxdb/cloud/tags: [api]
--- ---
{{< children >}} {{< duplicate-oss >}}

View File

@ -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 >}}

View File

@ -9,8 +9,8 @@ menu:
influxdb_cloud: influxdb_cloud:
identifier: client-library-starter-js identifier: client-library-starter-js
name: JavaScript name: JavaScript
parent: Client library starter parent: Client library tutorials
influxdb/cloud/tags: [api, javascript, nodejs] influxdb/cloud/tags: [api, javascript, nodejs]
--- ---
{{% duplicate-oss %}} {{< duplicate-oss >}}

View File

@ -10,8 +10,8 @@ menu:
influxdb_cloud: influxdb_cloud:
identifier: client-library-starter-py identifier: client-library-starter-py
name: Python name: Python
parent: Client library starter parent: Client library tutorials
influxdb/cloud/tags: [api, python] influxdb/cloud/tags: [api, python]
--- ---
{{% duplicate-oss %}} {{< duplicate-oss >}}

View File

@ -3,8 +3,8 @@ title: Check if a value exists
seotitle: Use Flux to check if a value exists seotitle: Use Flux to check if a value exists
list_title: Exists list_title: Exists
description: > description: >
Use the Flux `exists` operator to check if a record contains a key or if that Use the `exists` operator to check if a row record contains a column or if a
key's value is `null`. column's value is _null_.
menu: menu:
influxdb_1_7: influxdb_1_7:
name: Exists 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 Use the `exists` operator to check if a row record contains a column or if a
key's value is `null`. column's value is _null_.
```js ```js
p = {firstName: "John", lastName: "Doe", age: 42} (r) => exists r.column
exists p.firstName
// Returns true
exists p.height
// Returns false
``` ```
If you're just getting started with Flux queries, check out the following: 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. - [Get started with Flux](/{{< latest "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. - [Execute queries](/influxdb/v2.4/query-data/execute-queries/) to discover a variety of ways to run your queries.
Use `exists` with row functions ( Use `exists` with row functions (
[`filter()`](/{{< latest "flux" >}}/stdlib/universe/filter/), [`filter()`](/{{< latest "flux" >}}/stdlib/universe/filter/),
[`map()`](/{{< latest "flux" >}}/stdlib/universe/map/), [`map()`](/{{< latest "flux" >}}/stdlib/universe/map/),
[`reduce()`](/{{< latest "flux" >}}/stdlib/universe/reduce/)) [`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 #### Filter null values
```js ```js
from(bucket: "db/rp") from(bucket: "example-bucket")
|> range(start: -5m) |> range(start: -5m)
|> filter(fn: (r) => exists r._value) |> filter(fn: (r) => exists r._value)
``` ```
#### Map values based on existence #### Map values based on existence
```js ```js
from(bucket: "default") from(bucket: "default")
|> range(start: -30s) |> range(start: -30s)
|> map(fn: (r) => ({ |> map(
r with fn: (r) => ({r with
human_readable: human_readable: if exists r._value then
if exists r._value then "${r._field} is ${string(v:r._value)}." "${r._field} is ${string(v: r._value)}."
else "${r._field} has no value." else
})) "${r._field} has no value.",
}),
)
``` ```
#### Ignore null values in a custom aggregate function #### Ignore null values in a custom aggregate function
```js ```js
customSumProduct = (tables=<-) => customSumProduct = (tables=<-) => tables
tables
|> reduce( |> reduce(
identity: {sum: 0.0, product: 1.0}, identity: {sum: 0.0, product: 1.0},
fn: (r, accumulator) => ({ fn: (r, accumulator) => ({r with
r with sum: if exists r._value then
sum: r._value + accumulator.sum
if exists r._value then r._value + accumulator.sum else
else accumulator.sum, accumulator.sum,
product: product: if exists r._value then
if exists r._value then r.value * accumulator.product r.value * accumulator.product
else 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"
```

View File

@ -3,8 +3,8 @@ title: Check if a value exists
seotitle: Use Flux to check if a value exists seotitle: Use Flux to check if a value exists
list_title: Exists list_title: Exists
description: > description: >
Use the Flux `exists` operator to check if a record contains a key or if that Use the `exists` operator to check if a row record contains a column or if a
key's value is `null`. column's value is _null_.
menu: menu:
influxdb_1_8: influxdb_1_8:
name: Exists 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 Use the `exists` operator to check if a row record contains a column or if a
key's value is `null`. column's value is _null_.
```js ```js
p = {firstName: "John", lastName: "Doe", age: 42} (r) => exists r.column
exists p.firstName
// Returns true
exists p.height
// Returns false
``` ```
If you're just getting started with Flux queries, check out the following: 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. - [Get started with Flux](/{{< latest "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. - [Execute queries](/influxdb/v2.4/query-data/execute-queries/) to discover a variety of ways to run your queries.
Use `exists` with row functions ( Use `exists` with row functions (
[`filter()`](/{{< latest "flux" >}}/stdlib/universe/filter/), [`filter()`](/{{< latest "flux" >}}/stdlib/universe/filter/),
[`map()`](/{{< latest "flux" >}}/stdlib/universe/map/), [`map()`](/{{< latest "flux" >}}/stdlib/universe/map/),
[`reduce()`](/{{< latest "flux" >}}/stdlib/universe/reduce/)) [`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 #### Filter null values
```js ```js
from(bucket: "db/rp") from(bucket: "example-bucket")
|> range(start: -5m) |> range(start: -5m)
|> filter(fn: (r) => exists r._value) |> filter(fn: (r) => exists r._value)
``` ```
#### Map values based on existence #### Map values based on existence
```js ```js
from(bucket: "default") from(bucket: "default")
|> range(start: -30s) |> range(start: -30s)
|> map(fn: (r) => ({ |> map(
r with fn: (r) => ({r with
human_readable: human_readable: if exists r._value then
if exists r._value then "${r._field} is ${string(v:r._value)}." "${r._field} is ${string(v: r._value)}."
else "${r._field} has no value." else
})) "${r._field} has no value.",
}),
)
``` ```
#### Ignore null values in a custom aggregate function #### Ignore null values in a custom aggregate function
```js ```js
customSumProduct = (tables=<-) => customSumProduct = (tables=<-) => tables
tables
|> reduce( |> reduce(
identity: {sum: 0.0, product: 1.0}, identity: {sum: 0.0, product: 1.0},
fn: (r, accumulator) => ({ fn: (r, accumulator) => ({r with
r with sum: if exists r._value then
sum: r._value + accumulator.sum
if exists r._value then r._value + accumulator.sum else
else accumulator.sum, accumulator.sum,
product: product: if exists r._value then
if exists r._value then r.value * accumulator.product r.value * accumulator.product
else 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"
```

View File

@ -3,8 +3,8 @@ title: Check if a value exists
seotitle: Use Flux to check if a value exists seotitle: Use Flux to check if a value exists
list_title: Exists list_title: Exists
description: > description: >
Use the Flux `exists` operator to check if a record contains a key or if that Use the `exists` operator to check if a row record contains a column or if a
key's value is `null`. column's value is _null_.
influxdb/v2.0/tags: [exists] influxdb/v2.0/tags: [exists]
menu: menu:
influxdb_2_0: 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 Use the `exists` operator to check if a row record contains a column or if a
key's value is `null`. column's value is _null_.
```js ```js
p = {firstName: "John", lastName: "Doe", age: 42} (r) => exists r.column
exists p.firstName
// Returns true
exists p.height
// Returns false
``` ```
If you're just getting started with Flux queries, check out the following: 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. - [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 ( Use `exists` with row functions (
[`filter()`](/{{< latest "flux" >}}/stdlib/universe/filter/), [`filter()`](/{{< latest "flux" >}}/stdlib/universe/filter/),
[`map()`](/{{< latest "flux" >}}/stdlib/universe/map/), [`map()`](/{{< latest "flux" >}}/stdlib/universe/map/),
[`reduce()`](/{{< latest "flux" >}}/stdlib/universe/reduce/)) [`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 #### Filter null values
```js ```js
from(bucket: "example-bucket") from(bucket: "example-bucket")
|> range(start: -5m) |> range(start: -5m)
|> filter(fn: (r) => exists r._value) |> filter(fn: (r) => exists r._value)
``` ```
#### Map values based on existence #### Map values based on existence
```js ```js
from(bucket: "default") from(bucket: "default")
|> range(start: -30s) |> range(start: -30s)
|> map(fn: (r) => ({ |> map(
r with fn: (r) => ({r with
human_readable: human_readable: if exists r._value then
if exists r._value then "${r._field} is ${string(v:r._value)}." "${r._field} is ${string(v: r._value)}."
else "${r._field} has no value." else
})) "${r._field} has no value.",
}),
)
``` ```
#### Ignore null values in a custom aggregate function #### Ignore null values in a custom aggregate function
```js ```js
customSumProduct = (tables=<-) => customSumProduct = (tables=<-) => tables
tables
|> reduce( |> reduce(
identity: {sum: 0.0, product: 1.0}, identity: {sum: 0.0, product: 1.0},
fn: (r, accumulator) => ({ fn: (r, accumulator) => ({r with
r with sum: if exists r._value then
sum: r._value + accumulator.sum
if exists r._value then r._value + accumulator.sum else
else accumulator.sum, accumulator.sum,
product: product: if exists r._value then
if exists r._value then r.value * accumulator.product r.value * accumulator.product
else 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"
```

View File

@ -3,8 +3,8 @@ title: Check if a value exists
seotitle: Use Flux to check if a value exists seotitle: Use Flux to check if a value exists
list_title: Exists list_title: Exists
description: > description: >
Use the Flux `exists` operator to check if a record contains a key or if that Use the `exists` operator to check if a row record contains a column or if a
key's value is `null`. column's value is _null_.
influxdb/v2.1/tags: [exists] influxdb/v2.1/tags: [exists]
menu: menu:
influxdb_2_1: 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 Use the `exists` operator to check if a row record contains a column or if a
key's value is `null`. column's value is _null_.
```js ```js
p = {firstName: "John", lastName: "Doe", age: 42} (r) => exists r.column
exists p.firstName
// Returns true
exists p.height
// Returns false
``` ```
If you're just getting started with Flux queries, check out the following: 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. - [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 ( Use `exists` with row functions (
[`filter()`](/{{< latest "flux" >}}/stdlib/universe/filter/), [`filter()`](/{{< latest "flux" >}}/stdlib/universe/filter/),
[`map()`](/{{< latest "flux" >}}/stdlib/universe/map/), [`map()`](/{{< latest "flux" >}}/stdlib/universe/map/),
[`reduce()`](/{{< latest "flux" >}}/stdlib/universe/reduce/)) [`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 #### Filter null values
```js ```js
from(bucket: "example-bucket") from(bucket: "example-bucket")
|> range(start: -5m) |> range(start: -5m)
@ -56,6 +51,7 @@ from(bucket: "example-bucket")
``` ```
#### Map values based on existence #### Map values based on existence
```js ```js
from(bucket: "default") from(bucket: "default")
|> range(start: -30s) |> range(start: -30s)
@ -70,6 +66,7 @@ from(bucket: "default")
``` ```
#### Ignore null values in a custom aggregate function #### Ignore null values in a custom aggregate function
```js ```js
customSumProduct = (tables=<-) => tables customSumProduct = (tables=<-) => tables
|> reduce( |> 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"
```

View File

@ -3,8 +3,8 @@ title: Check if a value exists
seotitle: Use Flux to check if a value exists seotitle: Use Flux to check if a value exists
list_title: Exists list_title: Exists
description: > description: >
Use the Flux `exists` operator to check if a record contains a key or if that Use the `exists` operator to check if a row record contains a column or if a
key's value is `null`. column's value is _null_.
influxdb/v2.2/tags: [exists] influxdb/v2.2/tags: [exists]
menu: menu:
influxdb_2_2: 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 Use the `exists` operator to check if a row record contains a column or if a
key's value is `null`. column's value is _null_.
```js ```js
p = {firstName: "John", lastName: "Doe", age: 42} (r) => exists r.column
exists p.firstName
// Returns true
exists p.height
// Returns false
``` ```
If you're just getting started with Flux queries, check out the following: 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. - [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 ( Use `exists` with row functions (
[`filter()`](/{{< latest "flux" >}}/stdlib/universe/filter/), [`filter()`](/{{< latest "flux" >}}/stdlib/universe/filter/),
[`map()`](/{{< latest "flux" >}}/stdlib/universe/map/), [`map()`](/{{< latest "flux" >}}/stdlib/universe/map/),
[`reduce()`](/{{< latest "flux" >}}/stdlib/universe/reduce/)) [`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 #### Filter null values
```js ```js
from(bucket: "example-bucket") from(bucket: "example-bucket")
|> range(start: -5m) |> range(start: -5m)
@ -56,6 +51,7 @@ from(bucket: "example-bucket")
``` ```
#### Map values based on existence #### Map values based on existence
```js ```js
from(bucket: "default") from(bucket: "default")
|> range(start: -30s) |> range(start: -30s)
@ -70,6 +66,7 @@ from(bucket: "default")
``` ```
#### Ignore null values in a custom aggregate function #### Ignore null values in a custom aggregate function
```js ```js
customSumProduct = (tables=<-) => tables customSumProduct = (tables=<-) => tables
|> reduce( |> 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"
```

View File

@ -1,7 +1,7 @@
--- ---
title: InfluxDB API client library tutorials title: InfluxDB API client library starter
seotitle: Get started with InfluxDB API client libraries seotitle: Starter tutorial for InfluxDB API client libraries
description: Follow step-by-step tutorials to for InfluxDB API client libraries in your favorite framework or language. description: Follow step-by-step tutorials to build an IoT dashboard with API client libraries in your favorite framework or language.
weight: 4 weight: 4
menu: menu:
influxdb_2_3: influxdb_2_3:
@ -10,4 +10,21 @@ menu:
influxdb/v2.3/tags: [api] 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.
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.
- 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 >}} {{< children >}}

View File

@ -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 >}}

View File

@ -9,7 +9,7 @@ menu:
influxdb_2_3: influxdb_2_3:
identifier: client-library-starter-js identifier: client-library-starter-js
name: JavaScript name: JavaScript
parent: Client library starter parent: Client library tutorials
influxdb/v2.3/tags: [api, javascript, nodejs] influxdb/v2.3/tags: [api, javascript, nodejs]
--- ---

View File

@ -10,7 +10,7 @@ menu:
influxdb_2_3: influxdb_2_3:
identifier: client-library-starter-py identifier: client-library-starter-py
name: Python name: Python
parent: Client library starter parent: Client library tutorials
influxdb/v2.3/tags: [api, python] influxdb/v2.3/tags: [api, python]
--- ---

View File

@ -3,8 +3,8 @@ title: Check if a value exists
seotitle: Use Flux to check if a value exists seotitle: Use Flux to check if a value exists
list_title: Exists list_title: Exists
description: > description: >
Use the Flux `exists` operator to check if a record contains a key or if that Use the `exists` operator to check if a row record contains a column or if a
key's value is `null`. column's value is _null_.
influxdb/v2.3/tags: [exists] influxdb/v2.3/tags: [exists]
menu: menu:
influxdb_2_3: 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 Use the `exists` operator to check if a row record contains a column or if a
key's value is `null`. column's value is _null_.
```js ```js
p = {firstName: "John", lastName: "Doe", age: 42} (r) => exists r.column
exists p.firstName
// Returns true
exists p.height
// Returns false
``` ```
If you're just getting started with Flux queries, check out the following: 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. - [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 ( Use `exists` with row functions (
[`filter()`](/{{< latest "flux" >}}/stdlib/universe/filter/), [`filter()`](/{{< latest "flux" >}}/stdlib/universe/filter/),
[`map()`](/{{< latest "flux" >}}/stdlib/universe/map/), [`map()`](/{{< latest "flux" >}}/stdlib/universe/map/),
[`reduce()`](/{{< latest "flux" >}}/stdlib/universe/reduce/)) [`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 #### Filter null values
```js ```js
from(bucket: "example-bucket") from(bucket: "example-bucket")
|> range(start: -5m) |> range(start: -5m)
@ -56,6 +51,7 @@ from(bucket: "example-bucket")
``` ```
#### Map values based on existence #### Map values based on existence
```js ```js
from(bucket: "default") from(bucket: "default")
|> range(start: -30s) |> range(start: -30s)
@ -70,6 +66,7 @@ from(bucket: "default")
``` ```
#### Ignore null values in a custom aggregate function #### Ignore null values in a custom aggregate function
```js ```js
customSumProduct = (tables=<-) => tables customSumProduct = (tables=<-) => tables
|> reduce( |> 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"
```

View File

@ -10,4 +10,21 @@ menu:
influxdb/v2.4/tags: [api] 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.
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.
- 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 >}} {{< children >}}

View File

@ -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 >}}

View File

@ -9,7 +9,7 @@ menu:
influxdb_2_4: influxdb_2_4:
identifier: client-library-starter-js identifier: client-library-starter-js
name: JavaScript name: JavaScript
parent: Client library starter parent: Client library tutorials
influxdb/v2.4/tags: [api, javascript, nodejs] influxdb/v2.4/tags: [api, javascript, nodejs]
--- ---

View File

@ -10,7 +10,7 @@ menu:
influxdb_2_4: influxdb_2_4:
identifier: client-library-starter-py identifier: client-library-starter-py
name: Python name: Python
parent: Client library starter parent: Client library tutorials
influxdb/v2.4/tags: [api, python] influxdb/v2.4/tags: [api, python]
--- ---

View File

@ -3,8 +3,8 @@ title: Check if a value exists
seotitle: Use Flux to check if a value exists seotitle: Use Flux to check if a value exists
list_title: Exists list_title: Exists
description: > description: >
Use the Flux `exists` operator to check if a record contains a key or if that Use the Flux `exists` operator to check if a row record contains a column or if
key's value is `null`. that column's value is `null`.
influxdb/v2.4/tags: [exists] influxdb/v2.4/tags: [exists]
menu: menu:
influxdb_2_4: 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 Use the `exists` operator to check if a row record contains a column or if a
key's value is `null`. column's value is _null_.
```js ```js
p = {firstName: "John", lastName: "Doe", age: 42} (r) => exists r.column
exists p.firstName
// Returns true
exists p.height
// Returns false
``` ```
If you're just getting started with Flux queries, check out the following: 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/), [`filter()`](/{{< latest "flux" >}}/stdlib/universe/filter/),
[`map()`](/{{< latest "flux" >}}/stdlib/universe/map/), [`map()`](/{{< latest "flux" >}}/stdlib/universe/map/),
[`reduce()`](/{{< latest "flux" >}}/stdlib/universe/reduce/)) [`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 #### Filter null values
```js ```js
from(bucket: "example-bucket") from(bucket: "example-bucket")
|> range(start: -5m) |> range(start: -5m)
@ -56,6 +51,7 @@ from(bucket: "example-bucket")
``` ```
#### Map values based on existence #### Map values based on existence
```js ```js
from(bucket: "default") from(bucket: "default")
|> range(start: -30s) |> range(start: -30s)
@ -70,6 +66,7 @@ from(bucket: "default")
``` ```
#### Ignore null values in a custom aggregate function #### Ignore null values in a custom aggregate function
```js ```js
customSumProduct = (tables=<-) => tables customSumProduct = (tables=<-) => tables
|> reduce( |> 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"
```