mirror of
https://github.com/GreptimeTeam/greptimedb.git
synced 2026-01-10 07:12:54 +00:00
* feat: supports value aliasing in TQL Signed-off-by: Dennis Zhuang <killme2008@gmail.com> * fix: invalid checking Signed-off-by: Dennis Zhuang <killme2008@gmail.com> * chore: remove invalid checking Signed-off-by: Dennis Zhuang <killme2008@gmail.com> * test: add explain test Signed-off-by: Dennis Zhuang <killme2008@gmail.com> * chore: improve parser Signed-off-by: Dennis Zhuang <killme2008@gmail.com> * test: add explain TQL-CTE Signed-off-by: Dennis Zhuang <killme2008@gmail.com> --------- Signed-off-by: Dennis Zhuang <killme2008@gmail.com>
393 lines
13 KiB
Plaintext
393 lines
13 KiB
Plaintext
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
|
|
|