From 01d11dfdb71bc0251f3d8a970b72847bab92a2cc Mon Sep 17 00:00:00 2001 From: Jonas Kunz Date: Wed, 19 Nov 2025 15:59:13 +0100 Subject: [PATCH 1/2] ESQL: Add support for exponential_histogram as case value --- .../main/resources/exponential_histogram.csv-spec | 13 +++++++++++++ .../function/scalar/conditional/Case.java | 6 ++++-- .../function/scalar/conditional/CaseTests.java | 1 - 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/x-pack/plugin/esql/qa/testFixtures/src/main/resources/exponential_histogram.csv-spec b/x-pack/plugin/esql/qa/testFixtures/src/main/resources/exponential_histogram.csv-spec index 471c33062a32a..90ce7645cc50e 100644 --- a/x-pack/plugin/esql/qa/testFixtures/src/main/resources/exponential_histogram.csv-spec +++ b/x-pack/plugin/esql/qa/testFixtures/src/main/resources/exponential_histogram.csv-spec @@ -80,6 +80,19 @@ NULL | NULL | NULL ; +histoAsCaseValue +required_capability: exponential_histogram_minmax_support + +FROM exp_histo_sample + | INLINE STATS p50 = PERCENTILE(responseTime, 50) BY instance, @timestamp + | EVAL filteredHisto = CASE(p50 > 0.1, responseTime) + | INLINE STATS filteredMax = MAX(filteredHisto) BY instance, @timestamp //MAX is null if the histogram is null + | STATS filteredCount = COUNT(filteredMax) +; + +filteredCount:long +3 +; ungroupedPercentiles required_capability: exponential_histogram_percentiles_support diff --git a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/expression/function/scalar/conditional/Case.java b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/expression/function/scalar/conditional/Case.java index 061afe0c746a0..438fdf08b6dbd 100644 --- a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/expression/function/scalar/conditional/Case.java +++ b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/expression/function/scalar/conditional/Case.java @@ -81,7 +81,8 @@ ConditionEvaluatorSupplier toEvaluator(ToEvaluator toEvaluator) { "keyword", "long", "unsigned_long", - "version" }, + "version", + "exponential_histogram"}, description = """ Accepts pairs of conditions and values. The function returns the value that belongs to the first condition that evaluates to `true`. @@ -126,7 +127,8 @@ public Case( "long", "text", "unsigned_long", - "version" }, + "version", + "exponential_histogram" }, description = "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." ) List rest diff --git a/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/expression/function/scalar/conditional/CaseTests.java b/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/expression/function/scalar/conditional/CaseTests.java index f4fa6e7574d51..4059ad709d0f5 100644 --- a/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/expression/function/scalar/conditional/CaseTests.java +++ b/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/expression/function/scalar/conditional/CaseTests.java @@ -66,7 +66,6 @@ public class CaseTests extends AbstractScalarFunctionTestCase { if (Build.current().isSnapshot()) { t.addAll( DataType.UNDER_CONSTRUCTION.stream() - .filter(type -> type != DataType.EXPONENTIAL_HISTOGRAM) // TODO(b/133393): implement .filter(type -> type != DataType.AGGREGATE_METRIC_DOUBLE && type != DataType.DENSE_VECTOR) .toList() ); From f2ef7959b145034f1175b106793bb3084ed0a8bc Mon Sep 17 00:00:00 2001 From: elasticsearchmachine Date: Wed, 19 Nov 2025 15:10:42 +0000 Subject: [PATCH 2/2] [CI] Auto commit changes from spotless --- .../xpack/esql/expression/function/scalar/conditional/Case.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/expression/function/scalar/conditional/Case.java b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/expression/function/scalar/conditional/Case.java index 438fdf08b6dbd..f497882ec798d 100644 --- a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/expression/function/scalar/conditional/Case.java +++ b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/expression/function/scalar/conditional/Case.java @@ -82,7 +82,7 @@ ConditionEvaluatorSupplier toEvaluator(ToEvaluator toEvaluator) { "long", "unsigned_long", "version", - "exponential_histogram"}, + "exponential_histogram" }, description = """ Accepts pairs of conditions and values. The function returns the value that belongs to the first condition that evaluates to `true`.