Skip to content

Commit 45be0fe

Browse files
committed
ES|QL: Add TBUCKET function
Replace evaluation by a surrogate. Closes #131068
1 parent a5fe0fa commit 45be0fe

File tree

5 files changed

+278
-154
lines changed

5 files changed

+278
-154
lines changed
Lines changed: 223 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,232 @@
11
// TBUCKET-specific tests
22

3-
docsTBucketByTimeDuration#[skip:-9.1.99,reason:new grouping function added in 9.2]
3+
tbucketByTenSecondsDuration#[skip:-9.1.99,reason:new grouping function added in 9.2]
4+
5+
// tag::tbucketByTenSecondsDuration[]
6+
FROM sample_data
7+
| STATS min = MAX(@timestamp), max = MAX(@timestamp) BY bucket = TBUCKET(10 seconds)
8+
| SORT min
9+
// end::tbucketByTenSecondsDuration[]
10+
;
11+
12+
// tag::tbucketByTenSecondsDuration-result[]
13+
min:datetime | max:datetime | bucket:datetime
14+
2023-10-23T12:15:03.360Z | 2023-10-23T12:15:03.360Z | 2023-10-23T12:15:00.000Z
15+
2023-10-23T12:27:28.948Z | 2023-10-23T12:27:28.948Z | 2023-10-23T12:27:20.000Z
16+
2023-10-23T13:33:34.937Z | 2023-10-23T13:33:34.937Z | 2023-10-23T13:33:30.000Z
17+
2023-10-23T13:51:54.732Z | 2023-10-23T13:51:54.732Z | 2023-10-23T13:51:50.000Z
18+
2023-10-23T13:52:55.015Z | 2023-10-23T13:52:55.015Z | 2023-10-23T13:52:50.000Z
19+
2023-10-23T13:53:55.832Z | 2023-10-23T13:53:55.832Z | 2023-10-23T13:53:50.000Z
20+
2023-10-23T13:55:01.543Z | 2023-10-23T13:55:01.543Z | 2023-10-23T13:55:00.000Z
21+
// end::tbucketByTenSecondsDuration-result[]
22+
;
23+
24+
tbucketByTenSecondsDurationAsString#[skip:-9.1.99,reason:new grouping function added in 9.2]
25+
26+
// tag::tbucketByTenSecondsDurationAsString[]
27+
FROM sample_data
28+
| STATS min = MAX(@timestamp), max = MAX(@timestamp) BY bucket = TBUCKET("10 seconds")
29+
| SORT min
30+
// end::tbucketByTenSecondsDurationAsString[]
31+
;
32+
33+
// tag::tbucketByTenSecondsDurationAsString-result[]
34+
min:datetime | max:datetime | bucket:datetime
35+
2023-10-23T12:15:03.360Z | 2023-10-23T12:15:03.360Z | 2023-10-23T12:15:00.000Z
36+
2023-10-23T12:27:28.948Z | 2023-10-23T12:27:28.948Z | 2023-10-23T12:27:20.000Z
37+
2023-10-23T13:33:34.937Z | 2023-10-23T13:33:34.937Z | 2023-10-23T13:33:30.000Z
38+
2023-10-23T13:51:54.732Z | 2023-10-23T13:51:54.732Z | 2023-10-23T13:51:50.000Z
39+
2023-10-23T13:52:55.015Z | 2023-10-23T13:52:55.015Z | 2023-10-23T13:52:50.000Z
40+
2023-10-23T13:53:55.832Z | 2023-10-23T13:53:55.832Z | 2023-10-23T13:53:50.000Z
41+
2023-10-23T13:55:01.543Z | 2023-10-23T13:55:01.543Z | 2023-10-23T13:55:00.000Z
42+
// end::tbucketByTenSecondsDurationAsString-result[]
43+
;
44+
45+
tbucketByTenMinutesDuration#[skip:-9.1.99,reason:new grouping function added in 9.2]
46+
47+
// tag::tbucketByTenMinutesDuration[]
48+
FROM sample_data
49+
| STATS min = MAX(@timestamp), max = MAX(@timestamp) BY bucket = TBUCKET(10 minutes)
50+
| SORT min
51+
// end::tbucketByTenMinutesDuration[]
52+
;
53+
54+
// tag::tbucketByTenMinutesDuration-result[]
55+
min:datetime | max:datetime | bucket:datetime
56+
2023-10-23T12:15:03.360Z | 2023-10-23T12:15:03.360Z | 2023-10-23T12:10:00.000Z
57+
2023-10-23T12:27:28.948Z | 2023-10-23T12:27:28.948Z | 2023-10-23T12:20:00.000Z
58+
2023-10-23T13:33:34.937Z | 2023-10-23T13:33:34.937Z | 2023-10-23T13:30:00.000Z
59+
2023-10-23T13:55:01.543Z | 2023-10-23T13:55:01.543Z | 2023-10-23T13:50:00.000Z
60+
// end::tbucketByTenMinutesDuration-result[]
61+
;
62+
63+
tbucketByTenMinutesDurationAsString#[skip:-9.1.99,reason:new grouping function added in 9.2]
64+
65+
// tag::tbucketByTenMinutesDurationAsString[]
66+
FROM sample_data
67+
| STATS min = MAX(@timestamp), max = MAX(@timestamp) BY bucket = TBUCKET("10 minutes")
68+
| SORT min
69+
// end::tbucketByTenMinutesDurationAsString[]
70+
;
71+
72+
// tag::tbucketByTenMinutesDurationAsString-result[]
73+
min:datetime | max:datetime | bucket:datetime
74+
2023-10-23T12:15:03.360Z | 2023-10-23T12:15:03.360Z | 2023-10-23T12:10:00.000Z
75+
2023-10-23T12:27:28.948Z | 2023-10-23T12:27:28.948Z | 2023-10-23T12:20:00.000Z
76+
2023-10-23T13:33:34.937Z | 2023-10-23T13:33:34.937Z | 2023-10-23T13:30:00.000Z
77+
2023-10-23T13:55:01.543Z | 2023-10-23T13:55:01.543Z | 2023-10-23T13:50:00.000Z
78+
// end::tbucketByTenMinutesDurationAsString-result[]
79+
;
80+
81+
docsTBucketByOneHourDuration#[skip:-9.1.99,reason:new grouping function added in 9.2]
82+
83+
// tag::docsTBucketByOneHourDuration[]
84+
FROM sample_data
85+
| STATS min = MAX(@timestamp), max = MAX(@timestamp) BY bucket = TBUCKET(1 hour)
86+
| SORT min
87+
// end::docsTBucketByOneHourDuration[]
88+
;
89+
90+
// tag::docsTBucketByOneHourDuration-result[]
91+
min:datetime | max:datetime | bucket:datetime
92+
2023-10-23T12:27:28.948Z | 2023-10-23T12:27:28.948Z | 2023-10-23T12:00:00.000Z
93+
2023-10-23T13:55:01.543Z | 2023-10-23T13:55:01.543Z | 2023-10-23T13:00:00.000Z
94+
// end::docsTBucketByOneHourDuration-result[]
95+
;
96+
97+
docsTBucketByOneHourDurationAsString#[skip:-9.1.99,reason:new grouping function added in 9.2]
498
required_capability: implicit_casting_string_literal_to_temporal_amount
599

