Files
greptimedb/tests/cases/standalone/common/tql/basic.result
dennis zhuang 57d84b9de5 feat: supports value aliasing in TQL (#7041)
* 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>
2025-10-11 02:49:09 +00:00

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