elasticsearch
Loading

ES|QL conditional functions and expressions

Serverless Stack

Conditional functions return one of their arguments by evaluating in an if-else manner. ES|QL supports these conditional functions:

Syntax

Embedded

Parameters

condition
A condition.
trueValue
The value that’s returned when the corresponding condition is the first to evaluate to true. The default value is returned when no condition matches.
elseValue

The value that’s returned when no condition evaluates to true.

Description

Accepts pairs of conditions and values. The function returns the value that belongs to the first condition that evaluates to true. If the number of arguments is odd, the last argument is the default value which is returned when no condition matches. If the number of arguments is even, and no condition matches, the function returns null.

Supported types

condition trueValue elseValue result
boolean boolean boolean boolean
boolean boolean boolean
boolean cartesian_point cartesian_point cartesian_point
boolean cartesian_point cartesian_point
boolean cartesian_shape cartesian_shape cartesian_shape
boolean cartesian_shape cartesian_shape
boolean date date date
boolean date date
boolean date_nanos date_nanos date_nanos
boolean date_nanos date_nanos
boolean dense_vector dense_vector dense_vector
boolean dense_vector dense_vector
boolean double double double
boolean double double
boolean geo_point geo_point geo_point
boolean geo_point geo_point
boolean geo_shape geo_shape geo_shape
boolean geo_shape geo_shape
boolean geohash geohash geohash
boolean geohash geohash
boolean geohex geohex geohex
boolean geohex geohex
boolean geotile geotile geotile
boolean geotile geotile
boolean integer integer integer
boolean integer integer
boolean ip ip ip
boolean ip ip
boolean keyword keyword keyword
boolean keyword text keyword
boolean keyword keyword
boolean long long long
boolean long long
boolean text keyword keyword
boolean text text keyword
boolean text keyword
boolean unsigned_long unsigned_long unsigned_long
boolean unsigned_long unsigned_long
boolean version version version
boolean version version

Examples

Determine whether employees are monolingual, bilingual, or polyglot:

FROM employees
| EVAL type = CASE(
    languages <= 1, "monolingual",
    languages <= 2, "bilingual",
     "polyglot")
| KEEP emp_no, languages, type
		
emp_no:integer languages:integer type:keyword
10001 2 bilingual
10002 5 polyglot
10003 4 polyglot
10004 5 polyglot
10005 1 monolingual

Calculate the total connection success rate based on log messages:

FROM sample_data
| EVAL successful = CASE(
    STARTS_WITH(message, "Connected to"), 1,
    message == "Connection error", 0
  )
| STATS success_rate = AVG(successful)
		
success_rate:double
0.5

Calculate an hourly error rate as a percentage of the total number of log messages:

FROM sample_data
| EVAL error = CASE(message LIKE "*error*", 1, 0)
| EVAL hour = DATE_TRUNC(1 hour, @timestamp)
| STATS error_rate = AVG(error) by hour
| SORT hour
		
error_rate:double hour:date
0.0 2023-10-23T12:00:00.000Z
0.6 2023-10-23T13:00:00.000Z

Syntax

Embedded

Parameters

first
Expression to evaluate.
rest

Other expression to evaluate.

Description

Returns the first of its arguments that is not null. If all arguments are null, it returns null.

Supported types

first rest result
boolean boolean boolean
boolean boolean
cartesian_point cartesian_point cartesian_point
cartesian_shape cartesian_shape cartesian_shape
date date date
date_nanos date_nanos date_nanos
geo_point geo_point geo_point
geo_shape geo_shape geo_shape
geohash geohash geohash
geohex geohex geohex
geotile geotile geotile
integer integer integer
integer integer
ip ip ip
keyword keyword keyword
keyword keyword
long long long
long long
text text keyword
text keyword
version version version

Example

ROW a=null, b="b"
| EVAL COALESCE(a, b)
		
a:null b:keyword COALESCE(a, b):keyword
null b b

Syntax

Embedded

Parameters

first
First of the columns to evaluate.
rest

The rest of the columns to evaluate.

Description

Returns the maximum value from multiple columns. This is similar to MV_MAX except it is intended to run on multiple columns at once.

Note

When run on keyword or text fields, this returns the last string in alphabetical order. When run on boolean columns this will return true if any values are true.

Supported types

first rest result
boolean boolean boolean
boolean boolean
date date date
date_nanos date_nanos date_nanos
double double double
integer integer integer
integer integer
ip ip ip
keyword keyword keyword
keyword keyword
long long long
long long
text text keyword
text keyword
version version version

Example

ROW a = 10, b = 20
| EVAL g = GREATEST(a, b)
		
a:integer b:integer g:integer
10 20 20

Syntax

Embedded

Parameters

