@golemio/waze-tt 1.1.9 → 1.1.10-dev.981485341
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -0,0 +1,1457 @@
|
|
|
1
|
+
CREATE TABLE analytic.barrande_black_list_route (
|
|
2
|
+
route_id int8 NOT NULL,
|
|
3
|
+
note varchar(250) NULL,
|
|
4
|
+
created_at timestamptz NULL DEFAULT now(),
|
|
5
|
+
CONSTRAINT barrande_black_list_route_pkey PRIMARY KEY (route_id)
|
|
6
|
+
);
|
|
7
|
+
|
|
8
|
+
CREATE TABLE analytic.barrande_route_hour_core (
|
|
9
|
+
"name" text NOT NULL,
|
|
10
|
+
datum date NOT NULL,
|
|
11
|
+
hodina float8 NOT NULL,
|
|
12
|
+
cas_interval text NOT NULL,
|
|
13
|
+
avg_time numeric NULL,
|
|
14
|
+
avg_speed numeric NULL,
|
|
15
|
+
CONSTRAINT barrande_route_hour_core_pkey PRIMARY KEY (name, datum, hodina, cas_interval)
|
|
16
|
+
);
|
|
17
|
+
|
|
18
|
+
CREATE TABLE analytic.barrande_data_all (
|
|
19
|
+
"name" text NOT NULL,
|
|
20
|
+
name_trasa text NOT NULL,
|
|
21
|
+
name_usek text NOT NULL,
|
|
22
|
+
smer text NOT NULL,
|
|
23
|
+
datum date NOT NULL,
|
|
24
|
+
cas_interval text NOT NULL,
|
|
25
|
+
avg_time numeric NULL,
|
|
26
|
+
avg_speed numeric NULL,
|
|
27
|
+
normal_avg_time numeric NULL,
|
|
28
|
+
normal_avg_speed numeric NULL,
|
|
29
|
+
CONSTRAINT barrande_data_all_pkey PRIMARY KEY (name, name_trasa, name_usek, smer, datum, cas_interval)
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
CREATE OR REPLACE VIEW analytic.v_barrande_route_hour_core
|
|
33
|
+
AS SELECT wr.name,
|
|
34
|
+
to_timestamp((rl.update_time / 1000)::double precision)::date AS datum,
|
|
35
|
+
date_part('hour'::text, to_timestamp((rl.update_time / 1000)::double precision)) AS hodina,
|
|
36
|
+
(to_char(date_part('hour'::text, to_timestamp((rl.update_time / 1000)::double precision)), '09'::text) || ' -'::text) || to_char(date_part('hour'::text, to_timestamp((rl.update_time / 1000)::double precision)) + 1::double precision, '09'::text) AS cas_interval,
|
|
37
|
+
round(avg(rl."time"), 2) AS avg_time,
|
|
38
|
+
round(avg(rl.length * 1000 / (rl."time" * 360)), 2) AS avg_speed
|
|
39
|
+
FROM wazett.wazett_route_lives rl
|
|
40
|
+
JOIN wazett.wazett_routes wr ON wr.id = rl.route_id
|
|
41
|
+
WHERE rl.length > 0 AND "left"(wr.name, 2) = 'BM'::text AND NOT (EXISTS ( SELECT 1
|
|
42
|
+
FROM analytic.barrande_black_list_route bl
|
|
43
|
+
WHERE bl.route_id = rl.route_id))
|
|
44
|
+
GROUP BY wr.name, (to_timestamp((rl.update_time / 1000)::double precision)::date), (date_part('hour'::text, to_timestamp((rl.update_time / 1000)::double precision)));
|
|
45
|
+
|
|
46
|
+
CREATE MATERIALIZED VIEW analytic.mv_barrande_normal
|
|
47
|
+
TABLESPACE pg_default
|
|
48
|
+
AS SELECT vtbh.name,
|
|
49
|
+
vtbh.hodina,
|
|
50
|
+
round(avg(vtbh.avg_time), 2) AS avg_time,
|
|
51
|
+
round(avg(vtbh.avg_speed)) AS avg_speed
|
|
52
|
+
FROM analytic.v_barrande_route_hour_core vtbh
|
|
53
|
+
WHERE vtbh.datum >= '2022-04-24'::date AND vtbh.datum <= '2022-05-05'::date AND (date_part('dow'::text, vtbh.datum) = ANY (ARRAY[2::double precision, 3::double precision, 4::double precision]))
|
|
54
|
+
GROUP BY vtbh.name, vtbh.hodina
|
|
55
|
+
WITH DATA;
|
|
56
|
+
CREATE INDEX mv_barrande_normal_idx ON analytic.mv_barrande_normal USING btree (name, hodina);
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
CREATE OR REPLACE VIEW analytic.v_barrande_route_hour
|
|
60
|
+
AS SELECT p.name,
|
|
61
|
+
p.datum,
|
|
62
|
+
p.hodina,
|
|
63
|
+
p.cas_interval,
|
|
64
|
+
p.avg_time,
|
|
65
|
+
p.avg_speed,
|
|
66
|
+
n.avg_time AS normal_avg_time,
|
|
67
|
+
n.avg_speed AS normal_avg_speed
|
|
68
|
+
FROM analytic.v_barrande_route_hour_core p
|
|
69
|
+
LEFT JOIN analytic.mv_barrande_normal n ON n.name = p.name AND p.hodina = n.hodina;
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
CREATE OR REPLACE PROCEDURE analytic.update_barande()
|
|
73
|
+
LANGUAGE plpgsql
|
|
74
|
+
AS $procedure$
|
|
75
|
+
declare
|
|
76
|
+
lastupdatetimestamp timestamptz;
|
|
77
|
+
lastupdateunix bigint;
|
|
78
|
+
begin
|
|
79
|
+
select
|
|
80
|
+
case
|
|
81
|
+
when start_day is not null
|
|
82
|
+
then start_day
|
|
83
|
+
else '2021-01-01'
|
|
84
|
+
end as start_day_from into lastupdatetimestamp
|
|
85
|
+
from (select max(datum)-interval '1 days' start_day from analytic.barrande_route_hour_core) barandemax;
|
|
86
|
+
|
|
87
|
+
lastupdateunix := extract ('epoch' from lastupdatetimestamp) * 1000;
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
insert into analytic.barrande_route_hour_core
|
|
91
|
+
SELECT
|
|
92
|
+
wr.name,
|
|
93
|
+
to_timestamp((rl.update_time / 1000)::double precision)::date AS datum,
|
|
94
|
+
date_part('hour'::text, to_timestamp((rl.update_time / 1000)::double precision)) AS hodina,
|
|
95
|
+
(to_char(date_part('hour'::text, to_timestamp((rl.update_time / 1000)::double precision)), '09'::text) || ' -'::text) || to_char(date_part('hour'::text, to_timestamp((rl.update_time / 1000)::double precision)) + 1::double precision, '09'::text) AS cas_interval,
|
|
96
|
+
round(avg(rl."time"), 2) AS avg_time,
|
|
97
|
+
round(avg(rl.length * 1000 / (rl."time" * 360)), 2) AS avg_speed
|
|
98
|
+
FROM wazett.wazett_route_lives rl
|
|
99
|
+
JOIN wazett.wazett_routes wr ON wr.id = rl.route_id
|
|
100
|
+
WHERE
|
|
101
|
+
rl.update_time > lastupdateunix and
|
|
102
|
+
rl.length > 0 AND "left"(wr.name, 2) = 'BM'::text AND NOT (EXISTS ( SELECT 1
|
|
103
|
+
FROM analytic.barrande_black_list_route bl
|
|
104
|
+
WHERE bl.route_id = rl.route_id))
|
|
105
|
+
GROUP BY wr.name, (to_timestamp((rl.update_time / 1000)::double precision)::date), (date_part('hour'::text, to_timestamp((rl.update_time / 1000)::double precision)))
|
|
106
|
+
ON CONFLICT (name,datum,hodina,cas_interval)
|
|
107
|
+
DO update
|
|
108
|
+
SET avg_time = EXCLUDED.avg_time,
|
|
109
|
+
avg_speed = EXCLUDED.avg_speed;
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
insert into analytic.barrande_data_all
|
|
113
|
+
WITH
|
|
114
|
+
v_barrande_route_hour as (
|
|
115
|
+
SELECT p.name,
|
|
116
|
+
p.datum,
|
|
117
|
+
p.hodina,
|
|
118
|
+
p.cas_interval,
|
|
119
|
+
p.avg_time,
|
|
120
|
+
p.avg_speed,
|
|
121
|
+
n.avg_time AS normal_avg_time,
|
|
122
|
+
n.avg_speed AS normal_avg_speed
|
|
123
|
+
FROM analytic.barrande_route_hour_core p
|
|
124
|
+
LEFT JOIN analytic.mv_barrande_normal n ON n.name = p.name AND p.hodina = n.hodina
|
|
125
|
+
where datum > lastupdatetimestamp
|
|
126
|
+
),
|
|
127
|
+
-- konec v_barrande_route_hour
|
|
128
|
+
v_barrande_union_time_interval as (
|
|
129
|
+
WITH hodiny AS (
|
|
130
|
+
SELECT brh.name,
|
|
131
|
+
brh.datum,
|
|
132
|
+
brh.hodina,
|
|
133
|
+
brh.cas_interval,
|
|
134
|
+
brh.avg_time,
|
|
135
|
+
brh.avg_speed,
|
|
136
|
+
brh.normal_avg_time,
|
|
137
|
+
brh.normal_avg_speed
|
|
138
|
+
FROM v_barrande_route_hour brh
|
|
139
|
+
WHERE brh.datum < CURRENT_DATE OR brh.hodina < date_part('hour'::text, now())
|
|
140
|
+
), den AS (
|
|
141
|
+
SELECT hodiny.name,
|
|
142
|
+
hodiny.datum,
|
|
143
|
+
'0 - 24h'::text AS cas_interval,
|
|
144
|
+
round(avg(hodiny.avg_time), 2) AS avg_time,
|
|
145
|
+
round(avg(hodiny.avg_speed), 2) AS avg_speed,
|
|
146
|
+
round(avg(hodiny.normal_avg_time), 2) AS normal_avg_time,
|
|
147
|
+
round(avg(hodiny.normal_avg_speed), 2) AS normal_avg_speed
|
|
148
|
+
FROM hodiny
|
|
149
|
+
WHERE hodiny.datum < CURRENT_DATE
|
|
150
|
+
GROUP BY hodiny.name, hodiny.datum
|
|
151
|
+
), h15_18 AS (
|
|
152
|
+
SELECT hodiny.name,
|
|
153
|
+
hodiny.datum,
|
|
154
|
+
'15 -18'::text AS cas_interval,
|
|
155
|
+
round(avg(hodiny.avg_time), 2) AS avg_time,
|
|
156
|
+
round(avg(hodiny.avg_speed), 2) AS avg_speed,
|
|
157
|
+
round(avg(hodiny.normal_avg_time), 2) AS normal_avg_time,
|
|
158
|
+
round(avg(hodiny.normal_avg_speed), 2) AS normal_avg_speed
|
|
159
|
+
FROM hodiny
|
|
160
|
+
WHERE hodiny.hodina >= 15::double precision AND hodiny.hodina <= 17::double precision AND (hodiny.datum < CURRENT_DATE OR hodiny.hodina > 17::double precision)
|
|
161
|
+
GROUP BY hodiny.name, hodiny.datum
|
|
162
|
+
), h22_6 AS (
|
|
163
|
+
SELECT hodiny.name,
|
|
164
|
+
hodiny.datum,
|
|
165
|
+
'22 - 06'::text AS cas_interval,
|
|
166
|
+
round(avg(hodiny.avg_time), 2) AS avg_time,
|
|
167
|
+
round(avg(hodiny.avg_speed), 2) AS avg_speed,
|
|
168
|
+
round(avg(hodiny.normal_avg_time), 2) AS normal_avg_time,
|
|
169
|
+
round(avg(hodiny.normal_avg_speed), 2) AS normal_avg_speed
|
|
170
|
+
FROM hodiny
|
|
171
|
+
WHERE NOT (hodiny.hodina >= 6::double precision AND hodiny.hodina <= 21::double precision) AND hodiny.datum < CURRENT_DATE
|
|
172
|
+
GROUP BY hodiny.name, hodiny.datum
|
|
173
|
+
), h6_22 AS (
|
|
174
|
+
SELECT hodiny.name,
|
|
175
|
+
hodiny.datum,
|
|
176
|
+
'06 - 22'::text AS cas_interval,
|
|
177
|
+
round(avg(hodiny.avg_time), 2) AS avg_time,
|
|
178
|
+
round(avg(hodiny.avg_speed), 2) AS avg_speed,
|
|
179
|
+
round(avg(hodiny.normal_avg_time), 2) AS normal_avg_time,
|
|
180
|
+
round(avg(hodiny.normal_avg_speed), 2) AS normal_avg_speed
|
|
181
|
+
FROM hodiny
|
|
182
|
+
WHERE hodiny.hodina >= 6::double precision AND hodiny.hodina <= 21::double precision AND (hodiny.datum < CURRENT_DATE OR hodiny.hodina > 21::double precision)
|
|
183
|
+
GROUP BY hodiny.name, hodiny.datum
|
|
184
|
+
), h7_10 AS (
|
|
185
|
+
SELECT hodiny.name,
|
|
186
|
+
hodiny.datum,
|
|
187
|
+
'07 - 10'::text AS cas_interval,
|
|
188
|
+
round(avg(hodiny.avg_time), 2) AS avg_time,
|
|
189
|
+
round(avg(hodiny.avg_speed), 2) AS avg_speed,
|
|
190
|
+
round(avg(hodiny.normal_avg_time), 2) AS normal_avg_time,
|
|
191
|
+
round(avg(hodiny.normal_avg_speed), 2) AS normal_avg_speed
|
|
192
|
+
FROM hodiny
|
|
193
|
+
WHERE hodiny.hodina >= 7::double precision AND hodiny.hodina <= 9::double precision AND (hodiny.datum < CURRENT_DATE OR hodiny.hodina > 10::double precision)
|
|
194
|
+
GROUP BY hodiny.name, hodiny.datum
|
|
195
|
+
), h7_11_15_19 AS (
|
|
196
|
+
SELECT hodiny.name,
|
|
197
|
+
hodiny.datum,
|
|
198
|
+
'07 - 11, 15 - 19'::text AS cas_interval,
|
|
199
|
+
round(avg(hodiny.avg_time), 2) AS avg_time,
|
|
200
|
+
round(avg(hodiny.avg_speed), 2) AS avg_speed,
|
|
201
|
+
round(avg(hodiny.normal_avg_time), 2) AS normal_avg_time,
|
|
202
|
+
round(avg(hodiny.normal_avg_speed), 2) AS normal_avg_speed
|
|
203
|
+
FROM hodiny
|
|
204
|
+
WHERE (hodiny.hodina >= 7::double precision AND hodiny.hodina <= 10::double precision OR hodiny.hodina >= 15::double precision AND hodiny.hodina <= 18::double precision) AND (hodiny.datum < CURRENT_DATE OR hodiny.hodina > 18::double precision)
|
|
205
|
+
GROUP BY hodiny.name, hodiny.datum
|
|
206
|
+
)
|
|
207
|
+
SELECT hodiny.name,
|
|
208
|
+
hodiny.datum,
|
|
209
|
+
hodiny.cas_interval,
|
|
210
|
+
hodiny.avg_time,
|
|
211
|
+
hodiny.avg_speed,
|
|
212
|
+
hodiny.normal_avg_time,
|
|
213
|
+
hodiny.normal_avg_speed
|
|
214
|
+
FROM hodiny
|
|
215
|
+
UNION ALL
|
|
216
|
+
SELECT den.name,
|
|
217
|
+
den.datum,
|
|
218
|
+
den.cas_interval,
|
|
219
|
+
den.avg_time,
|
|
220
|
+
den.avg_speed,
|
|
221
|
+
den.normal_avg_time,
|
|
222
|
+
den.normal_avg_speed
|
|
223
|
+
FROM den
|
|
224
|
+
UNION ALL
|
|
225
|
+
SELECT h15_18.name,
|
|
226
|
+
h15_18.datum,
|
|
227
|
+
h15_18.cas_interval,
|
|
228
|
+
h15_18.avg_time,
|
|
229
|
+
h15_18.avg_speed,
|
|
230
|
+
h15_18.normal_avg_time,
|
|
231
|
+
h15_18.normal_avg_speed
|
|
232
|
+
FROM h15_18
|
|
233
|
+
UNION ALL
|
|
234
|
+
SELECT h22_6.name,
|
|
235
|
+
h22_6.datum,
|
|
236
|
+
h22_6.cas_interval,
|
|
237
|
+
h22_6.avg_time,
|
|
238
|
+
h22_6.avg_speed,
|
|
239
|
+
h22_6.normal_avg_time,
|
|
240
|
+
h22_6.normal_avg_speed
|
|
241
|
+
FROM h22_6
|
|
242
|
+
UNION ALL
|
|
243
|
+
SELECT h6_22.name,
|
|
244
|
+
h6_22.datum,
|
|
245
|
+
h6_22.cas_interval,
|
|
246
|
+
h6_22.avg_time,
|
|
247
|
+
h6_22.avg_speed,
|
|
248
|
+
h6_22.normal_avg_time,
|
|
249
|
+
h6_22.normal_avg_speed
|
|
250
|
+
FROM h6_22
|
|
251
|
+
UNION ALL
|
|
252
|
+
SELECT h7_10.name,
|
|
253
|
+
h7_10.datum,
|
|
254
|
+
h7_10.cas_interval,
|
|
255
|
+
h7_10.avg_time,
|
|
256
|
+
h7_10.avg_speed,
|
|
257
|
+
h7_10.normal_avg_time,
|
|
258
|
+
h7_10.normal_avg_speed
|
|
259
|
+
FROM h7_10
|
|
260
|
+
UNION ALL
|
|
261
|
+
SELECT h7_11_15_19.name,
|
|
262
|
+
h7_11_15_19.datum,
|
|
263
|
+
h7_11_15_19.cas_interval,
|
|
264
|
+
h7_11_15_19.avg_time,
|
|
265
|
+
h7_11_15_19.avg_speed,
|
|
266
|
+
h7_11_15_19.normal_avg_time,
|
|
267
|
+
h7_11_15_19.normal_avg_speed
|
|
268
|
+
FROM h7_11_15_19
|
|
269
|
+
),
|
|
270
|
+
-----------------------
|
|
271
|
+
data1 AS (
|
|
272
|
+
SELECT
|
|
273
|
+
trasy.name,
|
|
274
|
+
trasy.name_trasa,
|
|
275
|
+
trasy.name_usek,
|
|
276
|
+
CASE
|
|
277
|
+
WHEN trasy.is_opacny_smer THEN 'Zpět'::text
|
|
278
|
+
ELSE 'Tam'::text
|
|
279
|
+
END AS smer,
|
|
280
|
+
vbu.datum,
|
|
281
|
+
vbu.cas_interval,
|
|
282
|
+
vbu.avg_time,
|
|
283
|
+
vbu.avg_speed,
|
|
284
|
+
vbu.normal_avg_time,
|
|
285
|
+
vbu.normal_avg_speed
|
|
286
|
+
FROM v_barrande_union_time_interval vbu
|
|
287
|
+
JOIN analytic.v_barrande_route trasy ON trasy.name = vbu.name
|
|
288
|
+
),
|
|
289
|
+
data2 AS (
|
|
290
|
+
SELECT
|
|
291
|
+
data1.name_trasa,
|
|
292
|
+
data1.name_usek,
|
|
293
|
+
'Oba'::text AS smer,
|
|
294
|
+
data1.datum,
|
|
295
|
+
data1.cas_interval,
|
|
296
|
+
sum(data1.avg_time) AS avg_time,
|
|
297
|
+
avg(data1.avg_speed) AS avg_speed,
|
|
298
|
+
sum(data1.normal_avg_time) AS normal_avg_time,
|
|
299
|
+
avg(data1.normal_avg_speed) AS normal_avg_speed
|
|
300
|
+
FROM data1
|
|
301
|
+
GROUP BY data1.name_trasa, data1.name_usek, 'Oba'::text, data1.datum, data1.cas_interval
|
|
302
|
+
)
|
|
303
|
+
SELECT data1.name,
|
|
304
|
+
data1.name_trasa,
|
|
305
|
+
data1.name_usek,
|
|
306
|
+
data1.smer,
|
|
307
|
+
data1.datum,
|
|
308
|
+
data1.cas_interval,
|
|
309
|
+
data1.avg_time,
|
|
310
|
+
data1.avg_speed,
|
|
311
|
+
data1.normal_avg_time,
|
|
312
|
+
data1.normal_avg_speed
|
|
313
|
+
FROM data1
|
|
314
|
+
UNION
|
|
315
|
+
SELECT vbt.name,
|
|
316
|
+
data2.name_trasa,
|
|
317
|
+
data2.name_usek,
|
|
318
|
+
data2.smer,
|
|
319
|
+
data2.datum,
|
|
320
|
+
data2.cas_interval,
|
|
321
|
+
data2.avg_time,
|
|
322
|
+
data2.avg_speed,
|
|
323
|
+
data2.normal_avg_time,
|
|
324
|
+
data2.normal_avg_speed
|
|
325
|
+
FROM data2
|
|
326
|
+
JOIN analytic.v_barrande_route vbt ON vbt.name_trasa = data2.name_trasa AND vbt.name_usek = data2.name_usek AND NOT vbt.is_opacny_smer
|
|
327
|
+
on conflict (name,name_trasa,name_usek,smer,datum,cas_interval)
|
|
328
|
+
do update
|
|
329
|
+
SET avg_time = EXCLUDED.avg_time,
|
|
330
|
+
avg_speed = EXCLUDED.avg_speed,
|
|
331
|
+
normal_avg_time = EXCLUDED.normal_avg_time,
|
|
332
|
+
normal_avg_speed = EXCLUDED.normal_avg_speed;
|
|
333
|
+
end;
|
|
334
|
+
$procedure$
|
|
335
|
+
;
|
|
336
|
+
|
|
337
|
+
|
|
338
|
+
CREATE OR REPLACE VIEW analytic.v_barrandov_bridge_route_live
|
|
339
|
+
AS SELECT wrl.route_id,
|
|
340
|
+
to_timestamp((wrl.update_time / 1000)::double precision) AS update_time,
|
|
341
|
+
wrl."time",
|
|
342
|
+
wrl.length,
|
|
343
|
+
wrl.historic_time,
|
|
344
|
+
wrl.jam_level,
|
|
345
|
+
wrl.create_batch_id,
|
|
346
|
+
wrl.created_at,
|
|
347
|
+
wrl.created_by,
|
|
348
|
+
wrl.update_batch_id,
|
|
349
|
+
wrl.updated_at,
|
|
350
|
+
wrl.updated_by
|
|
351
|
+
FROM wazett.wazett_route_lives wrl
|
|
352
|
+
WHERE (wrl.route_id IN ( SELECT DISTINCT wazett_routes.id
|
|
353
|
+
FROM wazett.wazett_routes
|
|
354
|
+
WHERE wazett_routes.name ~~ 'BM %'::text)) AND wrl.update_time::double precision >= (date_part('epoch'::text, CURRENT_DATE - '7 days'::interval) * 1000::double precision);
|
|
355
|
+
|
|
356
|
+
CREATE OR REPLACE VIEW analytic.v_barrandov_bridge_route_details
|
|
357
|
+
AS SELECT re.id,
|
|
358
|
+
re.name,
|
|
359
|
+
re.section,
|
|
360
|
+
re.reverse_direction,
|
|
361
|
+
re.from_name,
|
|
362
|
+
re.to_name,
|
|
363
|
+
re.poradi
|
|
364
|
+
FROM ( SELECT r.id,
|
|
365
|
+
r.name,
|
|
366
|
+
CASE
|
|
367
|
+
WHEN r.name ~~ '% ÚS %'::text THEN true
|
|
368
|
+
WHEN r.name ~~ '% TN %'::text THEN false
|
|
369
|
+
ELSE NULL::boolean
|
|
370
|
+
END AS section,
|
|
371
|
+
CASE
|
|
372
|
+
WHEN r.name ~~ '% OS%'::text THEN true
|
|
373
|
+
ELSE false
|
|
374
|
+
END AS reverse_direction,
|
|
375
|
+
r.from_name,
|
|
376
|
+
r.to_name,
|
|
377
|
+
row_number() OVER (PARTITION BY r.name ORDER BY r.id DESC) AS poradi
|
|
378
|
+
FROM wazett.wazett_routes r
|
|
379
|
+
WHERE "left"(r.name, 2) = 'BM'::text) re;
|
|
380
|
+
|
|
381
|
+
|
|
382
|
+
|
|
383
|
+
CREATE OR REPLACE VIEW analytic.v_barrande_union_time_interval
|
|
384
|
+
AS WITH hodiny AS (
|
|
385
|
+
SELECT brh.name,
|
|
386
|
+
brh.datum,
|
|
387
|
+
brh.hodina,
|
|
388
|
+
brh.cas_interval,
|
|
389
|
+
brh.avg_time,
|
|
390
|
+
brh.avg_speed,
|
|
391
|
+
brh.normal_avg_time,
|
|
392
|
+
brh.normal_avg_speed
|
|
393
|
+
FROM analytic.v_barrande_route_hour brh
|
|
394
|
+
WHERE brh.datum < CURRENT_DATE OR brh.hodina < date_part('hour'::text, now())
|
|
395
|
+
), den AS (
|
|
396
|
+
SELECT hodiny.name,
|
|
397
|
+
hodiny.datum,
|
|
398
|
+
'0 - 24h'::text AS cas_interval,
|
|
399
|
+
round(avg(hodiny.avg_time), 2) AS avg_time,
|
|
400
|
+
round(avg(hodiny.avg_speed), 2) AS avg_speed,
|
|
401
|
+
round(avg(hodiny.normal_avg_time), 2) AS normal_avg_time,
|
|
402
|
+
round(avg(hodiny.normal_avg_speed), 2) AS normal_avg_speed
|
|
403
|
+
FROM hodiny
|
|
404
|
+
WHERE hodiny.datum < CURRENT_DATE
|
|
405
|
+
GROUP BY hodiny.name, hodiny.datum
|
|
406
|
+
), h15_18 AS (
|
|
407
|
+
SELECT hodiny.name,
|
|
408
|
+
hodiny.datum,
|
|
409
|
+
'15 -18'::text AS cas_interval,
|
|
410
|
+
round(avg(hodiny.avg_time), 2) AS avg_time,
|
|
411
|
+
round(avg(hodiny.avg_speed), 2) AS avg_speed,
|
|
412
|
+
round(avg(hodiny.normal_avg_time), 2) AS normal_avg_time,
|
|
413
|
+
round(avg(hodiny.normal_avg_speed), 2) AS normal_avg_speed
|
|
414
|
+
FROM hodiny
|
|
415
|
+
WHERE hodiny.hodina >= 15::double precision AND hodiny.hodina <= 17::double precision AND (hodiny.datum < CURRENT_DATE OR hodiny.hodina > 17::double precision)
|
|
416
|
+
GROUP BY hodiny.name, hodiny.datum
|
|
417
|
+
), h22_6 AS (
|
|
418
|
+
SELECT hodiny.name,
|
|
419
|
+
hodiny.datum,
|
|
420
|
+
'22 - 06'::text AS cas_interval,
|
|
421
|
+
round(avg(hodiny.avg_time), 2) AS avg_time,
|
|
422
|
+
round(avg(hodiny.avg_speed), 2) AS avg_speed,
|
|
423
|
+
round(avg(hodiny.normal_avg_time), 2) AS normal_avg_time,
|
|
424
|
+
round(avg(hodiny.normal_avg_speed), 2) AS normal_avg_speed
|
|
425
|
+
FROM hodiny
|
|
426
|
+
WHERE NOT (hodiny.hodina >= 6::double precision AND hodiny.hodina <= 21::double precision) AND hodiny.datum < CURRENT_DATE
|
|
427
|
+
GROUP BY hodiny.name, hodiny.datum
|
|
428
|
+
), h6_22 AS (
|
|
429
|
+
SELECT hodiny.name,
|
|
430
|
+
hodiny.datum,
|
|
431
|
+
'06 - 22'::text AS cas_interval,
|
|
432
|
+
round(avg(hodiny.avg_time), 2) AS avg_time,
|
|
433
|
+
round(avg(hodiny.avg_speed), 2) AS avg_speed,
|
|
434
|
+
round(avg(hodiny.normal_avg_time), 2) AS normal_avg_time,
|
|
435
|
+
round(avg(hodiny.normal_avg_speed), 2) AS normal_avg_speed
|
|
436
|
+
FROM hodiny
|
|
437
|
+
WHERE hodiny.hodina >= 6::double precision AND hodiny.hodina <= 21::double precision AND (hodiny.datum < CURRENT_DATE OR hodiny.hodina > 21::double precision)
|
|
438
|
+
GROUP BY hodiny.name, hodiny.datum
|
|
439
|
+
), h7_10 AS (
|
|
440
|
+
SELECT hodiny.name,
|
|
441
|
+
hodiny.datum,
|
|
442
|
+
'07 - 10'::text AS cas_interval,
|
|
443
|
+
round(avg(hodiny.avg_time), 2) AS avg_time,
|
|
444
|
+
round(avg(hodiny.avg_speed), 2) AS avg_speed,
|
|
445
|
+
round(avg(hodiny.normal_avg_time), 2) AS normal_avg_time,
|
|
446
|
+
round(avg(hodiny.normal_avg_speed), 2) AS normal_avg_speed
|
|
447
|
+
FROM hodiny
|
|
448
|
+
WHERE hodiny.hodina >= 7::double precision AND hodiny.hodina <= 9::double precision AND (hodiny.datum < CURRENT_DATE OR hodiny.hodina > 10::double precision)
|
|
449
|
+
GROUP BY hodiny.name, hodiny.datum
|
|
450
|
+
), h7_11_15_19 AS (
|
|
451
|
+
SELECT hodiny.name,
|
|
452
|
+
hodiny.datum,
|
|
453
|
+
'07 - 11, 15 - 19'::text AS cas_interval,
|
|
454
|
+
round(avg(hodiny.avg_time), 2) AS avg_time,
|
|
455
|
+
round(avg(hodiny.avg_speed), 2) AS avg_speed,
|
|
456
|
+
round(avg(hodiny.normal_avg_time), 2) AS normal_avg_time,
|
|
457
|
+
round(avg(hodiny.normal_avg_speed), 2) AS normal_avg_speed
|
|
458
|
+
FROM hodiny
|
|
459
|
+
WHERE (hodiny.hodina >= 7::double precision AND hodiny.hodina <= 10::double precision OR hodiny.hodina >= 15::double precision AND hodiny.hodina <= 18::double precision) AND (hodiny.datum < CURRENT_DATE OR hodiny.hodina > 18::double precision)
|
|
460
|
+
GROUP BY hodiny.name, hodiny.datum
|
|
461
|
+
)
|
|
462
|
+
SELECT hodiny.name,
|
|
463
|
+
hodiny.datum,
|
|
464
|
+
hodiny.cas_interval,
|
|
465
|
+
hodiny.avg_time,
|
|
466
|
+
hodiny.avg_speed,
|
|
467
|
+
hodiny.normal_avg_time,
|
|
468
|
+
hodiny.normal_avg_speed
|
|
469
|
+
FROM hodiny
|
|
470
|
+
UNION ALL
|
|
471
|
+
SELECT den.name,
|
|
472
|
+
den.datum,
|
|
473
|
+
den.cas_interval,
|
|
474
|
+
den.avg_time,
|
|
475
|
+
den.avg_speed,
|
|
476
|
+
den.normal_avg_time,
|
|
477
|
+
den.normal_avg_speed
|
|
478
|
+
FROM den
|
|
479
|
+
UNION ALL
|
|
480
|
+
SELECT h15_18.name,
|
|
481
|
+
h15_18.datum,
|
|
482
|
+
h15_18.cas_interval,
|
|
483
|
+
h15_18.avg_time,
|
|
484
|
+
h15_18.avg_speed,
|
|
485
|
+
h15_18.normal_avg_time,
|
|
486
|
+
h15_18.normal_avg_speed
|
|
487
|
+
FROM h15_18
|
|
488
|
+
UNION ALL
|
|
489
|
+
SELECT h22_6.name,
|
|
490
|
+
h22_6.datum,
|
|
491
|
+
h22_6.cas_interval,
|
|
492
|
+
h22_6.avg_time,
|
|
493
|
+
h22_6.avg_speed,
|
|
494
|
+
h22_6.normal_avg_time,
|
|
495
|
+
h22_6.normal_avg_speed
|
|
496
|
+
FROM h22_6
|
|
497
|
+
UNION ALL
|
|
498
|
+
SELECT h6_22.name,
|
|
499
|
+
h6_22.datum,
|
|
500
|
+
h6_22.cas_interval,
|
|
501
|
+
h6_22.avg_time,
|
|
502
|
+
h6_22.avg_speed,
|
|
503
|
+
h6_22.normal_avg_time,
|
|
504
|
+
h6_22.normal_avg_speed
|
|
505
|
+
FROM h6_22
|
|
506
|
+
UNION ALL
|
|
507
|
+
SELECT h7_10.name,
|
|
508
|
+
h7_10.datum,
|
|
509
|
+
h7_10.cas_interval,
|
|
510
|
+
h7_10.avg_time,
|
|
511
|
+
h7_10.avg_speed,
|
|
512
|
+
h7_10.normal_avg_time,
|
|
513
|
+
h7_10.normal_avg_speed
|
|
514
|
+
FROM h7_10
|
|
515
|
+
UNION ALL
|
|
516
|
+
SELECT h7_11_15_19.name,
|
|
517
|
+
h7_11_15_19.datum,
|
|
518
|
+
h7_11_15_19.cas_interval,
|
|
519
|
+
h7_11_15_19.avg_time,
|
|
520
|
+
h7_11_15_19.avg_speed,
|
|
521
|
+
h7_11_15_19.normal_avg_time,
|
|
522
|
+
h7_11_15_19.normal_avg_speed
|
|
523
|
+
FROM h7_11_15_19;
|
|
524
|
+
|
|
525
|
+
|
|
526
|
+
CREATE OR REPLACE VIEW analytic.v_barrande_last_update
|
|
527
|
+
AS SELECT to_timestamp((wrl.update_time / 1000)::double precision)::timestamp without time zone AS last_update
|
|
528
|
+
FROM wazett.wazett_route_lives wrl
|
|
529
|
+
LEFT JOIN wazett.wazett_routes wr ON wrl.route_id = wr.id
|
|
530
|
+
WHERE "left"(wr.name, 3) = 'BM '::text
|
|
531
|
+
ORDER BY wrl.update_time DESC
|
|
532
|
+
LIMIT 1;
|
|
533
|
+
|
|
534
|
+
|
|
535
|
+
CREATE OR REPLACE VIEW analytic.v_barrande_route
|
|
536
|
+
AS SELECT DISTINCT ON (wazett_routes.name) wazett_routes.name,
|
|
537
|
+
CASE
|
|
538
|
+
WHEN "position"(wazett_routes.name, ' TN'::text) > 0 THEN true
|
|
539
|
+
ELSE false
|
|
540
|
+
END AS is_trasa,
|
|
541
|
+
CASE
|
|
542
|
+
WHEN "position"(wazett_routes.name, ' ÚS'::text) > 0 THEN true
|
|
543
|
+
ELSE false
|
|
544
|
+
END AS is_usek,
|
|
545
|
+
CASE
|
|
546
|
+
WHEN "position"(wazett_routes.name, ' OS'::text) > 0 THEN true
|
|
547
|
+
ELSE false
|
|
548
|
+
END AS is_opacny_smer,
|
|
549
|
+
CASE
|
|
550
|
+
WHEN wazett_routes.id = ANY (ARRAY[32875, 32876]) THEN 'OICT 3 DO'::text
|
|
551
|
+
WHEN wazett_routes.id = ANY (ARRAY[32888, 32889]) THEN 'OICT 3 OD'::text
|
|
552
|
+
ELSE "substring"(wazett_routes.name, 4,
|
|
553
|
+
CASE
|
|
554
|
+
WHEN "position"(wazett_routes.name, ' TN'::text) > 0 THEN "position"(wazett_routes.name, ' TN'::text) - 3
|
|
555
|
+
WHEN "position"(wazett_routes.name, ' ÚS'::text) > 0 THEN "position"(wazett_routes.name, ' ÚS'::text) - 3
|
|
556
|
+
ELSE NULL::integer
|
|
557
|
+
END)
|
|
558
|
+
END AS name_trasa,
|
|
559
|
+
"substring"(wazett_routes.name,
|
|
560
|
+
CASE
|
|
561
|
+
WHEN "position"(wazett_routes.name, ' ÚS'::text) > 0 THEN "position"(wazett_routes.name, ' ÚS'::text) + 4
|
|
562
|
+
ELSE length(wazett_routes.name) + 1
|
|
563
|
+
END,
|
|
564
|
+
CASE
|
|
565
|
+
WHEN "position"(wazett_routes.name, ' OS'::text) > 0 THEN "position"(wazett_routes.name, ' OS'::text) - "position"(wazett_routes.name, ' ÚS'::text) - 4
|
|
566
|
+
ELSE length(wazett_routes.name) - "position"(wazett_routes.name, ' ÚS'::text)
|
|
567
|
+
END) AS name_usek
|
|
568
|
+
FROM wazett.wazett_routes
|
|
569
|
+
WHERE "left"(wazett_routes.name, 2) = 'BM'::text AND NOT (EXISTS ( SELECT 1
|
|
570
|
+
FROM analytic.barrande_black_list_route bl
|
|
571
|
+
WHERE bl.route_id = wazett_routes.id))
|
|
572
|
+
ORDER BY wazett_routes.name, wazett_routes.created_at DESC;
|
|
573
|
+
|
|
574
|
+
CREATE OR REPLACE VIEW analytic.v_barrande_data_all
|
|
575
|
+
AS WITH data1 AS (
|
|
576
|
+
SELECT trasy.name,
|
|
577
|
+
trasy.name_trasa,
|
|
578
|
+
trasy.name_usek,
|
|
579
|
+
CASE
|
|
580
|
+
WHEN trasy.is_opacny_smer THEN 'Zpět'::text
|
|
581
|
+
ELSE 'Tam'::text
|
|
582
|
+
END AS smer,
|
|
583
|
+
vbu.datum,
|
|
584
|
+
vbu.cas_interval,
|
|
585
|
+
vbu.avg_time,
|
|
586
|
+
vbu.avg_speed,
|
|
587
|
+
vbu.normal_avg_time,
|
|
588
|
+
vbu.normal_avg_speed
|
|
589
|
+
FROM analytic.v_barrande_union_time_interval vbu
|
|
590
|
+
JOIN analytic.v_barrande_route trasy ON trasy.name = vbu.name
|
|
591
|
+
), data2 AS (
|
|
592
|
+
SELECT data1.name_trasa,
|
|
593
|
+
data1.name_usek,
|
|
594
|
+
'Oba'::text AS smer,
|
|
595
|
+
data1.datum,
|
|
596
|
+
data1.cas_interval,
|
|
597
|
+
sum(data1.avg_time) AS avg_time,
|
|
598
|
+
avg(data1.avg_speed) AS avg_speed,
|
|
599
|
+
sum(data1.normal_avg_time) AS normal_avg_time,
|
|
600
|
+
avg(data1.normal_avg_speed) AS normal_avg_speed
|
|
601
|
+
FROM data1
|
|
602
|
+
GROUP BY data1.name_trasa, data1.name_usek, 'Oba'::text, data1.datum, data1.cas_interval
|
|
603
|
+
)
|
|
604
|
+
SELECT data1.name,
|
|
605
|
+
data1.name_trasa,
|
|
606
|
+
data1.name_usek,
|
|
607
|
+
data1.smer,
|
|
608
|
+
data1.datum,
|
|
609
|
+
data1.cas_interval,
|
|
610
|
+
data1.avg_time,
|
|
611
|
+
data1.avg_speed,
|
|
612
|
+
data1.normal_avg_time,
|
|
613
|
+
data1.normal_avg_speed
|
|
614
|
+
FROM data1
|
|
615
|
+
UNION
|
|
616
|
+
SELECT vbt.name,
|
|
617
|
+
data2.name_trasa,
|
|
618
|
+
data2.name_usek,
|
|
619
|
+
data2.smer,
|
|
620
|
+
data2.datum,
|
|
621
|
+
data2.cas_interval,
|
|
622
|
+
data2.avg_time,
|
|
623
|
+
data2.avg_speed,
|
|
624
|
+
data2.normal_avg_time,
|
|
625
|
+
data2.normal_avg_speed
|
|
626
|
+
FROM data2
|
|
627
|
+
JOIN analytic.v_barrande_route vbt ON vbt.name_trasa = data2.name_trasa AND vbt.name_usek = data2.name_usek AND NOT vbt.is_opacny_smer;
|
|
628
|
+
|
|
629
|
+
|
|
630
|
+
|
|
631
|
+
CREATE TABLE analytic.waze_dashboard_route_name (
|
|
632
|
+
route_id int8 NOT NULL,
|
|
633
|
+
idx int4 NULL,
|
|
634
|
+
"from" varchar(100) NULL,
|
|
635
|
+
"to" varchar(100) NULL,
|
|
636
|
+
db_name varchar(100) NULL,
|
|
637
|
+
"name" varchar(500) NULL,
|
|
638
|
+
CONSTRAINT waze_dashboard_route_name_pkey PRIMARY KEY (route_id)
|
|
639
|
+
);
|
|
640
|
+
|
|
641
|
+
-- analytic.v_route_live source
|
|
642
|
+
|
|
643
|
+
CREATE OR REPLACE VIEW analytic.v_route_live
|
|
644
|
+
AS SELECT wrl.route_id,
|
|
645
|
+
wrl.update_time,
|
|
646
|
+
wrl."time",
|
|
647
|
+
wrl.length,
|
|
648
|
+
wrl.historic_time,
|
|
649
|
+
wrl.jam_level,
|
|
650
|
+
wrl.create_batch_id,
|
|
651
|
+
wrl.created_at,
|
|
652
|
+
wrl.created_by,
|
|
653
|
+
wrl.update_batch_id,
|
|
654
|
+
wrl.updated_at,
|
|
655
|
+
wrl.updated_by
|
|
656
|
+
FROM wazett.wazett_route_lives wrl
|
|
657
|
+
WHERE (wrl.route_id = ANY (ARRAY[24949, 24953, 24962, 24924, 24925, 24950, 24951, 24952, 24954, 24955, 24956, 24957, 24958, 24960, 24961, 24963, 24964, 24965, 24966, 24967, 24968, 24969])) AND wrl.update_time::double precision >= (( SELECT max(wazett_route_lives.update_time)::double precision - date_part('epoch'::text, '1 year'::interval) * 1000::double precision AS max
|
|
658
|
+
FROM wazett.wazett_route_lives));
|
|
659
|
+
|
|
660
|
+
-- analytic.v_route_travel_times source
|
|
661
|
+
|
|
662
|
+
CREATE OR REPLACE VIEW analytic.v_route_travel_times
|
|
663
|
+
AS SELECT ts.route_id,
|
|
664
|
+
ts.year,
|
|
665
|
+
ts.month,
|
|
666
|
+
ts.day,
|
|
667
|
+
ts.dow,
|
|
668
|
+
ts.hour,
|
|
669
|
+
ts.quarter,
|
|
670
|
+
ts.hour + (ts.quarter::numeric / 60::numeric)::double precision AS hour_quarter,
|
|
671
|
+
((((((((ts.year || '-'::text) || ts.month) || '-'::text) || ts.day) || ' '::text) || ts.hour) || ':'::text) || ts.quarter)::timestamp without time zone AS date,
|
|
672
|
+
avg(ts.travel_time)::integer AS travel_time
|
|
673
|
+
FROM ( SELECT raw.route_id,
|
|
674
|
+
raw.update_time,
|
|
675
|
+
raw.travel_time,
|
|
676
|
+
date_part('year'::text, raw.update_time) AS year,
|
|
677
|
+
date_part('month'::text, raw.update_time) AS month,
|
|
678
|
+
date_part('day'::text, raw.update_time) AS day,
|
|
679
|
+
date_part('dow'::text, raw.update_time) AS dow,
|
|
680
|
+
date_part('hour'::text, raw.update_time) AS hour,
|
|
681
|
+
date_part('minute'::text, raw.update_time) AS minute,
|
|
682
|
+
date_part('minute'::text, raw.update_time)::integer / 15 * 15 AS quarter
|
|
683
|
+
FROM ( SELECT wazett_route_lives.route_id,
|
|
684
|
+
timezone('Europe/Prague'::text, to_timestamp((wazett_route_lives.update_time / 1000)::double precision)::timestamp without time zone) AS update_time,
|
|
685
|
+
wazett_route_lives."time" AS travel_time
|
|
686
|
+
FROM wazett.wazett_route_lives
|
|
687
|
+
JOIN analytic.waze_dashboard_route_name wdrn ON wdrn.route_id = wazett_route_lives.route_id) raw) ts
|
|
688
|
+
WHERE ts.year > 2000::double precision
|
|
689
|
+
GROUP BY ts.route_id, ts.year, ts.month, ts.day, ts.dow, ts.hour, ts.quarter;
|
|
690
|
+
|
|
691
|
+
CREATE TABLE analytic.mala_strana_route_hour_core (
|
|
692
|
+
"name" text NOT NULL,
|
|
693
|
+
datum date NOT NULL,
|
|
694
|
+
hodina float8 NOT NULL,
|
|
695
|
+
cas_interval text NOT NULL,
|
|
696
|
+
avg_time numeric NULL,
|
|
697
|
+
avg_speed numeric NULL,
|
|
698
|
+
CONSTRAINT mala_strana_route_hour_core_pkey PRIMARY KEY (name, datum, hodina, cas_interval)
|
|
699
|
+
);
|
|
700
|
+
CREATE INDEX mala_strana_route_hour_core_date ON analytic.mala_strana_route_hour_core USING btree (datum);
|
|
701
|
+
|
|
702
|
+
CREATE TABLE analytic.mala_strana_data_all (
|
|
703
|
+
"name" text NOT NULL,
|
|
704
|
+
name_trasa text NOT NULL,
|
|
705
|
+
name_usek text NOT NULL,
|
|
706
|
+
smer text NOT NULL,
|
|
707
|
+
datum date NOT NULL,
|
|
708
|
+
cas_interval text NOT NULL,
|
|
709
|
+
avg_time numeric NULL,
|
|
710
|
+
avg_speed numeric NULL,
|
|
711
|
+
normal_avg_time numeric NULL,
|
|
712
|
+
normal_avg_speed numeric NULL
|
|
713
|
+
);
|
|
714
|
+
CREATE UNIQUE INDEX mala_strana_data_all_pkey ON analytic.mala_strana_data_all USING btree (name, name_trasa, name_usek, smer, datum, cas_interval);
|
|
715
|
+
|
|
716
|
+
CREATE OR REPLACE VIEW analytic.v_mala_strana_route
|
|
717
|
+
AS SELECT DISTINCT ON (wdrn.name) wdrn.name,
|
|
718
|
+
true AS is_trasa,
|
|
719
|
+
false AS is_usek,
|
|
720
|
+
false AS is_opacny_smer,
|
|
721
|
+
wdrn.name AS name_trasa,
|
|
722
|
+
"substring"(wazett_routes.name,
|
|
723
|
+
CASE
|
|
724
|
+
WHEN "position"(wazett_routes.name, ' ÚS'::text) > 0 THEN "position"(wazett_routes.name, ' ÚS'::text) + 4
|
|
725
|
+
ELSE length(wazett_routes.name) + 1
|
|
726
|
+
END,
|
|
727
|
+
CASE
|
|
728
|
+
WHEN "position"(wazett_routes.name, ' OS'::text) > 0 THEN "position"(wazett_routes.name, ' OS'::text) - "position"(wazett_routes.name, ' ÚS'::text) - 4
|
|
729
|
+
ELSE length(wazett_routes.name) - "position"(wazett_routes.name, ' ÚS'::text)
|
|
730
|
+
END) AS name_usek
|
|
731
|
+
FROM wazett.wazett_routes
|
|
732
|
+
JOIN analytic.waze_dashboard_route_name wdrn ON wazett_routes.id = wdrn.route_id
|
|
733
|
+
ORDER BY wdrn.name, wazett_routes.created_at DESC;
|
|
734
|
+
|
|
735
|
+
CREATE MATERIALIZED VIEW analytic.mv_mala_strana_normal
|
|
736
|
+
TABLESPACE pg_default
|
|
737
|
+
AS SELECT vtbh.name,
|
|
738
|
+
vtbh.hodina,
|
|
739
|
+
round(avg(vtbh.avg_time), 2) AS avg_time,
|
|
740
|
+
round(avg(vtbh.avg_speed)) AS avg_speed
|
|
741
|
+
FROM ( SELECT wdrn.name,
|
|
742
|
+
CASE
|
|
743
|
+
WHEN wdrn.idx < 38 THEN 'group1'::text
|
|
744
|
+
ELSE 'group2'::text
|
|
745
|
+
END AS skupina,
|
|
746
|
+
rl.ts::date AS datum,
|
|
747
|
+
date_part('hour'::text, rl.ts) AS hodina,
|
|
748
|
+
(to_char(date_part('hour'::text, rl.ts), '09'::text) || ' -'::text) || to_char(date_part('hour'::text, rl.ts) + 1::double precision, '09'::text) AS cas_interval,
|
|
749
|
+
rl.avg_time,
|
|
750
|
+
rl.avg_speed
|
|
751
|
+
FROM ( SELECT rl_1.route_id,
|
|
752
|
+
date_trunc('hour'::text, to_timestamp((rl_1.update_time / 1000)::double precision)) AS ts,
|
|
753
|
+
round(avg(rl_1."time"), 2) AS avg_time,
|
|
754
|
+
round(avg(rl_1.length * 1000 / (NULLIF(rl_1."time", 0) * 360)), 2) AS avg_speed
|
|
755
|
+
FROM wazett.wazett_route_lives rl_1
|
|
756
|
+
WHERE rl_1.update_time >= '1665360000000'::bigint
|
|
757
|
+
GROUP BY rl_1.route_id, (date_trunc('hour'::text, to_timestamp((rl_1.update_time / 1000)::double precision)))) rl
|
|
758
|
+
JOIN analytic.waze_dashboard_route_name wdrn ON wdrn.route_id = rl.route_id) vtbh
|
|
759
|
+
WHERE vtbh.skupina = 'group1'::text AND vtbh.datum >= '2022-10-10'::date AND vtbh.datum <= '2022-10-25'::date AND (date_part('dow'::text, vtbh.datum) = ANY (ARRAY[2::double precision, 3::double precision, 4::double precision])) OR vtbh.skupina = 'group2'::text AND vtbh.datum >= '2023-01-09'::date AND vtbh.datum <= '2023-01-29'::date AND (date_part('dow'::text, vtbh.datum) = ANY (ARRAY[2::double precision, 3::double precision, 4::double precision]))
|
|
760
|
+
GROUP BY vtbh.name, vtbh.hodina
|
|
761
|
+
WITH DATA;
|
|
762
|
+
|
|
763
|
+
|
|
764
|
+
CREATE OR REPLACE PROCEDURE analytic.update_mala_strana()
|
|
765
|
+
LANGUAGE plpgsql
|
|
766
|
+
AS $procedure$
|
|
767
|
+
declare
|
|
768
|
+
lastupdatetimestamp timestamptz;
|
|
769
|
+
lastupdateunix bigint;
|
|
770
|
+
begin
|
|
771
|
+
begin
|
|
772
|
+
select
|
|
773
|
+
case
|
|
774
|
+
when start_day is not null
|
|
775
|
+
then start_day
|
|
776
|
+
else '2022-01-01'
|
|
777
|
+
end as start_day_from into lastupdatetimestamp
|
|
778
|
+
from (select max(datum)-interval '1 days' start_day from analytic.mala_strana_route_hour_core) malastranamax;
|
|
779
|
+
|
|
780
|
+
lastupdateunix := extract ('epoch' from lastupdatetimestamp) * 1000;
|
|
781
|
+
|
|
782
|
+
-- dopoctu hodinovou agregaci (podobné v_mala_strana_route_hour_core) POT5EBUJEME TAKTO?
|
|
783
|
+
insert into analytic.mala_strana_route_hour_core
|
|
784
|
+
SELECT
|
|
785
|
+
wdrn.name,
|
|
786
|
+
rl.ts::date AS datum,
|
|
787
|
+
date_part('hour'::text, rl.ts) AS hodina,
|
|
788
|
+
(to_char(date_part('hour'::text, rl.ts), '09'::text) || ' -'::text) || to_char(date_part('hour'::text, rl.ts) + 1::double precision, '09'::text) AS cas_interval,
|
|
789
|
+
avg_time,
|
|
790
|
+
avg_speed
|
|
791
|
+
FROM (
|
|
792
|
+
select
|
|
793
|
+
route_id
|
|
794
|
+
-- timezone('Europe/Prague'::text, to_timestamp((update_time / 1000)::double precision)::timestamp without time zone)
|
|
795
|
+
,date_trunc('hour', to_timestamp((update_time / 1000))::timestamp) as ts
|
|
796
|
+
,round(avg(time), 2) AS avg_time
|
|
797
|
+
,round(avg(rl.length * 1000 / (nullif(rl."time", 0) * 360)), 2) AS avg_speed
|
|
798
|
+
from wazett.wazett_route_lives rl
|
|
799
|
+
where
|
|
800
|
+
-- route_id = 22706 and
|
|
801
|
+
rl.update_time > lastupdateunix and
|
|
802
|
+
rl.length > 0
|
|
803
|
+
group by 1,2) rl
|
|
804
|
+
JOIN analytic.waze_dashboard_route_name wdrn ON wdrn.route_id = rl.route_id
|
|
805
|
+
ON CONFLICT (name,datum,hodina,cas_interval)
|
|
806
|
+
DO update
|
|
807
|
+
SET avg_time = EXCLUDED.avg_time,
|
|
808
|
+
avg_speed = EXCLUDED.avg_speed
|
|
809
|
+
;
|
|
810
|
+
|
|
811
|
+
insert into analytic.mala_strana_data_all
|
|
812
|
+
WITH
|
|
813
|
+
v_ms_route_hour as (
|
|
814
|
+
SELECT p.name,
|
|
815
|
+
p.datum,
|
|
816
|
+
p.hodina,
|
|
817
|
+
p.cas_interval,
|
|
818
|
+
p.avg_time,
|
|
819
|
+
p.avg_speed,
|
|
820
|
+
n.avg_time AS normal_avg_time,
|
|
821
|
+
n.avg_speed AS normal_avg_speed
|
|
822
|
+
FROM analytic.mala_strana_route_hour_core p
|
|
823
|
+
LEFT JOIN analytic.mv_mala_strana_normal n ON n.name = p.name AND p.hodina = n.hodina
|
|
824
|
+
where datum > lastupdatetimestamp
|
|
825
|
+
),
|
|
826
|
+
-- konec v_ms_route_hour
|
|
827
|
+
v_ms_union_time_interval as (
|
|
828
|
+
WITH hodiny AS (
|
|
829
|
+
SELECT brh.name,
|
|
830
|
+
brh.datum,
|
|
831
|
+
brh.hodina,
|
|
832
|
+
brh.cas_interval,
|
|
833
|
+
brh.avg_time,
|
|
834
|
+
brh.avg_speed,
|
|
835
|
+
brh.normal_avg_time,
|
|
836
|
+
brh.normal_avg_speed
|
|
837
|
+
FROM v_ms_route_hour brh
|
|
838
|
+
WHERE brh.datum < CURRENT_DATE OR brh.hodina < date_part('hour'::text, now())
|
|
839
|
+
), den AS (
|
|
840
|
+
SELECT hodiny.name,
|
|
841
|
+
hodiny.datum,
|
|
842
|
+
'0 - 24h'::text AS cas_interval,
|
|
843
|
+
round(avg(hodiny.avg_time), 2) AS avg_time,
|
|
844
|
+
round(avg(hodiny.avg_speed), 2) AS avg_speed,
|
|
845
|
+
round(avg(hodiny.normal_avg_time), 2) AS normal_avg_time,
|
|
846
|
+
round(avg(hodiny.normal_avg_speed), 2) AS normal_avg_speed
|
|
847
|
+
FROM hodiny
|
|
848
|
+
WHERE hodiny.datum < CURRENT_DATE
|
|
849
|
+
GROUP BY hodiny.name, hodiny.datum
|
|
850
|
+
), h15_18 AS (
|
|
851
|
+
SELECT hodiny.name,
|
|
852
|
+
hodiny.datum,
|
|
853
|
+
'15 -18'::text AS cas_interval,
|
|
854
|
+
round(avg(hodiny.avg_time), 2) AS avg_time,
|
|
855
|
+
round(avg(hodiny.avg_speed), 2) AS avg_speed,
|
|
856
|
+
round(avg(hodiny.normal_avg_time), 2) AS normal_avg_time,
|
|
857
|
+
round(avg(hodiny.normal_avg_speed), 2) AS normal_avg_speed
|
|
858
|
+
FROM hodiny
|
|
859
|
+
WHERE hodiny.hodina >= 15::double precision AND hodiny.hodina <= 17::double precision AND (hodiny.datum < CURRENT_DATE OR hodiny.hodina > 17::double precision)
|
|
860
|
+
GROUP BY hodiny.name, hodiny.datum
|
|
861
|
+
), h22_6 AS (
|
|
862
|
+
SELECT hodiny.name,
|
|
863
|
+
hodiny.datum,
|
|
864
|
+
'22 - 06'::text AS cas_interval,
|
|
865
|
+
round(avg(hodiny.avg_time), 2) AS avg_time,
|
|
866
|
+
round(avg(hodiny.avg_speed), 2) AS avg_speed,
|
|
867
|
+
round(avg(hodiny.normal_avg_time), 2) AS normal_avg_time,
|
|
868
|
+
round(avg(hodiny.normal_avg_speed), 2) AS normal_avg_speed
|
|
869
|
+
FROM hodiny
|
|
870
|
+
WHERE NOT (hodiny.hodina >= 6::double precision AND hodiny.hodina <= 21::double precision) AND hodiny.datum < CURRENT_DATE
|
|
871
|
+
GROUP BY hodiny.name, hodiny.datum
|
|
872
|
+
), h6_22 AS (
|
|
873
|
+
SELECT hodiny.name,
|
|
874
|
+
hodiny.datum,
|
|
875
|
+
'06 - 22'::text AS cas_interval,
|
|
876
|
+
round(avg(hodiny.avg_time), 2) AS avg_time,
|
|
877
|
+
round(avg(hodiny.avg_speed), 2) AS avg_speed,
|
|
878
|
+
round(avg(hodiny.normal_avg_time), 2) AS normal_avg_time,
|
|
879
|
+
round(avg(hodiny.normal_avg_speed), 2) AS normal_avg_speed
|
|
880
|
+
FROM hodiny
|
|
881
|
+
WHERE hodiny.hodina >= 6::double precision AND hodiny.hodina <= 21::double precision AND (hodiny.datum < CURRENT_DATE OR hodiny.hodina > 21::double precision)
|
|
882
|
+
GROUP BY hodiny.name, hodiny.datum
|
|
883
|
+
), h7_10 AS (
|
|
884
|
+
SELECT hodiny.name,
|
|
885
|
+
hodiny.datum,
|
|
886
|
+
'07 - 10'::text AS cas_interval,
|
|
887
|
+
round(avg(hodiny.avg_time), 2) AS avg_time,
|
|
888
|
+
round(avg(hodiny.avg_speed), 2) AS avg_speed,
|
|
889
|
+
round(avg(hodiny.normal_avg_time), 2) AS normal_avg_time,
|
|
890
|
+
round(avg(hodiny.normal_avg_speed), 2) AS normal_avg_speed
|
|
891
|
+
FROM hodiny
|
|
892
|
+
WHERE hodiny.hodina >= 7::double precision AND hodiny.hodina <= 9::double precision AND (hodiny.datum < CURRENT_DATE OR hodiny.hodina > 10::double precision)
|
|
893
|
+
GROUP BY hodiny.name, hodiny.datum
|
|
894
|
+
), h7_11_15_19 AS (
|
|
895
|
+
SELECT hodiny.name,
|
|
896
|
+
hodiny.datum,
|
|
897
|
+
'07 - 11, 15 - 19'::text AS cas_interval,
|
|
898
|
+
round(avg(hodiny.avg_time), 2) AS avg_time,
|
|
899
|
+
round(avg(hodiny.avg_speed), 2) AS avg_speed,
|
|
900
|
+
round(avg(hodiny.normal_avg_time), 2) AS normal_avg_time,
|
|
901
|
+
round(avg(hodiny.normal_avg_speed), 2) AS normal_avg_speed
|
|
902
|
+
FROM hodiny
|
|
903
|
+
WHERE (hodiny.hodina >= 7::double precision AND hodiny.hodina <= 10::double precision OR hodiny.hodina >= 15::double precision AND hodiny.hodina <= 18::double precision) AND (hodiny.datum < CURRENT_DATE OR hodiny.hodina > 18::double precision)
|
|
904
|
+
GROUP BY hodiny.name, hodiny.datum
|
|
905
|
+
)
|
|
906
|
+
SELECT hodiny.name,
|
|
907
|
+
hodiny.datum,
|
|
908
|
+
hodiny.cas_interval,
|
|
909
|
+
hodiny.avg_time,
|
|
910
|
+
hodiny.avg_speed,
|
|
911
|
+
hodiny.normal_avg_time,
|
|
912
|
+
hodiny.normal_avg_speed
|
|
913
|
+
FROM hodiny
|
|
914
|
+
UNION ALL
|
|
915
|
+
SELECT den.name,
|
|
916
|
+
den.datum,
|
|
917
|
+
den.cas_interval,
|
|
918
|
+
den.avg_time,
|
|
919
|
+
den.avg_speed,
|
|
920
|
+
den.normal_avg_time,
|
|
921
|
+
den.normal_avg_speed
|
|
922
|
+
FROM den
|
|
923
|
+
UNION ALL
|
|
924
|
+
SELECT h15_18.name,
|
|
925
|
+
h15_18.datum,
|
|
926
|
+
h15_18.cas_interval,
|
|
927
|
+
h15_18.avg_time,
|
|
928
|
+
h15_18.avg_speed,
|
|
929
|
+
h15_18.normal_avg_time,
|
|
930
|
+
h15_18.normal_avg_speed
|
|
931
|
+
FROM h15_18
|
|
932
|
+
UNION ALL
|
|
933
|
+
SELECT h22_6.name,
|
|
934
|
+
h22_6.datum,
|
|
935
|
+
h22_6.cas_interval,
|
|
936
|
+
h22_6.avg_time,
|
|
937
|
+
h22_6.avg_speed,
|
|
938
|
+
h22_6.normal_avg_time,
|
|
939
|
+
h22_6.normal_avg_speed
|
|
940
|
+
FROM h22_6
|
|
941
|
+
UNION ALL
|
|
942
|
+
SELECT h6_22.name,
|
|
943
|
+
h6_22.datum,
|
|
944
|
+
h6_22.cas_interval,
|
|
945
|
+
h6_22.avg_time,
|
|
946
|
+
h6_22.avg_speed,
|
|
947
|
+
h6_22.normal_avg_time,
|
|
948
|
+
h6_22.normal_avg_speed
|
|
949
|
+
FROM h6_22
|
|
950
|
+
UNION ALL
|
|
951
|
+
SELECT h7_10.name,
|
|
952
|
+
h7_10.datum,
|
|
953
|
+
h7_10.cas_interval,
|
|
954
|
+
h7_10.avg_time,
|
|
955
|
+
h7_10.avg_speed,
|
|
956
|
+
h7_10.normal_avg_time,
|
|
957
|
+
h7_10.normal_avg_speed
|
|
958
|
+
FROM h7_10
|
|
959
|
+
UNION ALL
|
|
960
|
+
SELECT h7_11_15_19.name,
|
|
961
|
+
h7_11_15_19.datum,
|
|
962
|
+
h7_11_15_19.cas_interval,
|
|
963
|
+
h7_11_15_19.avg_time,
|
|
964
|
+
h7_11_15_19.avg_speed,
|
|
965
|
+
h7_11_15_19.normal_avg_time,
|
|
966
|
+
h7_11_15_19.normal_avg_speed
|
|
967
|
+
FROM h7_11_15_19
|
|
968
|
+
),
|
|
969
|
+
-----------------------
|
|
970
|
+
data1 AS (
|
|
971
|
+
SELECT
|
|
972
|
+
trasy.name,
|
|
973
|
+
trasy.name_trasa,
|
|
974
|
+
trasy.name_usek,
|
|
975
|
+
CASE
|
|
976
|
+
WHEN trasy.is_opacny_smer THEN 'Zpět'::text
|
|
977
|
+
ELSE 'Tam'::text
|
|
978
|
+
END AS smer,
|
|
979
|
+
vbu.datum,
|
|
980
|
+
vbu.cas_interval,
|
|
981
|
+
vbu.avg_time,
|
|
982
|
+
vbu.avg_speed,
|
|
983
|
+
vbu.normal_avg_time,
|
|
984
|
+
vbu.normal_avg_speed
|
|
985
|
+
FROM v_ms_union_time_interval vbu
|
|
986
|
+
JOIN analytic.v_mala_strana_route trasy ON trasy.name = vbu.name
|
|
987
|
+
),
|
|
988
|
+
data2 AS (
|
|
989
|
+
SELECT
|
|
990
|
+
data1.name_trasa,
|
|
991
|
+
data1.name_usek,
|
|
992
|
+
'Oba'::text AS smer,
|
|
993
|
+
data1.datum,
|
|
994
|
+
data1.cas_interval,
|
|
995
|
+
sum(data1.avg_time) AS avg_time,
|
|
996
|
+
avg(data1.avg_speed) AS avg_speed,
|
|
997
|
+
sum(data1.normal_avg_time) AS normal_avg_time,
|
|
998
|
+
avg(data1.normal_avg_speed) AS normal_avg_speed
|
|
999
|
+
FROM data1
|
|
1000
|
+
GROUP BY data1.name_trasa, data1.name_usek, 'Oba'::text, data1.datum, data1.cas_interval
|
|
1001
|
+
)
|
|
1002
|
+
SELECT data1.name,
|
|
1003
|
+
data1.name_trasa,
|
|
1004
|
+
data1.name_usek,
|
|
1005
|
+
data1.smer,
|
|
1006
|
+
data1.datum,
|
|
1007
|
+
data1.cas_interval,
|
|
1008
|
+
data1.avg_time,
|
|
1009
|
+
data1.avg_speed,
|
|
1010
|
+
data1.normal_avg_time,
|
|
1011
|
+
data1.normal_avg_speed
|
|
1012
|
+
FROM data1
|
|
1013
|
+
UNION
|
|
1014
|
+
SELECT vbt.name,
|
|
1015
|
+
data2.name_trasa,
|
|
1016
|
+
data2.name_usek,
|
|
1017
|
+
data2.smer,
|
|
1018
|
+
data2.datum,
|
|
1019
|
+
data2.cas_interval,
|
|
1020
|
+
data2.avg_time,
|
|
1021
|
+
data2.avg_speed,
|
|
1022
|
+
data2.normal_avg_time,
|
|
1023
|
+
data2.normal_avg_speed
|
|
1024
|
+
FROM data2
|
|
1025
|
+
JOIN analytic.v_mala_strana_route vbt ON vbt.name_trasa = data2.name_trasa AND vbt.name_usek = data2.name_usek AND NOT vbt.is_opacny_smer
|
|
1026
|
+
on conflict (name,name_trasa,name_usek,smer,datum,cas_interval)
|
|
1027
|
+
do update
|
|
1028
|
+
SET avg_time = EXCLUDED.avg_time,
|
|
1029
|
+
avg_speed = EXCLUDED.avg_speed,
|
|
1030
|
+
normal_avg_time = EXCLUDED.normal_avg_time,
|
|
1031
|
+
normal_avg_speed = EXCLUDED.normal_avg_speed;
|
|
1032
|
+
end;
|
|
1033
|
+
end;
|
|
1034
|
+
$procedure$
|
|
1035
|
+
;
|
|
1036
|
+
|
|
1037
|
+
CREATE TABLE analytic.tsk_bm2_route_hour_core (
|
|
1038
|
+
"name" text NOT NULL,
|
|
1039
|
+
datum date NOT NULL,
|
|
1040
|
+
hodina float8 NOT NULL,
|
|
1041
|
+
cas_interval text NOT NULL,
|
|
1042
|
+
avg_time numeric NULL,
|
|
1043
|
+
avg_speed numeric NULL,
|
|
1044
|
+
CONSTRAINT tsk_bm2_route_hour_core_pkey PRIMARY KEY (name, datum, hodina, cas_interval)
|
|
1045
|
+
);
|
|
1046
|
+
CREATE INDEX tsk_bm2_route_hour_core_date ON analytic.tsk_bm2_route_hour_core USING btree (datum);
|
|
1047
|
+
|
|
1048
|
+
CREATE TABLE analytic.tsk_bm2_data_all (
|
|
1049
|
+
"name" text NOT NULL,
|
|
1050
|
+
name_trasa text NOT NULL,
|
|
1051
|
+
name_usek text NOT NULL,
|
|
1052
|
+
smer text NOT NULL,
|
|
1053
|
+
datum date NOT NULL,
|
|
1054
|
+
cas_interval text NOT NULL,
|
|
1055
|
+
avg_time numeric NULL,
|
|
1056
|
+
avg_speed numeric NULL,
|
|
1057
|
+
normal_avg_time numeric NULL,
|
|
1058
|
+
normal_avg_speed numeric NULL
|
|
1059
|
+
);
|
|
1060
|
+
CREATE UNIQUE INDEX tsk_bm2_data_all_pkey ON analytic.tsk_bm2_data_all USING btree (name, name_trasa, name_usek, smer, datum, cas_interval);
|
|
1061
|
+
|
|
1062
|
+
CREATE OR REPLACE VIEW analytic.v_tsk_bm2_route
|
|
1063
|
+
AS SELECT DISTINCT ON ((wazett_routes.name::json ->> 'project'::text), (wazett_routes.name::json ->> 'route number'::text), (wazett_routes.name::json ->> 'dir'::text)) wazett_routes.id,
|
|
1064
|
+
concat(wazett_routes.name::json ->> 'route number'::text, ' ', wazett_routes.name::json ->> 'name'::text) AS name,
|
|
1065
|
+
true AS is_trasa,
|
|
1066
|
+
false AS is_usek,
|
|
1067
|
+
false AS is_opacny_smer,
|
|
1068
|
+
wazett_routes.name::json ->> 'name'::text AS name_trasa,
|
|
1069
|
+
"substring"(wazett_routes.name,
|
|
1070
|
+
CASE
|
|
1071
|
+
WHEN "position"(wazett_routes.name, ' ÚS'::text) > 0 THEN "position"(wazett_routes.name, ' ÚS'::text) + 4
|
|
1072
|
+
ELSE length(wazett_routes.name) + 1
|
|
1073
|
+
END,
|
|
1074
|
+
CASE
|
|
1075
|
+
WHEN "position"(wazett_routes.name, ' OS'::text) > 0 THEN "position"(wazett_routes.name, ' OS'::text) - "position"(wazett_routes.name, ' ÚS'::text) - 4
|
|
1076
|
+
ELSE length(wazett_routes.name) - "position"(wazett_routes.name, ' ÚS'::text)
|
|
1077
|
+
END) AS name_usek,
|
|
1078
|
+
st_astext(wazett_routes.line) AS line,
|
|
1079
|
+
concat('#', "left"(lpad(to_hex((wazett_routes.id::double precision * character_length(wazett_routes.name)::double precision / (( SELECT min(wazett_routes_1.id * character_length(wazett_routes_1.name)) AS min
|
|
1080
|
+
FROM wazett.wazett_routes wazett_routes_1))::double precision * 10000000::double precision)::bigint), 6, '0'::text), 6)) AS color
|
|
1081
|
+
FROM wazett.wazett_routes
|
|
1082
|
+
WHERE (wazett_routes.feed_id = ANY (ARRAY[9, 10])) AND wazett_routes.name ~~ '{%'::text AND (wazett_routes.name::json ->> 'project'::text) = 'TSK BM II'::text
|
|
1083
|
+
ORDER BY (wazett_routes.name::json ->> 'project'::text), (wazett_routes.name::json ->> 'route number'::text), (wazett_routes.name::json ->> 'dir'::text), wazett_routes.created_at DESC;
|
|
1084
|
+
|
|
1085
|
+
|
|
1086
|
+
CREATE MATERIALIZED VIEW analytic.mv_tsk_bm2_normal
|
|
1087
|
+
TABLESPACE pg_default
|
|
1088
|
+
AS SELECT vtbh.name,
|
|
1089
|
+
vtbh.hodina,
|
|
1090
|
+
round(avg(vtbh.avg_time), 2) AS avg_time,
|
|
1091
|
+
round(avg(vtbh.avg_speed)) AS avg_speed
|
|
1092
|
+
FROM ( SELECT rl.name,
|
|
1093
|
+
rl.ts::date AS datum,
|
|
1094
|
+
date_part('hour'::text, rl.ts) AS hodina,
|
|
1095
|
+
(to_char(date_part('hour'::text, rl.ts), '09'::text) || ' -'::text) || to_char(date_part('hour'::text, rl.ts) + 1::double precision, '09'::text) AS cas_interval,
|
|
1096
|
+
rl.avg_time,
|
|
1097
|
+
rl.avg_speed
|
|
1098
|
+
FROM ( SELECT rl_1.route_id,
|
|
1099
|
+
vtbr.name,
|
|
1100
|
+
date_trunc('hour'::text, to_timestamp((rl_1.update_time / 1000)::double precision)) AS ts,
|
|
1101
|
+
round(avg(rl_1."time"), 2) AS avg_time,
|
|
1102
|
+
round(avg(rl_1.length * 1000 / (NULLIF(rl_1."time", 0) * 360)), 2) AS avg_speed
|
|
1103
|
+
FROM wazett.wazett_route_lives rl_1
|
|
1104
|
+
JOIN analytic.v_tsk_bm2_route vtbr ON vtbr.id = rl_1.route_id
|
|
1105
|
+
WHERE rl_1.update_time >= '1681516800000'::bigint
|
|
1106
|
+
GROUP BY vtbr.name, rl_1.route_id, (date_trunc('hour'::text, to_timestamp((rl_1.update_time / 1000)::double precision)))) rl) vtbh
|
|
1107
|
+
WHERE vtbh.datum >= '2023-04-15'::date AND vtbh.datum <= '2023-05-01'::date AND (date_part('dow'::text, vtbh.datum) = ANY (ARRAY[2::double precision, 3::double precision, 4::double precision]))
|
|
1108
|
+
GROUP BY vtbh.name, vtbh.hodina
|
|
1109
|
+
WITH DATA;
|
|
1110
|
+
|
|
1111
|
+
CREATE OR REPLACE PROCEDURE analytic.update_tsk_bm2()
|
|
1112
|
+
LANGUAGE plpgsql
|
|
1113
|
+
AS $procedure$
|
|
1114
|
+
declare
|
|
1115
|
+
lastupdatetimestamp timestamptz;
|
|
1116
|
+
lastupdateunix bigint;
|
|
1117
|
+
begin
|
|
1118
|
+
begin
|
|
1119
|
+
select
|
|
1120
|
+
case
|
|
1121
|
+
when start_day is not null
|
|
1122
|
+
then start_day
|
|
1123
|
+
else '2022-01-01'
|
|
1124
|
+
end as start_day_from into lastupdatetimestamp
|
|
1125
|
+
from (select max(datum)-interval '1 days' start_day from analytic.tsk_bm2_route_hour_core) malastranamax;
|
|
1126
|
+
|
|
1127
|
+
lastupdateunix := extract ('epoch' from lastupdatetimestamp) * 1000;
|
|
1128
|
+
|
|
1129
|
+
-- dopoctu hodinovou agregaci (podobné v_mala_strana_route_hour_core) POT5EBUJEME TAKTO?
|
|
1130
|
+
insert into analytic.tsk_bm2_route_hour_core
|
|
1131
|
+
SELECT
|
|
1132
|
+
wdrn.name,
|
|
1133
|
+
rl.ts::date AS datum,
|
|
1134
|
+
date_part('hour'::text, rl.ts) AS hodina,
|
|
1135
|
+
(to_char(date_part('hour'::text, rl.ts), '09'::text) || ' -'::text) || to_char(date_part('hour'::text, rl.ts) + 1::double precision, '09'::text) AS cas_interval,
|
|
1136
|
+
avg_time,
|
|
1137
|
+
avg_speed
|
|
1138
|
+
FROM (
|
|
1139
|
+
select
|
|
1140
|
+
route_id
|
|
1141
|
+
-- timezone('Europe/Prague'::text, to_timestamp((update_time / 1000)::double precision)::timestamp without time zone)
|
|
1142
|
+
,date_trunc('hour', to_timestamp((update_time / 1000))::timestamp) as ts
|
|
1143
|
+
,round(avg(time), 2) AS avg_time
|
|
1144
|
+
,round(avg(rl.length * 1000 / (nullif(rl."time", 0) * 360)), 2) AS avg_speed
|
|
1145
|
+
from wazett.wazett_route_lives rl
|
|
1146
|
+
where
|
|
1147
|
+
-- route_id = 22706 and
|
|
1148
|
+
rl.update_time > lastupdateunix and
|
|
1149
|
+
rl.length > 0
|
|
1150
|
+
group by 1,2) rl
|
|
1151
|
+
JOIN analytic.v_tsk_bm2_route wdrn ON wdrn.id = rl.route_id
|
|
1152
|
+
ON CONFLICT (name,datum,hodina,cas_interval)
|
|
1153
|
+
DO update
|
|
1154
|
+
SET avg_time = EXCLUDED.avg_time,
|
|
1155
|
+
avg_speed = EXCLUDED.avg_speed
|
|
1156
|
+
;
|
|
1157
|
+
|
|
1158
|
+
insert into analytic.tsk_bm2_data_all
|
|
1159
|
+
WITH
|
|
1160
|
+
v_ms_route_hour as (
|
|
1161
|
+
SELECT p.name,
|
|
1162
|
+
p.datum,
|
|
1163
|
+
p.hodina,
|
|
1164
|
+
p.cas_interval,
|
|
1165
|
+
p.avg_time,
|
|
1166
|
+
p.avg_speed,
|
|
1167
|
+
n.avg_time AS normal_avg_time,
|
|
1168
|
+
n.avg_speed AS normal_avg_speed
|
|
1169
|
+
FROM analytic.tsk_bm2_route_hour_core p
|
|
1170
|
+
LEFT JOIN analytic.mv_tsk_bm2_normal n ON n.name = p.name AND p.hodina = n.hodina
|
|
1171
|
+
where datum > lastupdatetimestamp
|
|
1172
|
+
),
|
|
1173
|
+
-- konec v_ms_route_hour
|
|
1174
|
+
v_ms_union_time_interval as (
|
|
1175
|
+
WITH hodiny AS (
|
|
1176
|
+
SELECT brh.name,
|
|
1177
|
+
brh.datum,
|
|
1178
|
+
brh.hodina,
|
|
1179
|
+
brh.cas_interval,
|
|
1180
|
+
brh.avg_time,
|
|
1181
|
+
brh.avg_speed,
|
|
1182
|
+
brh.normal_avg_time,
|
|
1183
|
+
brh.normal_avg_speed
|
|
1184
|
+
FROM v_ms_route_hour brh
|
|
1185
|
+
WHERE brh.datum < CURRENT_DATE OR brh.hodina < date_part('hour'::text, now())
|
|
1186
|
+
), den AS (
|
|
1187
|
+
SELECT hodiny.name,
|
|
1188
|
+
hodiny.datum,
|
|
1189
|
+
'0 - 24h'::text AS cas_interval,
|
|
1190
|
+
round(avg(hodiny.avg_time), 2) AS avg_time,
|
|
1191
|
+
round(avg(hodiny.avg_speed), 2) AS avg_speed,
|
|
1192
|
+
round(avg(hodiny.normal_avg_time), 2) AS normal_avg_time,
|
|
1193
|
+
round(avg(hodiny.normal_avg_speed), 2) AS normal_avg_speed
|
|
1194
|
+
FROM hodiny
|
|
1195
|
+
WHERE hodiny.datum < CURRENT_DATE
|
|
1196
|
+
GROUP BY hodiny.name, hodiny.datum
|
|
1197
|
+
), h15_18 AS (
|
|
1198
|
+
SELECT hodiny.name,
|
|
1199
|
+
hodiny.datum,
|
|
1200
|
+
'15 -18'::text AS cas_interval,
|
|
1201
|
+
round(avg(hodiny.avg_time), 2) AS avg_time,
|
|
1202
|
+
round(avg(hodiny.avg_speed), 2) AS avg_speed,
|
|
1203
|
+
round(avg(hodiny.normal_avg_time), 2) AS normal_avg_time,
|
|
1204
|
+
round(avg(hodiny.normal_avg_speed), 2) AS normal_avg_speed
|
|
1205
|
+
FROM hodiny
|
|
1206
|
+
WHERE hodiny.hodina >= 15::double precision AND hodiny.hodina <= 17::double precision AND (hodiny.datum < CURRENT_DATE OR hodiny.hodina > 17::double precision)
|
|
1207
|
+
GROUP BY hodiny.name, hodiny.datum
|
|
1208
|
+
), h22_6 AS (
|
|
1209
|
+
SELECT hodiny.name,
|
|
1210
|
+
hodiny.datum,
|
|
1211
|
+
'22 - 06'::text AS cas_interval,
|
|
1212
|
+
round(avg(hodiny.avg_time), 2) AS avg_time,
|
|
1213
|
+
round(avg(hodiny.avg_speed), 2) AS avg_speed,
|
|
1214
|
+
round(avg(hodiny.normal_avg_time), 2) AS normal_avg_time,
|
|
1215
|
+
round(avg(hodiny.normal_avg_speed), 2) AS normal_avg_speed
|
|
1216
|
+
FROM hodiny
|
|
1217
|
+
WHERE NOT (hodiny.hodina >= 6::double precision AND hodiny.hodina <= 21::double precision) AND hodiny.datum < CURRENT_DATE
|
|
1218
|
+
GROUP BY hodiny.name, hodiny.datum
|
|
1219
|
+
), h6_22 AS (
|
|
1220
|
+
SELECT hodiny.name,
|
|
1221
|
+
hodiny.datum,
|
|
1222
|
+
'06 - 22'::text AS cas_interval,
|
|
1223
|
+
round(avg(hodiny.avg_time), 2) AS avg_time,
|
|
1224
|
+
round(avg(hodiny.avg_speed), 2) AS avg_speed,
|
|
1225
|
+
round(avg(hodiny.normal_avg_time), 2) AS normal_avg_time,
|
|
1226
|
+
round(avg(hodiny.normal_avg_speed), 2) AS normal_avg_speed
|
|
1227
|
+
FROM hodiny
|
|
1228
|
+
WHERE hodiny.hodina >= 6::double precision AND hodiny.hodina <= 21::double precision AND (hodiny.datum < CURRENT_DATE OR hodiny.hodina > 21::double precision)
|
|
1229
|
+
GROUP BY hodiny.name, hodiny.datum
|
|
1230
|
+
), h7_10 AS (
|
|
1231
|
+
SELECT hodiny.name,
|
|
1232
|
+
hodiny.datum,
|
|
1233
|
+
'07 - 10'::text AS cas_interval,
|
|
1234
|
+
round(avg(hodiny.avg_time), 2) AS avg_time,
|
|
1235
|
+
round(avg(hodiny.avg_speed), 2) AS avg_speed,
|
|
1236
|
+
round(avg(hodiny.normal_avg_time), 2) AS normal_avg_time,
|
|
1237
|
+
round(avg(hodiny.normal_avg_speed), 2) AS normal_avg_speed
|
|
1238
|
+
FROM hodiny
|
|
1239
|
+
WHERE hodiny.hodina >= 7::double precision AND hodiny.hodina <= 9::double precision AND (hodiny.datum < CURRENT_DATE OR hodiny.hodina > 10::double precision)
|
|
1240
|
+
GROUP BY hodiny.name, hodiny.datum
|
|
1241
|
+
), h7_11_15_19 AS (
|
|
1242
|
+
SELECT hodiny.name,
|
|
1243
|
+
hodiny.datum,
|
|
1244
|
+
'07 - 11, 15 - 19'::text AS cas_interval,
|
|
1245
|
+
round(avg(hodiny.avg_time), 2) AS avg_time,
|
|
1246
|
+
round(avg(hodiny.avg_speed), 2) AS avg_speed,
|
|
1247
|
+
round(avg(hodiny.normal_avg_time), 2) AS normal_avg_time,
|
|
1248
|
+
round(avg(hodiny.normal_avg_speed), 2) AS normal_avg_speed
|
|
1249
|
+
FROM hodiny
|
|
1250
|
+
WHERE (hodiny.hodina >= 7::double precision AND hodiny.hodina <= 10::double precision OR hodiny.hodina >= 15::double precision AND hodiny.hodina <= 18::double precision) AND (hodiny.datum < CURRENT_DATE OR hodiny.hodina > 18::double precision)
|
|
1251
|
+
GROUP BY hodiny.name, hodiny.datum
|
|
1252
|
+
)
|
|
1253
|
+
SELECT hodiny.name,
|
|
1254
|
+
hodiny.datum,
|
|
1255
|
+
hodiny.cas_interval,
|
|
1256
|
+
hodiny.avg_time,
|
|
1257
|
+
hodiny.avg_speed,
|
|
1258
|
+
hodiny.normal_avg_time,
|
|
1259
|
+
hodiny.normal_avg_speed
|
|
1260
|
+
FROM hodiny
|
|
1261
|
+
UNION ALL
|
|
1262
|
+
SELECT den.name,
|
|
1263
|
+
den.datum,
|
|
1264
|
+
den.cas_interval,
|
|
1265
|
+
den.avg_time,
|
|
1266
|
+
den.avg_speed,
|
|
1267
|
+
den.normal_avg_time,
|
|
1268
|
+
den.normal_avg_speed
|
|
1269
|
+
FROM den
|
|
1270
|
+
UNION ALL
|
|
1271
|
+
SELECT h15_18.name,
|
|
1272
|
+
h15_18.datum,
|
|
1273
|
+
h15_18.cas_interval,
|
|
1274
|
+
h15_18.avg_time,
|
|
1275
|
+
h15_18.avg_speed,
|
|
1276
|
+
h15_18.normal_avg_time,
|
|
1277
|
+
h15_18.normal_avg_speed
|
|
1278
|
+
FROM h15_18
|
|
1279
|
+
UNION ALL
|
|
1280
|
+
SELECT h22_6.name,
|
|
1281
|
+
h22_6.datum,
|
|
1282
|
+
h22_6.cas_interval,
|
|
1283
|
+
h22_6.avg_time,
|
|
1284
|
+
h22_6.avg_speed,
|
|
1285
|
+
h22_6.normal_avg_time,
|
|
1286
|
+
h22_6.normal_avg_speed
|
|
1287
|
+
FROM h22_6
|
|
1288
|
+
UNION ALL
|
|
1289
|
+
SELECT h6_22.name,
|
|
1290
|
+
h6_22.datum,
|
|
1291
|
+
h6_22.cas_interval,
|
|
1292
|
+
h6_22.avg_time,
|
|
1293
|
+
h6_22.avg_speed,
|
|
1294
|
+
h6_22.normal_avg_time,
|
|
1295
|
+
h6_22.normal_avg_speed
|
|
1296
|
+
FROM h6_22
|
|
1297
|
+
UNION ALL
|
|
1298
|
+
SELECT h7_10.name,
|
|
1299
|
+
h7_10.datum,
|
|
1300
|
+
h7_10.cas_interval,
|
|
1301
|
+
h7_10.avg_time,
|
|
1302
|
+
h7_10.avg_speed,
|
|
1303
|
+
h7_10.normal_avg_time,
|
|
1304
|
+
h7_10.normal_avg_speed
|
|
1305
|
+
FROM h7_10
|
|
1306
|
+
UNION ALL
|
|
1307
|
+
SELECT h7_11_15_19.name,
|
|
1308
|
+
h7_11_15_19.datum,
|
|
1309
|
+
h7_11_15_19.cas_interval,
|
|
1310
|
+
h7_11_15_19.avg_time,
|
|
1311
|
+
h7_11_15_19.avg_speed,
|
|
1312
|
+
h7_11_15_19.normal_avg_time,
|
|
1313
|
+
h7_11_15_19.normal_avg_speed
|
|
1314
|
+
FROM h7_11_15_19
|
|
1315
|
+
),
|
|
1316
|
+
-----------------------
|
|
1317
|
+
data1 AS (
|
|
1318
|
+
SELECT
|
|
1319
|
+
trasy.name,
|
|
1320
|
+
trasy.name_trasa,
|
|
1321
|
+
trasy.name_usek,
|
|
1322
|
+
CASE
|
|
1323
|
+
WHEN trasy.is_opacny_smer THEN 'Zpět'::text
|
|
1324
|
+
ELSE 'Tam'::text
|
|
1325
|
+
END AS smer,
|
|
1326
|
+
vbu.datum,
|
|
1327
|
+
vbu.cas_interval,
|
|
1328
|
+
vbu.avg_time,
|
|
1329
|
+
vbu.avg_speed,
|
|
1330
|
+
vbu.normal_avg_time,
|
|
1331
|
+
vbu.normal_avg_speed
|
|
1332
|
+
FROM v_ms_union_time_interval vbu
|
|
1333
|
+
JOIN analytic.v_tsk_bm2_route trasy ON trasy.name = vbu.name
|
|
1334
|
+
),
|
|
1335
|
+
data2 AS (
|
|
1336
|
+
SELECT
|
|
1337
|
+
data1.name_trasa,
|
|
1338
|
+
data1.name_usek,
|
|
1339
|
+
'Oba'::text AS smer,
|
|
1340
|
+
data1.datum,
|
|
1341
|
+
data1.cas_interval,
|
|
1342
|
+
sum(data1.avg_time) AS avg_time,
|
|
1343
|
+
avg(data1.avg_speed) AS avg_speed,
|
|
1344
|
+
sum(data1.normal_avg_time) AS normal_avg_time,
|
|
1345
|
+
avg(data1.normal_avg_speed) AS normal_avg_speed
|
|
1346
|
+
FROM data1
|
|
1347
|
+
GROUP BY data1.name_trasa, data1.name_usek, 'Oba'::text, data1.datum, data1.cas_interval
|
|
1348
|
+
)
|
|
1349
|
+
SELECT data1.name,
|
|
1350
|
+
data1.name_trasa,
|
|
1351
|
+
data1.name_usek,
|
|
1352
|
+
data1.smer,
|
|
1353
|
+
data1.datum,
|
|
1354
|
+
data1.cas_interval,
|
|
1355
|
+
data1.avg_time,
|
|
1356
|
+
data1.avg_speed,
|
|
1357
|
+
data1.normal_avg_time,
|
|
1358
|
+
data1.normal_avg_speed
|
|
1359
|
+
FROM data1
|
|
1360
|
+
UNION
|
|
1361
|
+
SELECT vbt.name,
|
|
1362
|
+
data2.name_trasa,
|
|
1363
|
+
data2.name_usek,
|
|
1364
|
+
data2.smer,
|
|
1365
|
+
data2.datum,
|
|
1366
|
+
data2.cas_interval,
|
|
1367
|
+
data2.avg_time,
|
|
1368
|
+
data2.avg_speed,
|
|
1369
|
+
data2.normal_avg_time,
|
|
1370
|
+
data2.normal_avg_speed
|
|
1371
|
+
FROM data2
|
|
1372
|
+
JOIN analytic.v_tsk_bm2_route vbt ON vbt.name_trasa = data2.name_trasa AND vbt.name_usek = data2.name_usek AND NOT vbt.is_opacny_smer
|
|
1373
|
+
on conflict (name,name_trasa,name_usek,smer,datum,cas_interval)
|
|
1374
|
+
do update
|
|
1375
|
+
SET avg_time = EXCLUDED.avg_time,
|
|
1376
|
+
avg_speed = EXCLUDED.avg_speed,
|
|
1377
|
+
normal_avg_time = EXCLUDED.normal_avg_time,
|
|
1378
|
+
normal_avg_speed = EXCLUDED.normal_avg_speed;
|
|
1379
|
+
end;
|
|
1380
|
+
end;
|
|
1381
|
+
$procedure$
|
|
1382
|
+
;
|
|
1383
|
+
|
|
1384
|
+
|
|
1385
|
+
CREATE TABLE analytic.waze_route_travel_times_agg (
|
|
1386
|
+
route_id int8 NOT NULL,
|
|
1387
|
+
"year" float8 NOT NULL,
|
|
1388
|
+
"month" float8 NOT NULL,
|
|
1389
|
+
"day" float8 NOT NULL,
|
|
1390
|
+
dow float8 NOT NULL,
|
|
1391
|
+
"hour" float8 NOT NULL,
|
|
1392
|
+
quarter int4 NOT NULL,
|
|
1393
|
+
hour_quarter float8 NOT NULL,
|
|
1394
|
+
"date" timestamp NULL,
|
|
1395
|
+
travel_time int4 NULL,
|
|
1396
|
+
CONSTRAINT waze_route_travel_times_agg_pkey PRIMARY KEY (route_id, year, month, day, dow, hour, quarter, hour_quarter) INCLUDE (travel_time)
|
|
1397
|
+
);
|
|
1398
|
+
|
|
1399
|
+
CREATE OR REPLACE PROCEDURE analytic.update_waze()
|
|
1400
|
+
LANGUAGE plpgsql
|
|
1401
|
+
AS $procedure$
|
|
1402
|
+
|
|
1403
|
+
declare
|
|
1404
|
+
lastupdatetimestamp timestamptz;
|
|
1405
|
+
lastupdateunix bigint;
|
|
1406
|
+
begin
|
|
1407
|
+
select
|
|
1408
|
+
case
|
|
1409
|
+
when start_day is not null
|
|
1410
|
+
then start_day
|
|
1411
|
+
else '2021-01-01'
|
|
1412
|
+
end as start_day_from into lastupdatetimestamp
|
|
1413
|
+
from (select max(date)-interval '1 days' start_day from analytic.waze_route_travel_times_agg) wazemax;
|
|
1414
|
+
|
|
1415
|
+
lastupdateunix := extract ('epoch' from lastupdatetimestamp) * 1000;
|
|
1416
|
+
-- inserting data is incremental, since the last timestamp already in the table
|
|
1417
|
+
insert into analytic.waze_route_travel_times_agg
|
|
1418
|
+
SELECT ts.route_id,
|
|
1419
|
+
ts.year,
|
|
1420
|
+
ts.month,
|
|
1421
|
+
ts.day,
|
|
1422
|
+
ts.dow,
|
|
1423
|
+
ts.hour,
|
|
1424
|
+
ts.quarter,
|
|
1425
|
+
ts.hour + (ts.quarter::numeric / 60::numeric)::double precision AS hour_quarter,
|
|
1426
|
+
((((((((ts.year || '-'::text) || ts.month) || '-'::text) || ts.day) || ' '::text) || ts.hour) || ':'::text) || ts.quarter)::timestamp without time zone AS date,
|
|
1427
|
+
avg(ts.travel_time)::integer AS travel_time
|
|
1428
|
+
FROM ( SELECT raw.route_id,
|
|
1429
|
+
raw.update_time,
|
|
1430
|
+
raw.travel_time,
|
|
1431
|
+
date_part('year'::text, raw.update_time) AS year,
|
|
1432
|
+
date_part('month'::text, raw.update_time) AS month,
|
|
1433
|
+
date_part('day'::text, raw.update_time) AS day,
|
|
1434
|
+
date_part('dow'::text, raw.update_time) AS dow,
|
|
1435
|
+
date_part('hour'::text, raw.update_time) AS hour,
|
|
1436
|
+
date_part('minute'::text, raw.update_time) AS minute,
|
|
1437
|
+
date_part('minute'::text, raw.update_time)::integer / 15 * 15 AS quarter
|
|
1438
|
+
FROM ( SELECT wazett_route_lives.route_id,
|
|
1439
|
+
timezone('Europe/Prague'::text, to_timestamp((wazett_route_lives.update_time / 1000)::double precision)::timestamp without time zone) AS update_time,
|
|
1440
|
+
wazett_route_lives."time" AS travel_time
|
|
1441
|
+
FROM wazett.wazett_route_lives
|
|
1442
|
+
JOIN analytic.waze_dashboard_route_name wdrn ON wdrn.route_id = wazett_route_lives.route_id
|
|
1443
|
+
where wazett_route_lives.update_time > lastupdateunix -- this is the time condition for the increment
|
|
1444
|
+
) raw
|
|
1445
|
+
) ts
|
|
1446
|
+
WHERE ts.year > 2000::double precision
|
|
1447
|
+
GROUP BY ts.route_id, ts.year, ts.month, ts.day, ts.dow, ts.hour, ts.quarter
|
|
1448
|
+
ON CONFLICT (route_id, year, month, day, dow, hour, quarter, hour_quarter)
|
|
1449
|
+
DO update
|
|
1450
|
+
SET
|
|
1451
|
+
date = EXCLUDED.date,
|
|
1452
|
+
travel_time = EXCLUDED.travel_time
|
|
1453
|
+
;
|
|
1454
|
+
end;
|
|
1455
|
+
$procedure$
|
|
1456
|
+
;
|
|
1457
|
+
|