InfluxDB: Flux - Distinct() vs. Unique()

Aus Wiki-WebPerfect
Wechseln zu: Navigation, Suche

Because I was confused several times about which function is the right one (distinct() or unique()) I write this site.

Base Data

All the the examples from this site are based from the following data:
01-base-table.png

Flux query to generate this data

import "array"

var = [
  {_time: time(v: "2021-12-10T00:01:00Z"), host: "HOST01", _field: "cpu_usage", _value: 37},
  {_time: time(v: "2021-12-10T00:02:00Z"), host: "HOST02", _field: "cpu_usage", _value: 72},
  {_time: time(v: "2021-12-10T00:03:00Z"), host: "HOST03", _field: "cpu_usage", _value: 88},
  {_time: time(v: "2021-12-10T00:04:00Z"), host: "HOST03", _field: "cpu_usage", _value: 11},
  {_time: time(v: "2021-12-10T00:05:00Z"), host: "HOST01", _field: "cpu_usage", _value: 37},
  {_time: time(v: "2021-12-10T00:06:00Z"), host: "HOST02", _field: "cpu_usage", _value: 90},
  {_time: time(v: "2021-12-10T00:07:00Z"), host: "HOST04", _field: "cpu_usage", _value: 90},
  {_time: time(v: "2021-12-10T00:08:00Z"), host: "HOST03", _field: "cpu_usage", _value: 77},
  {_time: time(v: "2021-12-10T00:09:00Z"), host: "HOST05", _field: "cpu_usage", _value: 57},
  {_time: time(v: "2021-12-10T00:10:00Z"), host: "HOST01", _field: "cpu_usage", _value: 13}
]

array.from(rows: var)



Distinct()

The distinct() function returns the unique values for a given column. Null is considered its own distinct value if it is present.
The _value of each output record is set to only the specified column. This means all other columns will be removed. Distinct() is a selector function.
The function distinct() by default uses the column _value.
For example I use distinct() mainly for Grafana template variables.

Function documentation: https://docs.influxdata.com/flux/v0.x/stdlib/universe/distinct/

Example 1 - without parameter

So if you use distinct() without parameter like following query:

..
array.from(rows: var)
  |> distinct()

Output
02-distinct without parameter.png

This means following rows will be removed:
01-base-table after distinct without parameter.png


Example 2 - with parameter "host"

So if you use distinct() with parameter like following query:

..
array.from(rows: var)
  |> distinct(column: "host)

Output
03-distinct with parameter.png

This means following rows will be removed:
01-base-table after distinct with parameter.png




Unique()

The unique() function returns all records containing unique values in a specified column. Group keys, record columns, and values are not modified. Unique() is a selector function.
The function unique() by default uses the column _value.
For example I use distinct() mainly for Grafana template variables.

Function documentation: https://docs.influxdata.com/flux/v0.x/stdlib/universe/unique/

Example 1 - without parameter

So if you use unique() without parameter like following query:

..
array.from(rows: var)
  |> unique()

Output
02-distinct without parameter.png

This means following rows will be removed:
01-base-table after distinct without parameter.png