6-
// tag::docsTBucketByTimeDuration[]
100+
// tag::docsTBucketByOneHourDurationAsString[]
101+
FROM sample_data
102+
| STATS min = MAX(@timestamp), max = MAX(@timestamp) BY bucket = TBUCKET("1 hour")
103+
| SORT min
104+
// end::docsTBucketByOneHourDurationAsString[]
105+
;
106+
107+
// tag::docsTBucketByOneHourDurationAsString-result[]
108+
min:datetime | max:datetime | bucket:datetime
109+
2023-10-23T12:27:28.948Z | 2023-10-23T12:27:28.948Z | 2023-10-23T12:00:00.000Z
110+
2023-10-23T13:55:01.543Z | 2023-10-23T13:55:01.543Z | 2023-10-23T13:00:00.000Z
111+
// end::docsTBucketByOneHourDurationAsString-result[]
112+
;
113+
114+
tbucketByOneDayDuration#[skip:-9.1.99,reason:new grouping function added in 9.2]
115+
116+
// tag::tbucketByOneDayDuration[]
117+
FROM sample_data
118+
| STATS min = MAX(@timestamp), max = MAX(@timestamp) BY bucket = TBUCKET(1 day)
119+
| SORT min
120+
// end::tbucketByOneDayDuration[]
121+
;
122+
123+
// tag::tbucketByOneDayDuration-result[]
124+
min:datetime | max:datetime | bucket:datetime
125+
2023-10-23T13:55:01.543Z | 2023-10-23T13:55:01.543Z | 2023-10-23T00:00:00.000Z
126+
// end::tbucketByOneDayDuration-result[]
127+
;
128+
129+
tbucketByOneDayDurationAsString#[skip:-9.1.99,reason:new grouping function added in 9.2]
130+
131+
// tag::tbucketByOneDayDurationAsString[]
132+
FROM sample_data
133+
| STATS min = MAX(@timestamp), max = MAX(@timestamp) BY bucket = TBUCKET("1 day")
134+
| SORT min
135+
// end::tbucketByOneDayDurationAsString[]
136+
;
137+
138+
// tag::tbucketByOneDayDurationAsString-result[]
139+
min:datetime | max:datetime | bucket:datetime
140+
2023-10-23T13:55:01.543Z | 2023-10-23T13:55:01.543Z | 2023-10-23T00:00:00.000Z
141+
// end::tbucketByOneDayDurationAsString-result[]
142+
;
143+
144+
tbucketByOneWeekDuration#[skip:-9.1.99,reason:new grouping function added in 9.2]
145+
146+
// tag::tbucketByOneWeekDuration[]
147+
FROM sample_data
148+
| STATS min = MAX(@timestamp), max = MAX(@timestamp) BY bucket = TBUCKET(1 week)
149+
| SORT min
150+
// end::tbucketByOneWeekDuration[]
151+
;
152+
153+
// tag::tbucketByOneWeekDuration-result[]
154+
min:datetime | max:datetime | bucket:datetime
155+
2023-10-23T13:55:01.543Z | 2023-10-23T13:55:01.543Z | 2023-10-23T00:00:00.000Z
156+
// end::tbucketByOneWeekDuration-result[]
157+
;
158+
159+
tbucketByOneWeekDurationAsString#[skip:-9.1.99,reason:new grouping function added in 9.2]
160+
161+
// tag::tbucketByOneWeekDurationAsString[]
162+
FROM sample_data
163+
| STATS min = MAX(@timestamp), max = MAX(@timestamp) BY bucket = TBUCKET("1 week")
164+
| SORT min
165+
// end::tbucketByOneWeekDurationAsString[]
166+
;
167+
168+
// tag::tbucketByOneWeekDurationAsString-result[]
169+
min:datetime | max:datetime | bucket:datetime
170+
2023-10-23T13:55:01.543Z | 2023-10-23T13:55:01.543Z | 2023-10-23T00:00:00.000Z
171+
// end::tbucketByOneWeekDurationAsString-result[]
172+
;
173+
174+
tbucketByOneMonthDuration#[skip:-9.1.99,reason:new grouping function added in 9.2]
175+
176+
// tag::tbucketByOneMonthDuration[]
177+
FROM sample_data
178+
| STATS min = MAX(@timestamp), max = MAX(@timestamp) BY bucket = TBUCKET(1 month)
179+
| SORT min
180+
// end::tbucketByOneMonthDuration[]
181+
;
182+
183+
// tag::tbucketByOneMonthDuration-result[]
184+
min:datetime | max:datetime | bucket:datetime
185+
2023-10-23T13:55:01.543Z | 2023-10-23T13:55:01.543Z | 2023-10-01T00:00:00.000Z
186+
// end::tbucketByOneMonthDuration-result[]
187+
;
188+
189+
tbucketByOneMonthDurationAsString#[skip:-9.1.99,reason:new grouping function added in 9.2]
190+
191+
// tag::tbucketByOneMonthDurationAsString[]
192+
FROM sample_data
193+
| STATS min = MAX(@timestamp), max = MAX(@timestamp) BY bucket = TBUCKET("1 month")
194+
| SORT min
195+
// end::tbucketByOneMonthDurationAsString[]
196+
;
197+
198+
// tag::tbucketByOneMonthDurationAsString-result[]
199+
min:datetime | max:datetime | bucket:datetime
200+
2023-10-23T13:55:01.543Z | 2023-10-23T13:55:01.543Z | 2023-10-01T00:00:00.000Z
201+
// end::tbucketByOneMonthDurationAsString-result[]
202+
;
203+
204+
tbucketByOneYearDuration#[skip:-9.1.99,reason:new grouping function added in 9.2]
205+
206+
// tag::tbucketByOneYearDuration[]
207+
FROM sample_data
208+
| STATS min = MAX(@timestamp), max = MAX(@timestamp) BY bucket = TBUCKET(1 year)
209+
| SORT min
210+
// end::tbucketByOneYearDuration[]
211+
;
212+
213+
// tag::tbucketByOneYearDuration-result[]
214+
min:datetime | max:datetime | bucket:datetime
215+
2023-10-23T13:55:01.543Z | 2023-10-23T13:55:01.543Z | 2023-01-01T00:00:00.000Z
216+
// end::tbucketByOneYearDuration-result[]
217+
;
218+
219+
tbucketByOneYearDurationAsString#[skip:-9.1.99,reason:new grouping function added in 9.2]
220+
221+
// tag::tbucketByOneYearDurationAsString[]
7222
FROM sample_data
8-
| STATS min = MAX(@timestamp), max = MAX(@timestamp) BY bucket = TBUCKET(30 minutes)
223+
| STATS min = MAX(@timestamp), max = MAX(@timestamp) BY bucket = TBUCKET("1 year")
9224
| SORT min
10-
// end::docsTBucketByTimeDuration[]
225+
// end::tbucketByOneYearDurationAsString[]
11226
;
12227

13-
// tag::docsTBucketByTimeDuration-result[]
14-
min:date | max:date | bucket:date
15-
2023-10-23T12:27:28.948Z|2023-10-23T12:27:28.948Z|2023-10-23T12:00:00.000Z
16-
2023-10-23T13:55:01.543Z|2023-10-23T13:55:01.543Z|2023-10-23T13:30:00.000Z
17-
// end::docsTBucketByTimeDuration-result[]
228+
// tag::tbucketByOneYearDurationAsString-result[]
229+
min:datetime | max:datetime | bucket:datetime
230+
2023-10-23T13:55:01.543Z | 2023-10-23T13:55:01.543Z | 2023-01-01T00:00:00.000Z
231+
// end::tbucketByOneYearDurationAsString-result[]
18232
;

x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/expression/function/grouping/GroupingWritables.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@
1414
public class GroupingWritables {
1515

1616
public static List<NamedWriteableRegistry.Entry> getNamedWriteables() {
17-
return List.of(Bucket.ENTRY, Categorize.ENTRY, TBucket.ENTRY);
17+
return List.of(Bucket.ENTRY, Categorize.ENTRY);
1818
}
1919
}

0 commit comments

Comments
 (0)