-
Notifications
You must be signed in to change notification settings - Fork 0
/
caggs-with-custom-views.sql
89 lines (73 loc) · 2.17 KB
/
caggs-with-custom-views.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
\echo
drop materialized view ohlcv_1d cascade;
drop materialized view ohlcv_1h cascade;
drop materialized view ohlcv_1m cascade;
DROP TABLE "ticks" CASCADE;
CREATE TABLE "ticks" (
"time" timestamp with time zone not null,
"symbol" text,
"source" text,
"price" decimal,
"volume" float);
SELECT create_hypertable('ticks', 'time', chunk_time_interval => INTERVAL '4 hours');
ALTER TABLE ticks SET (
timescaledb.compress,
timescaledb.compress_orderby = 'time',
timescaledb.compress_segmentby = 'source,symbol'
);
select add_retention_policy('ticks', drop_after => interval '1 day');
CREATE MATERIALIZED VIEW ohlcv_1m
WITH (timescaledb.continuous) AS
SELECT time_bucket('1m', time),
"ticks"."symbol",
"ticks"."source",
candlestick_agg(time, price, volume) as ohlcv
FROM "ticks"
GROUP BY 1, 2, 3
ORDER BY 1
WITH DATA;
CREATE MATERIALIZED VIEW ohlcv_1h
WITH (timescaledb.continuous ) AS
SELECT time_bucket('1 hour', "time_bucket"),
symbol,
source,
rollup(ohlcv) as ohlcv
FROM "ohlcv_1m"
GROUP BY 1, 2, 3
ORDER BY 1
WITH NO DATA;
CREATE MATERIALIZED VIEW ohlcv_1d
WITH (timescaledb.continuous) AS
SELECT time_bucket('1 day', "time_bucket"),
symbol,
source,
rollup(ohlcv) as ohlcv
FROM "ohlcv_1h"
GROUP BY 1, 2, 3
ORDER BY 1
WITH DATA;
INSERT INTO ticks
SELECT time, 'STOCK0', 'A', (random()*30)::int, 100*(random()*10)::int
FROM generate_series(TIMESTAMP '2000-01-01 00:00:00',
TIMESTAMP '2000-01-01 01:11:00',
INTERVAL '10 minutes') AS time;
INSERT INTO ticks
SELECT time, 'STOCK1', 'B', (random()*30)::int, 100*(random()*10)::int
FROM generate_series(TIMESTAMP '2000-01-01 00:00:00',
TIMESTAMP '2000-01-01 01:11:00',
INTERVAL '10 minutes') AS time;
CREATE VIEW ohlcv_1m_b as
SELECT * FROM ohlcv_1m
WHERE source = 'B';
CREATE VIEW ohlcv_1m_a as
SELECT * FROM ohlcv_1m
WHERE source = 'A';
CREATE VIEW ohlcv_1m_a_stock_1 AS
SELECT * FROM ohlcv_1m_a
WHERE symbol = 'STOCK1';
CREATE VIEW ohlcv_1m_b_stock_0 as
SELECT * FROM ohlcv_1m_b
WHERE symbol = 'STOCK0';
SELECT time_bucket, symbol, source,
open(ohlcv), high(ohlcv),
low(ohlcv), close(ohlcv), volume(ohlcv) FROM ohlcv_1d ;