first
First of the columns to evaluate.
rest

The rest of the columns to evaluate.

Description

Returns the minimum value from multiple columns. This is similar to MV_MIN except it is intended to run on multiple columns at once.

Supported types

first rest result
boolean boolean boolean
boolean boolean
date date date
date_nanos date_nanos date_nanos
double double double
integer integer integer
integer integer
ip ip ip
keyword keyword keyword
keyword keyword
long long long
long long
text text keyword
text keyword
version version version

Example

ROW a = 10, b = 20
| EVAL l = LEAST(a, b)
		
a:integer b:integer l:integer
10 20 10

Stack Planned

Syntax

Embedded

Parameters

field
Numeric expression. If null, the function returns null.
min
The min value to clamp data into.
max

The max value to clamp data into.

Description

Limits (or clamps) the values of all samples to have a lower limit of min and an upper limit of max.

Supported types

field min max result
boolean boolean boolean boolean
date date date date
double double double double
double integer integer double
double long long double
double unsigned_long unsigned_long double
integer double double double
integer integer integer integer
integer long long long
integer unsigned_long unsigned_long unsigned_long
ip ip ip ip
keyword keyword keyword keyword
long double double double
long integer integer long
long long long long
long unsigned_long unsigned_long unsigned_long
unsigned_long double double double
unsigned_long integer integer unsigned_long
unsigned_long long long long
unsigned_long unsigned_long unsigned_long unsigned_long
version version version version

Example

TS k8s
| EVAL full_clamped_cost = clamp(network.cost, clamp_max(network.bytes_in, 5), network.bytes_in / 100)
| KEEP full_clamped_cost, @timestamp
		
full_clamped_cost:double @timestamp:datetime
10.0 2024-05-10T00:18:33.000Z
9.0 2024-05-10T00:04:49.000Z
9.0 2024-05-10T00:15:51.000Z
9.0 2024-05-10T00:17:12.000Z
9.0 2024-05-10T00:20:46.000Z

Stack Planned

Syntax

Embedded

Parameters

field
field to clamp.
min

The min value to clamp data into.

Description

Limits (or clamps) all input sample values to a lower bound of min. Any value below min is set to min.

Supported types

field min result
boolean boolean boolean
date date date
double double double
double integer double
double long double
double unsigned_long double
integer double double
integer integer integer
integer long long
integer unsigned_long unsigned_long
ip ip ip
keyword keyword keyword
long double double
long integer long
long long long
long unsigned_long unsigned_long
unsigned_long double double
unsigned_long integer unsigned_long
unsigned_long long long
unsigned_long unsigned_long unsigned_long
version version version

Example

FROM k8s
| STATS full_clamped_cost=sum(clamp(network.cost, 1, 2)), clamped_cost=sum(clamp_max(network.cost, 1)), clamped_min_cost=sum(clamp_min(network.cost, 10)) BY time_bucket = bucket(@timestamp,1minute)
		
full_clamped_cost:double clamped_cost:double clamped_min_cost:double time_bucket:datetime
39.0 20.0 206.25 2024-05-10T00:09:00.000Z
29.125 15.5 173.0 2024-05-10T00:18:00.000Z
28.0 14.125 155.625 2024-05-10T00:17:00.000Z
23.25 12.0 124.875 2024-05-10T00:08:00.000Z

Stack Planned

Syntax

Embedded

Parameters

field
field to clamp.
max

The max value to clamp data into.

Description

Limits (or clamps) all input sample values to an upper bound of max. Any value above max is reduced to max.

Supported types

field max result
boolean boolean boolean
date date date
double double double
double integer double
double long double
double unsigned_long double
integer double double
integer integer integer
integer long long
integer unsigned_long unsigned_long
ip ip ip
keyword keyword keyword
long double double
long integer long
long long long
long unsigned_long unsigned_long
unsigned_long double double
unsigned_long integer unsigned_long
unsigned_long long long
unsigned_long unsigned_long unsigned_long
version version version

Example

TS k8s
| STATS full_clamped_cost=sum(clamp(network.cost, 1, 2)), clamped_cost=sum(clamp_max(network.cost, 1)), clamped_min_cost=sum(clamp_min(network.cost, 10)) BY time_bucket = bucket(@timestamp,1minute)
		
full_clamped_cost:double clamped_cost:double clamped_min_cost:double time_bucket:datetime
18.0 9.0 94.875 2024-05-10T00:09:00.000Z
15.25 8.0 84.125 2024-05-10T00:08:00.000Z
15.0 8.0 83.5 2024-05-10T00:15:00.000Z
13.75 7.0 71.625 2024-05-10T00:22:00.000Z
13.125 7.5 90.5 2024-05-10T00:18:00.000Z