Files
greptimedb/tests/cases/standalone/common/promql/label.result
yihong f0bec4940f fix: two label_replace different from promql (#6720)
* fix: two label_replace different from promql

Signed-off-by: yihong0618 <zouzou0208@gmail.com>

* fix: address comments

Signed-off-by: yihong0618 <zouzou0208@gmail.com>
Co-authored-by: Jiachun Feng <jiachun_feng@proton.me>

* fix: another address

Signed-off-by: yihong0618 <zouzou0208@gmail.com>

---------

Signed-off-by: yihong0618 <zouzou0208@gmail.com>
Co-authored-by: Jiachun Feng <jiachun_feng@proton.me>
2025-08-13 06:27:49 +00:00

408 lines
17 KiB
Plaintext

CREATE TABLE test (
ts timestamp(3) time index,
host STRING,
idc STRING,
val BIGINT,
PRIMARY KEY(host, idc),
);
Affected Rows: 0
INSERT INTO TABLE test VALUES
(0, 'host1', 'idc1', 1),
(0, 'host2', 'idc1', 2),
(5000, 'host1', 'idc2:zone1',3),
(5000, 'host2', 'idc2',4),
(10000, 'host1', 'idc3:zone2',5),
(10000, 'host2', 'idc3',6),
(15000, 'host1', 'idc4:zone3',7),
(15000, 'host2', 'idc4',8);
Affected Rows: 8
-- Missing source labels --
TQL EVAL (0, 15, '5s') label_join(test{host="host1"}, "new_host", "-");
Error: 1004(InvalidArguments), Invalid function argument for label_join
-- dst_label is equal to source label --
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') label_join(test{host="host1"}, "host", "-", "host");
+---------------------+-----+-------+------------+
| ts | val | host | idc |
+---------------------+-----+-------+------------+
| 1970-01-01T00:00:00 | 1 | host1 | idc1 |
| 1970-01-01T00:00:05 | 1 | host1 | idc1 |
| 1970-01-01T00:00:05 | 3 | host1 | idc2:zone1 |
| 1970-01-01T00:00:10 | 1 | host1 | idc1 |
| 1970-01-01T00:00:10 | 3 | host1 | idc2:zone1 |
| 1970-01-01T00:00:10 | 5 | host1 | idc3:zone2 |
| 1970-01-01T00:00:15 | 1 | host1 | idc1 |
| 1970-01-01T00:00:15 | 3 | host1 | idc2:zone1 |
| 1970-01-01T00:00:15 | 5 | host1 | idc3:zone2 |
| 1970-01-01T00:00:15 | 7 | host1 | idc4:zone3 |
+---------------------+-----+-------+------------+
-- dst_label is in source labels --
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') label_join(test{host="host1"}, "host", "-", "idc", "host");
+---------------------+-----+------------------+------------+
| ts | val | host | idc |
+---------------------+-----+------------------+------------+
| 1970-01-01T00:00:00 | 1 | idc1-host1 | idc1 |
| 1970-01-01T00:00:05 | 1 | idc1-host1 | idc1 |
| 1970-01-01T00:00:05 | 3 | idc2:zone1-host1 | idc2:zone1 |
| 1970-01-01T00:00:10 | 1 | idc1-host1 | idc1 |
| 1970-01-01T00:00:10 | 3 | idc2:zone1-host1 | idc2:zone1 |
| 1970-01-01T00:00:10 | 5 | idc3:zone2-host1 | idc3:zone2 |
| 1970-01-01T00:00:15 | 1 | idc1-host1 | idc1 |
| 1970-01-01T00:00:15 | 3 | idc2:zone1-host1 | idc2:zone1 |
| 1970-01-01T00:00:15 | 5 | idc3:zone2-host1 | idc3:zone2 |
| 1970-01-01T00:00:15 | 7 | idc4:zone3-host1 | idc4:zone3 |
+---------------------+-----+------------------+------------+
-- test the empty source label --
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') label_join(test{host="host1"}, "host", "-", "");
+---------------------+-----+------+------------+
| ts | val | host | idc |
+---------------------+-----+------+------------+
| 1970-01-01T00:00:00 | 1 | | idc1 |
| 1970-01-01T00:00:05 | 1 | | idc1 |
| 1970-01-01T00:00:05 | 3 | | idc2:zone1 |
| 1970-01-01T00:00:10 | 1 | | idc1 |
| 1970-01-01T00:00:10 | 3 | | idc2:zone1 |
| 1970-01-01T00:00:10 | 5 | | idc3:zone2 |
| 1970-01-01T00:00:15 | 1 | | idc1 |
| 1970-01-01T00:00:15 | 3 | | idc2:zone1 |
| 1970-01-01T00:00:15 | 5 | | idc3:zone2 |
| 1970-01-01T00:00:15 | 7 | | idc4:zone3 |
+---------------------+-----+------+------------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') label_join(test{host="host1"}, "new_host", "-", "idc", "host");
+---------------------+-----+------------------+-------+------------+
| ts | val | new_host | host | idc |
+---------------------+-----+------------------+-------+------------+
| 1970-01-01T00:00:00 | 1 | idc1-host1 | host1 | idc1 |
| 1970-01-01T00:00:05 | 1 | idc1-host1 | host1 | idc1 |
| 1970-01-01T00:00:05 | 3 | idc2:zone1-host1 | host1 | idc2:zone1 |
| 1970-01-01T00:00:10 | 1 | idc1-host1 | host1 | idc1 |
| 1970-01-01T00:00:10 | 3 | idc2:zone1-host1 | host1 | idc2:zone1 |
| 1970-01-01T00:00:10 | 5 | idc3:zone2-host1 | host1 | idc3:zone2 |
| 1970-01-01T00:00:15 | 1 | idc1-host1 | host1 | idc1 |
| 1970-01-01T00:00:15 | 3 | idc2:zone1-host1 | host1 | idc2:zone1 |
| 1970-01-01T00:00:15 | 5 | idc3:zone2-host1 | host1 | idc3:zone2 |
| 1970-01-01T00:00:15 | 7 | idc4:zone3-host1 | host1 | idc4:zone3 |
+---------------------+-----+------------------+-------+------------+
-- Should return empty result instead of error
tql eval label_join(demo_num_cpus, "new_label", "-", "instance", "job");
++
++
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') label_replace(test{host="host1"}, "new_idc", "$2", "idc", "(.*):(.*)");
+---------------------+-----+---------+-------+------------+
| ts | val | new_idc | host | idc |
+---------------------+-----+---------+-------+------------+
| 1970-01-01T00:00:00 | 1 | idc1 | host1 | idc1 |
| 1970-01-01T00:00:05 | 1 | idc1 | host1 | idc1 |
| 1970-01-01T00:00:05 | 3 | zone1 | host1 | idc2:zone1 |
| 1970-01-01T00:00:10 | 1 | idc1 | host1 | idc1 |
| 1970-01-01T00:00:10 | 3 | zone1 | host1 | idc2:zone1 |
| 1970-01-01T00:00:10 | 5 | zone2 | host1 | idc3:zone2 |
| 1970-01-01T00:00:15 | 1 | idc1 | host1 | idc1 |
| 1970-01-01T00:00:15 | 3 | zone1 | host1 | idc2:zone1 |
| 1970-01-01T00:00:15 | 5 | zone2 | host1 | idc3:zone2 |
| 1970-01-01T00:00:15 | 7 | zone3 | host1 | idc4:zone3 |
+---------------------+-----+---------+-------+------------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') label_replace(test{host="host1"}, "new_idc", "idc99", "idc", "idc2.*");
+---------------------+-----+------------+-------+------------+
| ts | val | new_idc | host | idc |
+---------------------+-----+------------+-------+------------+
| 1970-01-01T00:00:00 | 1 | idc1 | host1 | idc1 |
| 1970-01-01T00:00:05 | 1 | idc1 | host1 | idc1 |
| 1970-01-01T00:00:05 | 3 | idc99 | host1 | idc2:zone1 |
| 1970-01-01T00:00:10 | 1 | idc1 | host1 | idc1 |
| 1970-01-01T00:00:10 | 3 | idc99 | host1 | idc2:zone1 |
| 1970-01-01T00:00:10 | 5 | idc3:zone2 | host1 | idc3:zone2 |
| 1970-01-01T00:00:15 | 1 | idc1 | host1 | idc1 |
| 1970-01-01T00:00:15 | 3 | idc99 | host1 | idc2:zone1 |
| 1970-01-01T00:00:15 | 5 | idc3:zone2 | host1 | idc3:zone2 |
| 1970-01-01T00:00:15 | 7 | idc4:zone3 | host1 | idc4:zone3 |
+---------------------+-----+------------+-------+------------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') label_replace(test{host="host2"}, "new_idc", "$2", "idc", "(.*):(.*)");
+---------------------+-----+---------+-------+------+
| ts | val | new_idc | host | idc |
+---------------------+-----+---------+-------+------+
| 1970-01-01T00:00:00 | 2 | idc1 | host2 | idc1 |
| 1970-01-01T00:00:05 | 2 | idc1 | host2 | idc1 |
| 1970-01-01T00:00:05 | 4 | idc2 | host2 | idc2 |
| 1970-01-01T00:00:10 | 2 | idc1 | host2 | idc1 |
| 1970-01-01T00:00:10 | 4 | idc2 | host2 | idc2 |
| 1970-01-01T00:00:10 | 6 | idc3 | host2 | idc3 |
| 1970-01-01T00:00:15 | 2 | idc1 | host2 | idc1 |
| 1970-01-01T00:00:15 | 4 | idc2 | host2 | idc2 |
| 1970-01-01T00:00:15 | 6 | idc3 | host2 | idc3 |
| 1970-01-01T00:00:15 | 8 | idc4 | host2 | idc4 |
+---------------------+-----+---------+-------+------+
-- dst_label is equal to source label --
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') label_replace(test{host="host2"}, "idc", "$2", "idc", "(.*):(.*)");
Error: 1004(InvalidArguments), vector cannot contain metrics with the same labelset
-- test the empty source label --
-- TODO(dennis): we can't remove the label currently --
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') label_replace(test{host="host2"}, "idc2", "", "", "");
+---------------------+-----+-------+------+
| ts | val | host | idc |
+---------------------+-----+-------+------+
| 1970-01-01T00:00:00 | 2 | host2 | idc1 |
| 1970-01-01T00:00:05 | 2 | host2 | idc1 |
| 1970-01-01T00:00:05 | 4 | host2 | idc2 |
| 1970-01-01T00:00:10 | 2 | host2 | idc1 |
| 1970-01-01T00:00:10 | 4 | host2 | idc2 |
| 1970-01-01T00:00:10 | 6 | host2 | idc3 |
| 1970-01-01T00:00:15 | 2 | host2 | idc1 |
| 1970-01-01T00:00:15 | 4 | host2 | idc2 |
| 1970-01-01T00:00:15 | 6 | host2 | idc3 |
| 1970-01-01T00:00:15 | 8 | host2 | idc4 |
+---------------------+-----+-------+------+
-- Issue 5726 --
-- SQLNESS SORT_RESULT 3 1
TQL EVAL(0, 15, '5s') label_replace(vector(1), "host", "host1", "", "");
+---------------------+----------------+-------+
| time | greptime_value | host |
+---------------------+----------------+-------+
| 1970-01-01T00:00:00 | 1.0 | host1 |
| 1970-01-01T00:00:05 | 1.0 | host1 |
| 1970-01-01T00:00:10 | 1.0 | host1 |
| 1970-01-01T00:00:15 | 1.0 | host1 |
+---------------------+----------------+-------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL(0, 15, '5s') {__name__="test",host="host1"} * label_replace(vector(1), "host", "host1", "", "");
+-------+---------------------+----------------------------+
| host | time | test.val * .greptime_value |
+-------+---------------------+----------------------------+
| host1 | 1970-01-01T00:00:00 | 1.0 |
| host1 | 1970-01-01T00:00:05 | 1.0 |
| host1 | 1970-01-01T00:00:05 | 3.0 |
| host1 | 1970-01-01T00:00:10 | 1.0 |
| host1 | 1970-01-01T00:00:10 | 3.0 |
| host1 | 1970-01-01T00:00:10 | 5.0 |
| host1 | 1970-01-01T00:00:15 | 1.0 |
| host1 | 1970-01-01T00:00:15 | 3.0 |
| host1 | 1970-01-01T00:00:15 | 5.0 |
| host1 | 1970-01-01T00:00:15 | 7.0 |
+-------+---------------------+----------------------------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL(0, 15, '5s') {__name__="test",host="host1"} + label_replace(vector(1), "host", "host1", "", "");
+-------+---------------------+----------------------------+
| host | time | test.val + .greptime_value |
+-------+---------------------+----------------------------+
| host1 | 1970-01-01T00:00:00 | 2.0 |
| host1 | 1970-01-01T00:00:05 | 2.0 |
| host1 | 1970-01-01T00:00:05 | 4.0 |
| host1 | 1970-01-01T00:00:10 | 2.0 |
| host1 | 1970-01-01T00:00:10 | 4.0 |
| host1 | 1970-01-01T00:00:10 | 6.0 |
| host1 | 1970-01-01T00:00:15 | 2.0 |
| host1 | 1970-01-01T00:00:15 | 4.0 |
| host1 | 1970-01-01T00:00:15 | 6.0 |
| host1 | 1970-01-01T00:00:15 | 8.0 |
+-------+---------------------+----------------------------+
-- Empty regex with existing source label
-- SQLNESS SORT_RESULT 3 1
TQL EVAL(0, 15, '5s') label_replace(test{host="host1"}, "host2", "host2", "host", "");
+---------------------+-----+-------+------------+
| ts | val | host | idc |
+---------------------+-----+-------+------------+
| 1970-01-01T00:00:00 | 1 | host1 | idc1 |
| 1970-01-01T00:00:05 | 1 | host1 | idc1 |
| 1970-01-01T00:00:05 | 3 | host1 | idc2:zone1 |
| 1970-01-01T00:00:10 | 1 | host1 | idc1 |
| 1970-01-01T00:00:10 | 3 | host1 | idc2:zone1 |
| 1970-01-01T00:00:10 | 5 | host1 | idc3:zone2 |
| 1970-01-01T00:00:15 | 1 | host1 | idc1 |
| 1970-01-01T00:00:15 | 3 | host1 | idc2:zone1 |
| 1970-01-01T00:00:15 | 5 | host1 | idc3:zone2 |
| 1970-01-01T00:00:15 | 7 | host1 | idc4:zone3 |
+---------------------+-----+-------+------------+
-- Empty regex with not existing source label
-- SQLNESS SORT_RESULT 3 1
TQL EVAL(0, 15, '5s') label_replace(test{host="host1"}, "host2", "host2", "instance", "");
+---------------------+-----+-------+-------+------------+
| ts | val | host2 | host | idc |
+---------------------+-----+-------+-------+------------+
| 1970-01-01T00:00:00 | 1 | host2 | host1 | idc1 |
| 1970-01-01T00:00:05 | 1 | host2 | host1 | idc1 |
| 1970-01-01T00:00:05 | 3 | host2 | host1 | idc2:zone1 |
| 1970-01-01T00:00:10 | 1 | host2 | host1 | idc1 |
| 1970-01-01T00:00:10 | 3 | host2 | host1 | idc2:zone1 |
| 1970-01-01T00:00:10 | 5 | host2 | host1 | idc3:zone2 |
| 1970-01-01T00:00:15 | 1 | host2 | host1 | idc1 |
| 1970-01-01T00:00:15 | 3 | host2 | host1 | idc2:zone1 |
| 1970-01-01T00:00:15 | 5 | host2 | host1 | idc3:zone2 |
| 1970-01-01T00:00:15 | 7 | host2 | host1 | idc4:zone3 |
+---------------------+-----+-------+-------+------------+
-- Empty regex with not existing source label, but replacement is empty
-- SQLNESS SORT_RESULT 3 1
TQL EVAL(0, 15, '5s') label_replace(test{host="host1"}, "host2", "", "instance", "");
+---------------------+-----+-------+------------+
| ts | val | host | idc |
+---------------------+-----+-------+------------+
| 1970-01-01T00:00:00 | 1 | host1 | idc1 |
| 1970-01-01T00:00:05 | 1 | host1 | idc1 |
| 1970-01-01T00:00:05 | 3 | host1 | idc2:zone1 |
| 1970-01-01T00:00:10 | 1 | host1 | idc1 |
| 1970-01-01T00:00:10 | 3 | host1 | idc2:zone1 |
| 1970-01-01T00:00:10 | 5 | host1 | idc3:zone2 |
| 1970-01-01T00:00:15 | 1 | host1 | idc1 |
| 1970-01-01T00:00:15 | 3 | host1 | idc2:zone1 |
| 1970-01-01T00:00:15 | 5 | host1 | idc3:zone2 |
| 1970-01-01T00:00:15 | 7 | host1 | idc4:zone3 |
+---------------------+-----+-------+------------+
-- Empty regex and different label value
-- SQLNESS SORT_RESULT 3 1
TQL EVAL(0, 15, '5s') {__name__="test",host="host1"} * label_replace(vector(1), "host", "host2", "host", "");
++
++
-- Empty regex and not existing label in left expression
-- SQLNESS SORT_RESULT 3 1
TQL EVAL(0, 15, '5s') {__name__="test",host="host1"} * label_replace(vector(1), "addr", "host1", "instance", "");
Error: 3000(PlanQuery), Internal error during building DataFusion plan: No field named addr. Valid fields are test.ts, test.host, test.idc, test.val.
TQL EVAL label_replace(demo_num_cpus, "~invalid", "", "src", "(.*)");
Error: 1004(InvalidArguments), Invalid destination label name in label_replace(): ~invalid
TQL EVAL label_replace(demo_num_cpus, "job", "value", "src", "(.*");
Error: 1004(InvalidArguments), Invalid regular expression in label_replace(): (.*
-- Issue 6438 --
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') label_replace(test{host="host1"}, "new_idc", "idc99", "idc", "idc2.*") == 1.0;
+---------------------+-----+---------+-------+------+
| ts | val | new_idc | host | idc |
+---------------------+-----+---------+-------+------+
| 1970-01-01T00:00:00 | 1 | idc1 | host1 | idc1 |
| 1970-01-01T00:00:05 | 1 | idc1 | host1 | idc1 |
| 1970-01-01T00:00:10 | 1 | idc1 | host1 | idc1 |
| 1970-01-01T00:00:15 | 1 | idc1 | host1 | idc1 |
+---------------------+-----+---------+-------+------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') label_join(test{host="host1"}, "new_host", "-", "idc", "host") == 3;
+---------------------+-----+------------------+-------+------------+
| ts | val | new_host | host | idc |
+---------------------+-----+------------------+-------+------------+
| 1970-01-01T00:00:05 | 3 | idc2:zone1-host1 | host1 | idc2:zone1 |
| 1970-01-01T00:00:10 | 3 | idc2:zone1-host1 | host1 | idc2:zone1 |
| 1970-01-01T00:00:15 | 3 | idc2:zone1-host1 | host1 | idc2:zone1 |
+---------------------+-----+------------------+-------+------------+
DROP TABLE test;
Affected Rows: 0
CREATE TABLE test (
ts timestamp(3) time index,
host STRING,
val BIGINT,
PRIMARY KEY(host),
);
Affected Rows: 0
INSERT INTO TABLE test VALUES
(0, 'host1', 1),
(0, 'host2', 2);
Affected Rows: 2
SELECT * FROM test;
+---------------------+-------+-----+
| ts | host | val |
+---------------------+-------+-----+
| 1970-01-01T00:00:00 | host1 | 1 |
| 1970-01-01T00:00:00 | host2 | 2 |
+---------------------+-------+-----+
-- test the non-existent matchers --
TQL EVAL (0, 1, '5s') test{job=~"host1|host3"};
++
++
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 1, '5s') test{job=~".*"};
+---------------------+-------+-----+
| ts | host | val |
+---------------------+-------+-----+
| 1970-01-01T00:00:00 | host1 | 1 |
| 1970-01-01T00:00:00 | host2 | 2 |
+---------------------+-------+-----+
TQL EVAL (0, 1, '5s') test{job=~".+"};
++
++
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 1, '5s') test{job=""};
+---------------------+-------+-----+
| ts | host | val |
+---------------------+-------+-----+
| 1970-01-01T00:00:00 | host1 | 1 |
| 1970-01-01T00:00:00 | host2 | 2 |
+---------------------+-------+-----+
TQL EVAL (0, 1, '5s') test{job!=""};
++
++
DROP TABLE test;
Affected Rows: 0