forked from chdb-io/chdb
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_materialize.py
More file actions
92 lines (84 loc) · 2.61 KB
/
Copy pathtest_materialize.py
File metadata and controls
92 lines (84 loc) · 2.61 KB
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
89
90
91
92
#!/usr/bin/env python3
import unittest
from chdb import session
class TestMaterialize(unittest.TestCase):
def test_materialize(self):
with session.Session() as sess:
ret = sess.query("CREATE DATABASE IF NOT EXISTS db_xxx ENGINE = Atomic")
self.assertFalse(ret.has_error())
ret = sess.query("USE db_xxx")
self.assertFalse(ret.has_error())
ret = sess.query(
"""
CREATE TABLE download (
when DateTime,
userid UInt32,
bytes Float32
) ENGINE=MergeTree
PARTITION BY toYYYYMM(when)
ORDER BY (userid, when)"""
)
self.assertFalse(ret.has_error())
sess.query(
"""
INSERT INTO download
SELECT
now() + number * 60 as when,
25,
rand() % 100000000
FROM system.numbers
LIMIT 5000"""
)
ret = sess.query(
"""
SELECT
toStartOfDay(when) AS day,
userid,
count() as downloads,
sum(bytes) AS bytes
FROM download
GROUP BY userid, day
ORDER BY userid, day"""
)
print("Result from agg:", ret)
sess.query(
"""CREATE MATERIALIZED VIEW download_daily_mv
ENGINE = SummingMergeTree
PARTITION BY toYYYYMM(day) ORDER BY (userid, day)
POPULATE
AS SELECT
toStartOfDay(when) AS day,
userid,
count() as downloads,
sum(bytes) AS bytes
FROM download
GROUP BY userid, day"""
)
ret1 = sess.query(
"""SELECT * FROM download_daily_mv
ORDER BY day, userid
LIMIT 5"""
)
print("Result from mv:", ret1)
print("Show result:")
ret1.show()
self.assertEqual(str(ret), str(ret1))
sess.query(
"""
INSERT INTO download
SELECT
now() + number * 60 as when,
25,
rand() % 100000000
FROM system.numbers
LIMIT 5000"""
)
ret2 = sess.query(
"""SELECT * FROM download_daily_mv
ORDER BY day, userid
LIMIT 5"""
)
print("Result from mv after insert:", ret2)
self.assertNotEqual(str(ret1), str(ret2))
if __name__ == "__main__":
unittest.main()