From bf9b7c2e463bed2f21b55f463ae8b426e934913f Mon Sep 17 00:00:00 2001 From: auxten Date: Fri, 16 Feb 2024 13:45:15 +0800 Subject: [PATCH] Add test cases for materialize view --- tests/test_materialize.py | 93 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 tests/test_materialize.py diff --git a/tests/test_materialize.py b/tests/test_materialize.py new file mode 100644 index 00000000000..40095a3b0d4 --- /dev/null +++ b/tests/test_materialize.py @@ -0,0 +1,93 @@ +#!/usr/bin/env python3 + +import unittest +from chdb import session + + +class TestMaterialize(unittest.TestCase): + def test_materialize(self): + sess = session.Session() + + 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()