Skip to content

Commit a63a290

Browse files
bors[bot]syvb
andauthored
Merge #692
692: Pre-stabilization changes for state_agg - part 1 r=Smittyvb a=Smittyvb - Adds optional `start` and `end` parameters to `duration_in` to only get the duration in the specified range. If `end` is omitted all states after `start` are included. `interpolated_duration_in` now uses these ones as well. - Renames `state_agg` -> `compressed_state_agg` (final name TBD), `timeline_agg` -> `state_agg` - Removes mostly unused `next` parameters from interpolated state aggregate functions Closes #687. Related to #691. Co-authored-by: Smitty <[email protected]>
2 parents cac9a9e + 571ace5 commit a63a290

File tree

4 files changed

+534
-342
lines changed

4 files changed

+534
-342
lines changed

Changelog.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ This changelog should be updated as part of a PR if the work is worth noting (mo
1111
#### Bug fixes
1212

1313
#### Other notable changes
14+
- [#692](https://github.com/timescale/timescaledb-toolkit/pull/692): Support specifying a range to `duration_in` to specify a time range to get states in for state aggregates
15+
- [#692](https://github.com/timescale/timescaledb-toolkit/pull/692): Removed `next` parameter from interpolated state aggregate functions
16+
- [#692](https://github.com/timescale/timescaledb-toolkit/pull/692): Renamed `state_agg` to `compact_state_agg` and `timeline_agg` to `state_agg`
1417

1518
#### Shout-outs
1619

docs/state_agg.md

Lines changed: 92 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -46,15 +46,15 @@ INSERT INTO states_test_5 VALUES
4646
Compute the amount of time spent in a state as INTERVAL.
4747

4848
```SQL
49-
SELECT toolkit_experimental.duration_in('ERROR', toolkit_experimental.state_agg(ts, state)) FROM states_test;
49+
SELECT toolkit_experimental.duration_in('ERROR', toolkit_experimental.compact_state_agg(ts, state)) FROM states_test;
5050
```
5151
```output
5252
interval
5353
----------
5454
00:00:03
5555
```
5656
```SQL
57-
SELECT toolkit_experimental.duration_in(2, toolkit_experimental.state_agg(ts, state)) FROM states_test_4;
57+
SELECT toolkit_experimental.duration_in(2, toolkit_experimental.compact_state_agg(ts, state)) FROM states_test_4;
5858
```
5959
```output
6060
interval
@@ -67,7 +67,7 @@ Extract as number of seconds:
6767
```SQL
6868
SELECT
6969
EXTRACT(epoch FROM
70-
toolkit_experimental.duration_in('ERROR', toolkit_experimental.state_agg(ts, state))
70+
toolkit_experimental.duration_in('ERROR', toolkit_experimental.compact_state_agg(ts, state))
7171
)::INTEGER
7272
FROM states_test;
7373
```
@@ -77,11 +77,71 @@ FROM states_test;
7777
3
7878
```
7979

80+
#### duration_in for a range
81+
```SQL
82+
SELECT toolkit_experimental.duration_in('OK', toolkit_experimental.state_agg(ts, state), '2020-01-01 00:01:00+00', '2 days') FROM states_test;
83+
```
84+
```output
85+
duration_in
86+
-------------
87+
00:00:57
88+
```
89+
```SQL
90+
SELECT toolkit_experimental.duration_in('OK', toolkit_experimental.state_agg(ts, state), '2020-01-01 00:01:00+00', NULL) FROM states_test;
91+
```
92+
```output
93+
duration_in
94+
-------------
95+
00:00:57
96+
```
97+
```SQL
98+
SELECT toolkit_experimental.duration_in('OK', toolkit_experimental.state_agg(ts, state), '2020-01-01 00:01:00+00') FROM states_test;
99+
```
100+
```output
101+
duration_in
102+
-------------
103+
00:00:57
104+
```
105+
```SQL
106+
SELECT toolkit_experimental.duration_in(51351, toolkit_experimental.state_agg(ts, state), '2020-01-01 00:01:00+00', '2 days') FROM states_test_4;
107+
```
108+
```output
109+
duration_in
110+
-------------
111+
00:00:57
112+
```
113+
```SQL
114+
SELECT toolkit_experimental.duration_in(51351, toolkit_experimental.state_agg(ts, state), '2020-01-01 00:01:00+00', NULL) FROM states_test_4;
115+
```
116+
```output
117+
duration_in
118+
-------------
119+
00:00:57
120+
```
121+
122+
```SQL
123+
SELECT toolkit_experimental.duration_in('OK', toolkit_experimental.state_agg(ts, state), '2020-01-01 00:00:15+00', '30 seconds') FROM states_test;
124+
```
125+
```output
126+
duration_in
127+
-------------
128+
00:00:30
129+
```
130+
131+
```SQL
132+
SELECT toolkit_experimental.duration_in('OK', toolkit_experimental.state_agg(ts, state), '2020-01-01 00:00:15+00', '1 minute 1 second') FROM states_test;
133+
```
134+
```output
135+
duration_in
136+
-------------
137+
00:00:58
138+
```
139+
80140
### into_values
81141

82142
```SQL
83143
SELECT state, duration FROM toolkit_experimental.into_values(
84-
(SELECT toolkit_experimental.state_agg(ts, state) FROM states_test))
144+
(SELECT toolkit_experimental.compact_state_agg(ts, state) FROM states_test))
85145
ORDER BY state, duration;
86146
```
87147
```output
@@ -94,7 +154,7 @@ SELECT state, duration FROM toolkit_experimental.into_values(
94154
```
95155
```SQL
96156
SELECT state, duration FROM toolkit_experimental.into_int_values(
97-
(SELECT toolkit_experimental.state_agg(ts, state) FROM states_test_4))
157+
(SELECT toolkit_experimental.compact_state_agg(ts, state) FROM states_test_4))
98158
ORDER BY state, duration;
99159
```
100160
```output
@@ -110,7 +170,7 @@ SELECT state, duration FROM toolkit_experimental.into_int_values(
110170

111171
```SQL
112172
SELECT state, start_time, end_time FROM toolkit_experimental.state_timeline(
113-
(SELECT toolkit_experimental.timeline_agg(ts, state) FROM states_test))
173+
(SELECT toolkit_experimental.state_agg(ts, state) FROM states_test))
114174
ORDER BY start_time;
115175
```
116176
```output
@@ -125,7 +185,7 @@ ERROR | 2020-01-01 00:01:00+00 | 2020-01-01 00:01:03+00
125185

126186
```SQL
127187
SELECT state, start_time, end_time FROM toolkit_experimental.state_int_timeline(
128-
(SELECT toolkit_experimental.timeline_agg(ts, state) FROM states_test_4))
188+
(SELECT toolkit_experimental.state_agg(ts, state) FROM states_test_4))
129189
ORDER BY start_time;
130190
```
131191
```output
@@ -141,7 +201,7 @@ state | start_time | end_time
141201

142202
```SQL
143203
SELECT state, start_time, end_time FROM toolkit_experimental.state_timeline(
144-
(SELECT toolkit_experimental.timeline_agg(ts, state) FROM states_test_2))
204+
(SELECT toolkit_experimental.state_agg(ts, state) FROM states_test_2))
145205
ORDER BY start_time;
146206
```
147207
```output
@@ -158,7 +218,7 @@ START | 2019-12-31 00:00:00+00 | 2019-12-31 00:00:11+00
158218
SELECT start_time, end_time
159219
FROM toolkit_experimental.state_periods(
160220
'OK',
161-
(SELECT toolkit_experimental.timeline_agg(ts, state) FROM states_test)
221+
(SELECT toolkit_experimental.state_agg(ts, state) FROM states_test)
162222
)
163223
ORDER BY start_time;
164224
```
@@ -173,7 +233,7 @@ start_time | end_time
173233
SELECT start_time, end_time
174234
FROM toolkit_experimental.state_periods(
175235
51351,
176-
(SELECT toolkit_experimental.timeline_agg(ts, state) FROM states_test_4)
236+
(SELECT toolkit_experimental.state_agg(ts, state) FROM states_test_4)
177237
)
178238
ORDER BY start_time;
179239
```
@@ -188,7 +248,7 @@ start_time | end_time
188248
SELECT start_time, end_time
189249
FROM toolkit_experimental.state_periods(
190250
'ANYTHING',
191-
(SELECT toolkit_experimental.timeline_agg(ts, state) FROM states_test)
251+
(SELECT toolkit_experimental.state_agg(ts, state) FROM states_test)
192252
)
193253
ORDER BY start_time;
194254
```
@@ -201,10 +261,9 @@ start_time | end_time
201261

202262
```SQL
203263
SELECT state, start_time, end_time FROM toolkit_experimental.interpolated_state_timeline(
204-
(SELECT toolkit_experimental.timeline_agg(ts, state) FROM states_test),
264+
(SELECT toolkit_experimental.state_agg(ts, state) FROM states_test),
205265
'2019-12-31', '1 days',
206-
(SELECT toolkit_experimental.timeline_agg(ts, state) FROM states_test_3),
207-
(SELECT toolkit_experimental.timeline_agg(ts, state) FROM states_test_3)
266+
(SELECT toolkit_experimental.state_agg(ts, state) FROM states_test_3)
208267
)
209268
ORDER BY start_time;
210269
```
@@ -220,10 +279,9 @@ ERROR | 2020-01-01 00:01:00+00 | 2020-01-01 00:01:03+00
220279

221280
```SQL
222281
SELECT state, start_time, end_time FROM toolkit_experimental.interpolated_state_timeline(
223-
(SELECT toolkit_experimental.timeline_agg(ts, state) FROM states_test),
282+
(SELECT toolkit_experimental.state_agg(ts, state) FROM states_test),
224283
'2019-12-31', '5 days',
225-
(SELECT toolkit_experimental.timeline_agg(ts, state) FROM states_test_3),
226-
(SELECT toolkit_experimental.timeline_agg(ts, state) FROM states_test_3)
284+
(SELECT toolkit_experimental.state_agg(ts, state) FROM states_test_3)
227285
)
228286
ORDER BY start_time;
229287
```
@@ -239,10 +297,9 @@ ERROR | 2020-01-01 00:01:00+00 | 2020-01-01 00:01:03+00
239297

240298
```SQL
241299
SELECT state, start_time, end_time FROM toolkit_experimental.interpolated_state_timeline(
242-
(SELECT toolkit_experimental.timeline_agg(ts, state) FROM states_test),
300+
(SELECT toolkit_experimental.state_agg(ts, state) FROM states_test),
243301
'2019-12-31', '1 days',
244-
(SELECT toolkit_experimental.timeline_agg(ts, state) FROM states_test_2),
245-
(SELECT toolkit_experimental.timeline_agg(ts, state) FROM states_test_2)
302+
(SELECT toolkit_experimental.state_agg(ts, state) FROM states_test_2)
246303
)
247304
ORDER BY start_time;
248305
```
@@ -259,10 +316,9 @@ ERROR | 2020-01-01 00:01:00+00 | 2020-01-01 00:01:03+00
259316

260317
```SQL
261318
SELECT state, start_time, end_time FROM toolkit_experimental.interpolated_state_timeline(
262-
(SELECT toolkit_experimental.timeline_agg(ts, state) FROM states_test),
319+
(SELECT toolkit_experimental.state_agg(ts, state) FROM states_test),
263320
'2019-12-31', '5 days',
264-
(SELECT toolkit_experimental.timeline_agg(ts, state) FROM states_test_2),
265-
(SELECT toolkit_experimental.timeline_agg(ts, state) FROM states_test_2)
321+
(SELECT toolkit_experimental.state_agg(ts, state) FROM states_test_2)
266322
)
267323
ORDER BY start_time;
268324
```
@@ -283,10 +339,9 @@ ERROR | 2020-01-01 00:01:00+00 | 2020-01-01 00:01:03+00
283339
```SQL
284340
SELECT start_time, end_time FROM toolkit_experimental.interpolated_state_periods(
285341
'OK',
286-
(SELECT toolkit_experimental.timeline_agg(ts, state) FROM states_test),
342+
(SELECT toolkit_experimental.state_agg(ts, state) FROM states_test),
287343
'2019-12-31', '1 days',
288-
(SELECT toolkit_experimental.timeline_agg(ts, state) FROM states_test_3),
289-
(SELECT toolkit_experimental.timeline_agg(ts, state) FROM states_test_3)
344+
(SELECT toolkit_experimental.state_agg(ts, state) FROM states_test_3)
290345
)
291346
ORDER BY start_time;
292347
```
@@ -300,10 +355,9 @@ start_time | end_time
300355
```SQL
301356
SELECT start_time, end_time FROM toolkit_experimental.interpolated_state_periods(
302357
'START',
303-
(SELECT toolkit_experimental.timeline_agg(ts, state) FROM states_test),
358+
(SELECT toolkit_experimental.state_agg(ts, state) FROM states_test),
304359
'2019-12-31', '5 days',
305-
(SELECT toolkit_experimental.timeline_agg(ts, state) FROM states_test_3),
306-
(SELECT toolkit_experimental.timeline_agg(ts, state) FROM states_test_3)
360+
(SELECT toolkit_experimental.state_agg(ts, state) FROM states_test_3)
307361
)
308362
ORDER BY start_time;
309363
```
@@ -316,10 +370,9 @@ start_time | end_time
316370
```SQL
317371
SELECT start_time, end_time FROM toolkit_experimental.interpolated_state_periods(
318372
'STOP',
319-
(SELECT toolkit_experimental.timeline_agg(ts, state) FROM states_test),
373+
(SELECT toolkit_experimental.state_agg(ts, state) FROM states_test),
320374
'2019-12-31', '1 days',
321-
(SELECT toolkit_experimental.timeline_agg(ts, state) FROM states_test_2),
322-
(SELECT toolkit_experimental.timeline_agg(ts, state) FROM states_test_2)
375+
(SELECT toolkit_experimental.state_agg(ts, state) FROM states_test_2)
323376
)
324377
ORDER BY start_time;
325378
```
@@ -333,10 +386,9 @@ start_time | end_time
333386
```SQL
334387
SELECT start_time, end_time FROM toolkit_experimental.interpolated_state_periods(
335388
'STOP',
336-
(SELECT toolkit_experimental.timeline_agg(ts, state) FROM states_test),
389+
(SELECT toolkit_experimental.state_agg(ts, state) FROM states_test),
337390
'2019-12-31', '5 days',
338-
(SELECT toolkit_experimental.timeline_agg(ts, state) FROM states_test_2),
339-
(SELECT toolkit_experimental.timeline_agg(ts, state) FROM states_test_2)
391+
(SELECT toolkit_experimental.state_agg(ts, state) FROM states_test_2)
340392
)
341393
ORDER BY start_time;
342394
```
@@ -352,7 +404,7 @@ start_time | end_time
352404
```SQL
353405
WITH buckets AS (SELECT
354406
date_trunc('minute', ts) as dt,
355-
toolkit_experimental.state_agg(ts, state) AS sa
407+
toolkit_experimental.compact_state_agg(ts, state) AS sa
356408
FROM states_test
357409
GROUP BY date_trunc('minute', ts))
358410
SELECT toolkit_experimental.duration_in(
@@ -370,7 +422,7 @@ FROM buckets;
370422
```SQL
371423
WITH buckets AS (SELECT
372424
date_trunc('minute', ts) as dt,
373-
toolkit_experimental.state_agg(ts, state) AS sa
425+
toolkit_experimental.compact_state_agg(ts, state) AS sa
374426
FROM states_test
375427
GROUP BY date_trunc('minute', ts))
376428
SELECT toolkit_experimental.duration_in(
@@ -388,7 +440,7 @@ FROM buckets;
388440
```SQL
389441
WITH buckets AS (SELECT
390442
date_trunc('minute', ts) as dt,
391-
toolkit_experimental.timeline_agg(ts, state) AS sa
443+
toolkit_experimental.state_agg(ts, state) AS sa
392444
FROM states_test
393445
GROUP BY date_trunc('minute', ts))
394446
SELECT toolkit_experimental.state_timeline(
@@ -409,7 +461,7 @@ FROM buckets;
409461
```SQL
410462
WITH buckets AS (SELECT
411463
date_trunc('minute', ts) as dt,
412-
toolkit_experimental.timeline_agg(ts, state) AS sa
464+
toolkit_experimental.state_agg(ts, state) AS sa
413465
FROM states_test
414466
GROUP BY date_trunc('minute', ts)
415467
HAVING date_trunc('minute', ts) != '2020-01-01 00:01:00+00'::timestamptz)
@@ -429,7 +481,7 @@ FROM buckets;
429481
```SQL
430482
WITH buckets AS (SELECT
431483
date_trunc('minute', ts) as dt,
432-
toolkit_experimental.timeline_agg(ts, state) AS sa
484+
toolkit_experimental.state_agg(ts, state) AS sa
433485
FROM states_test_5
434486
GROUP BY date_trunc('minute', ts)
435487
HAVING date_trunc('minute', ts) != '2020-01-01 00:01:00+00'::timestamptz)

0 commit comments

Comments
 (0)