CREATE TABLE test(i DOUBLE, j TIMESTAMP TIME INDEX, k STRING PRIMARY KEY); Affected Rows: 0 -- insert two points at 1ms and one point at 2ms INSERT INTO test VALUES (1, 1, "a"), (1, 1, "b"), (2, 2, "a"); Affected Rows: 3 -- SQLNESS SORT_RESULT 2 1 -- evaluate at 0s, 5s and 10s. No point at 0s. TQL EVAL (0, 10, '5s') test; +-----+---------------------+---+ | i | j | k | +-----+---------------------+---+ | 1.0 | 1970-01-01T00:00:05 | b | | 1.0 | 1970-01-01T00:00:10 | b | | 2.0 | 1970-01-01T00:00:05 | a | | 2.0 | 1970-01-01T00:00:10 | a | +-----+---------------------+---+ -- SQLNESS SORT_RESULT 2 1 TQL EVAL (0, 10, '5s') {__name__="test"}; +-----+---------------------+---+ | i | j | k | +-----+---------------------+---+ | 1.0 | 1970-01-01T00:00:05 | b | | 1.0 | 1970-01-01T00:00:10 | b | | 2.0 | 1970-01-01T00:00:05 | a | | 2.0 | 1970-01-01T00:00:10 | a | +-----+---------------------+---+ -- SQLNESS SORT_RESULT 2 1 TQL EVAL (0, 10, '5s') {__name__="test"} AS test_series; +-------------+---+---------------------+ | test_series | k | j | +-------------+---+---------------------+ | 1.0 | b | 1970-01-01T00:00:05 | | 1.0 | b | 1970-01-01T00:00:10 | | 2.0 | a | 1970-01-01T00:00:05 | | 2.0 | a | 1970-01-01T00:00:10 | +-------------+---+---------------------+ -- SQLNESS SORT_RESULT 2 1 TQL EVAL (0, 10, '5s') count by (k) (test) AS c; +---+---+---------------------+ | c | k | j | +---+---+---------------------+ | 1 | a | 1970-01-01T00:00:05 | | 1 | a | 1970-01-01T00:00:10 | | 1 | b | 1970-01-01T00:00:05 | | 1 | b | 1970-01-01T00:00:10 | +---+---+---------------------+ -- SQLNESS SORT_RESULT 2 1 TQL EVAL (0, 10, '5s') test{__schema__="public"}; +-----+---------------------+---+ | i | j | k | +-----+---------------------+---+ | 1.0 | 1970-01-01T00:00:05 | b | | 1.0 | 1970-01-01T00:00:10 | b | | 2.0 | 1970-01-01T00:00:05 | a | | 2.0 | 1970-01-01T00:00:10 | a | +-----+---------------------+---+ -- SQLNESS SORT_RESULT 2 1 TQL EVAL (0, 10, '5s') test{__schema__="greptime_private"}; +------+-------+ | time | value | +------+-------+ +------+-------+ -- SQLNESS SORT_RESULT 2 1 TQL EVAL (0, 10, '5s') test{__database__="public"}; +-----+---------------------+---+ | i | j | k | +-----+---------------------+---+ | 1.0 | 1970-01-01T00:00:05 | b | | 1.0 | 1970-01-01T00:00:10 | b | | 2.0 | 1970-01-01T00:00:05 | a | | 2.0 | 1970-01-01T00:00:10 | a | +-----+---------------------+---+ -- SQLNESS SORT_RESULT 2 1 TQL EVAL (0, 10, '5s') test{__database__="greptime_private"}; +------+-------+ | time | value | +------+-------+ +------+-------+ -- SQLNESS SORT_RESULT 2 1 TQL EVAL (0, 10, '5s') {__name__="test", __field__="i"}; +-----+---+---------------------+ | i | k | j | +-----+---+---------------------+ | 1.0 | b | 1970-01-01T00:00:05 | | 1.0 | b | 1970-01-01T00:00:10 | | 2.0 | a | 1970-01-01T00:00:05 | | 2.0 | a | 1970-01-01T00:00:10 | +-----+---+---------------------+ -- NOT SUPPORTED: `__name__` matcher without equal condition TQL EVAL (0, 10, '5s') {__name__!="test"}; Error: 2000(InvalidSyntax), vector selector must contain at least one non-empty matcher TQL EVAL (0, 10, '5s') {__name__=~"test"}; Error: 1004(InvalidArguments), Matcher operator =~ is not supported for __name__ -- the point at 1ms will be shadowed by the point at 2ms TQL EVAL (0, 10, '5s') test{k="a"}; +-----+---------------------+---+ | i | j | k | +-----+---------------------+---+ | 2.0 | 1970-01-01T00:00:05 | a | | 2.0 | 1970-01-01T00:00:10 | a | +-----+---------------------+---+ TQL EVAL (0, 10, '1s', '2s') test{k="a"}; +-----+---------------------+---+ | i | j | k | +-----+---------------------+---+ | 2.0 | 1970-01-01T00:00:01 | a | | 2.0 | 1970-01-01T00:00:02 | a | +-----+---------------------+---+ -- SQLNESS SORT_RESULT 2 1 TQL EVAL (0, 10, '0.5') test; +-----+-------------------------+---+ | i | j | k | +-----+-------------------------+---+ | 1.0 | 1970-01-01T00:00:00.500 | b | | 1.0 | 1970-01-01T00:00:01 | b | | 1.0 | 1970-01-01T00:00:01.500 | b | | 1.0 | 1970-01-01T00:00:02 | b | | 1.0 | 1970-01-01T00:00:02.500 | b | | 1.0 | 1970-01-01T00:00:03 | b | | 1.0 | 1970-01-01T00:00:03.500 | b | | 1.0 | 1970-01-01T00:00:04 | b | | 1.0 | 1970-01-01T00:00:04.500 | b | | 1.0 | 1970-01-01T00:00:05 | b | | 1.0 | 1970-01-01T00:00:05.500 | b | | 1.0 | 1970-01-01T00:00:06 | b | | 1.0 | 1970-01-01T00:00:06.500 | b | | 1.0 | 1970-01-01T00:00:07 | b | | 1.0 | 1970-01-01T00:00:07.500 | b | | 1.0 | 1970-01-01T00:00:08 | b | | 1.0 | 1970-01-01T00:00:08.500 | b | | 1.0 | 1970-01-01T00:00:09 | b | | 1.0 | 1970-01-01T00:00:09.500 | b | | 1.0 | 1970-01-01T00:00:10 | b | | 2.0 | 1970-01-01T00:00:00.500 | a | | 2.0 | 1970-01-01T00:00:01 | a | | 2.0 | 1970-01-01T00:00:01.500 | a | | 2.0 | 1970-01-01T00:00:02 | a | | 2.0 | 1970-01-01T00:00:02.500 | a | | 2.0 | 1970-01-01T00:00:03 | a | | 2.0 | 1970-01-01T00:00:03.500 | a | | 2.0 | 1970-01-01T00:00:04 | a | | 2.0 | 1970-01-01T00:00:04.500 | a | | 2.0 | 1970-01-01T00:00:05 | a | | 2.0 | 1970-01-01T00:00:05.500 | a | | 2.0 | 1970-01-01T00:00:06 | a | | 2.0 | 1970-01-01T00:00:06.500 | a | | 2.0 | 1970-01-01T00:00:07 | a | | 2.0 | 1970-01-01T00:00:07.500 | a | | 2.0 | 1970-01-01T00:00:08 | a | | 2.0 | 1970-01-01T00:00:08.500 | a | | 2.0 | 1970-01-01T00:00:09 | a | | 2.0 | 1970-01-01T00:00:09.500 | a | | 2.0 | 1970-01-01T00:00:10 | a | +-----+-------------------------+---+ -- SQLNESS SORT_RESULT 2 1 TQL EVAL (0, 10, 0.5) test; +-----+-------------------------+---+ | i | j | k | +-----+-------------------------+---+ | 1.0 | 1970-01-01T00:00:00.500 | b | | 1.0 | 1970-01-01T00:00:01 | b | | 1.0 | 1970-01-01T00:00:01.500 | b | | 1.0 | 1970-01-01T00:00:02 | b | | 1.0 | 1970-01-01T00:00:02.500 | b | | 1.0 | 1970-01-01T00:00:03 | b | | 1.0 | 1970-01-01T00:00:03.500 | b | | 1.0 | 1970-01-01T00:00:04 | b | | 1.0 | 1970-01-01T00:00:04.500 | b | | 1.0 | 1970-01-01T00:00:05 | b | | 1.0 | 1970-01-01T00:00:05.500 | b | | 1.0 | 1970-01-01T00:00:06 | b | | 1.0 | 1970-01-01T00:00:06.500 | b | | 1.0 | 1970-01-01T00:00:07 | b | | 1.0 | 1970-01-01T00:00:07.500 | b | | 1.0 | 1970-01-01T00:00:08 | b | | 1.0 | 1970-01-01T00:00:08.500 | b | | 1.0 | 1970-01-01T00:00:09 | b | | 1.0 | 1970-01-01T00:00:09.500 | b | | 1.0 | 1970-01-01T00:00:10 | b | | 2.0 | 1970-01-01T00:00:00.500 | a | | 2.0 | 1970-01-01T00:00:01 | a | | 2.0 | 1970-01-01T00:00:01.500 | a | | 2.0 | 1970-01-01T00:00:02 | a | | 2.0 | 1970-01-01T00:00:02.500 | a | | 2.0 | 1970-01-01T00:00:03 | a | | 2.0 | 1970-01-01T00:00:03.500 | a | | 2.0 | 1970-01-01T00:00:04 | a | | 2.0 | 1970-01-01T00:00:04.500 | a | | 2.0 | 1970-01-01T00:00:05 | a | | 2.0 | 1970-01-01T00:00:05.500 | a | | 2.0 | 1970-01-01T00:00:06 | a | | 2.0 | 1970-01-01T00:00:06.500 | a | | 2.0 | 1970-01-01T00:00:07 | a | | 2.0 | 1970-01-01T00:00:07.500 | a | | 2.0 | 1970-01-01T00:00:08 | a | | 2.0 | 1970-01-01T00:00:08.500 | a | | 2.0 | 1970-01-01T00:00:09 | a | | 2.0 | 1970-01-01T00:00:09.500 | a | | 2.0 | 1970-01-01T00:00:10 | a | +-----+-------------------------+---+ TQL EVAL ('1970-01-01T00:00:00'::timestamp, '1970-01-01T00:00:00'::timestamp + '10 seconds'::interval, '1s') test{k="a"}; +-----+---------------------+---+ | i | j | k | +-----+---------------------+---+ | 2.0 | 1970-01-01T00:00:01 | a | | 2.0 | 1970-01-01T00:00:02 | a | | 2.0 | 1970-01-01T00:00:03 | a | | 2.0 | 1970-01-01T00:00:04 | a | | 2.0 | 1970-01-01T00:00:05 | a | | 2.0 | 1970-01-01T00:00:06 | a | | 2.0 | 1970-01-01T00:00:07 | a | | 2.0 | 1970-01-01T00:00:08 | a | | 2.0 | 1970-01-01T00:00:09 | a | | 2.0 | 1970-01-01T00:00:10 | a | +-----+---------------------+---+ TQL EVAL (now() - now(), now() - (now() - '10 seconds'::interval), '1s') test{k="a"}; +-----+---------------------+---+ | i | j | k | +-----+---------------------+---+ | 2.0 | 1970-01-01T00:00:01 | a | | 2.0 | 1970-01-01T00:00:02 | a | | 2.0 | 1970-01-01T00:00:03 | a | | 2.0 | 1970-01-01T00:00:04 | a | | 2.0 | 1970-01-01T00:00:05 | a | | 2.0 | 1970-01-01T00:00:06 | a | | 2.0 | 1970-01-01T00:00:07 | a | | 2.0 | 1970-01-01T00:00:08 | a | | 2.0 | 1970-01-01T00:00:09 | a | | 2.0 | 1970-01-01T00:00:10 | a | +-----+---------------------+---+ DROP TABLE test; Affected Rows: 0 CREATE TABLE test (`Field_I` DOUBLE, `Ts_J` TIMESTAMP TIME INDEX, `Tag_K` STRING PRIMARY KEY); Affected Rows: 0 INSERT INTO test VALUES (1, 1, "a"), (1, 1, "b"), (2, 2, "a"); Affected Rows: 3 -- SQLNESS SORT_RESULT 2 1 TQL EVAL (0, 10, '5s') test{__field__="Field_I"}; +---------+-------+---------------------+ | Field_I | Tag_K | Ts_J | +---------+-------+---------------------+ | 1.0 | b | 1970-01-01T00:00:05 | | 1.0 | b | 1970-01-01T00:00:10 | | 2.0 | a | 1970-01-01T00:00:05 | | 2.0 | a | 1970-01-01T00:00:10 | +---------+-------+---------------------+ TQL EVAL (0, 10, '5s') test{__field__="field_i"}; Error: 1004(InvalidArguments), Cannot find column field_i drop table test; Affected Rows: 0 CREATE TABLE metrics(val DOUBLE, ts TIMESTAMP TIME INDEX, host STRING PRIMARY KEY); Affected Rows: 0 -- Insert sample data with fixed timestamps for predictable testing INSERT INTO metrics VALUES (10.0, '2024-01-01 00:00:00', 'host1'), (15.0, '2024-01-01 06:00:00', 'host1'), (20.0, '2024-01-01 12:00:00', 'host1'), (25.0, '2024-01-01 18:00:00', 'host1'), (30.0, '2024-01-02 00:00:00', 'host1'), (35.0, '2024-01-02 06:00:00', 'host1'), (40.0, '2024-01-02 12:00:00', 'host1'), (12.0, '2024-01-01 02:00:00', 'host2'), (18.0, '2024-01-01 08:00:00', 'host2'), (22.0, '2024-01-01 14:00:00', 'host2'); Affected Rows: 10 -- Test TQL with date_trunc function -- SQLNESS SORT_RESULT 2 1 TQL EVAL (date_trunc('day', '2024-01-01 10:00:00'::timestamp), date_trunc('day', '2024-01-02 10:00:00'::timestamp), '6h') last_over_time(metrics[12h]); +---------------------+-----------------------------------+-------+ | ts | prom_last_over_time(ts_range,val) | host | +---------------------+-----------------------------------+-------+ | 2024-01-01T00:00:00 | 10.0 | host1 | | 2024-01-01T06:00:00 | 12.0 | host2 | | 2024-01-01T06:00:00 | 15.0 | host1 | | 2024-01-01T12:00:00 | 18.0 | host2 | | 2024-01-01T12:00:00 | 20.0 | host1 | | 2024-01-01T18:00:00 | 22.0 | host2 | | 2024-01-01T18:00:00 | 25.0 | host1 | | 2024-01-02T00:00:00 | 22.0 | host2 | | 2024-01-02T00:00:00 | 25.0 | host1 | +---------------------+-----------------------------------+-------+ -- Test TQL with date_trunc and interval arithmetic (now() - interval '1' day pattern) -- SQLNESS SORT_RESULT 2 1 TQL EVAL (date_trunc('day', '2024-01-02 00:00:00'::timestamp) - interval '1' day, date_trunc('day', '2024-01-02 00:00:00'::timestamp), '4h') metrics{host="host1"}; +------+---------------------+-------+ | val | ts | host | +------+---------------------+-------+ | 10.0 | 2024-01-01T00:00:00 | host1 | | 20.0 | 2024-01-01T12:00:00 | host1 | +------+---------------------+-------+ -- Test TQL with hour-based queries -- SQLNESS SORT_RESULT 2 1 TQL EVAL ('2024-01-01 06:00:00'::timestamp, '2024-01-01 18:00:00'::timestamp, '3h', '6h') metrics; +------+---------------------+-------+ | val | ts | host | +------+---------------------+-------+ | 12.0 | 2024-01-01T06:00:00 | host2 | | 15.0 | 2024-01-01T06:00:00 | host1 | | 15.0 | 2024-01-01T09:00:00 | host1 | | 18.0 | 2024-01-01T09:00:00 | host2 | | 18.0 | 2024-01-01T12:00:00 | host2 | | 20.0 | 2024-01-01T12:00:00 | host1 | | 20.0 | 2024-01-01T15:00:00 | host1 | | 22.0 | 2024-01-01T15:00:00 | host2 | | 22.0 | 2024-01-01T18:00:00 | host2 | | 25.0 | 2024-01-01T18:00:00 | host1 | +------+---------------------+-------+ -- Test TQL with complex interval arithmetic -- SQLNESS SORT_RESULT 2 1 TQL EVAL ('2024-01-01 00:00:00'::timestamp + interval '12' hour, '2024-01-02 00:00:00'::timestamp - interval '6' hour, '6h', '6h') metrics{host="host2"}; +------+---------------------+-------+ | val | ts | host | +------+---------------------+-------+ | 18.0 | 2024-01-01T12:00:00 | host2 | | 22.0 | 2024-01-01T18:00:00 | host2 | +------+---------------------+-------+ DROP TABLE metrics; Affected Rows: 0