CREATE TABLE test ( ts timestamp(3) time index, host STRING, idc STRING, val BIGINT, PRIMARY KEY(host, idc), ); 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); -- Missing source labels -- -- SQLNESS SORT_RESULT 3 1 TQL EVAL (0, 15, '5s') label_join(test{host="host1"}, "new_host", "-"); -- dst_label is equal to source label -- -- SQLNESS SORT_RESULT 3 1 TQL EVAL (0, 15, '5s') label_join(test{host="host1"}, "host", "-", "host"); -- dst_label is in source labels -- -- SQLNESS SORT_RESULT 3 1 TQL EVAL (0, 15, '5s') label_join(test{host="host1"}, "host", "-", "idc", "host"); -- Absent labels join as empty strings and keep their separators -- TQL EVAL (0, 15, '5s') label_join(label_join(vector(1), "a", "", "missing"), "b", "-", "a", "a"); -- An empty source label name is invalid -- TQL EVAL (0, 15, '5s') label_join(test{host="host1"}, "host", "-", ""); -- Both hosts are joined to the same `host` at 0s, leaving two series with the same label set -- TQL EVAL (0, 15, '5s') label_join(test, "host", "-", "idc"); -- SQLNESS SORT_RESULT 3 1 TQL EVAL (0, 15, '5s') label_join(test{host="host1"}, "new_host", "-", "idc", "host"); -- 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", "(.*):(.*)"); -- SQLNESS SORT_RESULT 3 1 TQL EVAL (0, 15, '5s') label_replace(test{host="host1"}, "new_idc", "idc99", "idc", "idc2.*"); -- SQLNESS SORT_RESULT 3 1 TQL EVAL (0, 15, '5s') label_replace(test{host="host2"}, "new_idc", "$2", "idc", "(.*):(.*)"); -- 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", "(.*):(.*)"); -- SQLNESS SORT_RESULT 3 1 TQL EVAL (0, 15, '5s') label_replace(test{host="host1"}, "idc", "$2", "idc", "(.*):(.*)"); -- Both hosts are rewritten to the same `host`, leaving two series with the same label set -- TQL EVAL (0, 15, '5s') label_replace(test, "host", "x", "host", ".*"); -- test the empty source label -- -- SQLNESS SORT_RESULT 3 1 TQL EVAL (0, 15, '5s') label_replace(test{host="host2"}, "idc2", "", "", ""); -- Issue 5726 -- -- SQLNESS SORT_RESULT 3 1 TQL EVAL(0, 15, '5s') label_replace(vector(1), "host", "host1", "", ""); -- SQLNESS SORT_RESULT 3 1 TQL EVAL(0, 15, '5s') {__name__="test",host="host1"} * label_replace(vector(1), "host", "host1", "", ""); -- SQLNESS SORT_RESULT 3 1 TQL EVAL(0, 15, '5s') {__name__="test",host="host1"} + label_replace(vector(1), "host", "host1", "", ""); -- Empty regex with existing source label -- SQLNESS SORT_RESULT 3 1 TQL EVAL(0, 15, '5s') label_replace(test{host="host1"}, "host2", "host2", "host", ""); -- 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", ""); -- 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", ""); -- An empty replacement removes an existing label -- -- SQLNESS SORT_RESULT 3 1 TQL EVAL (0, 15, '5s') label_replace(test{idc="idc1"}, "idc", "", "instance", ""); -- 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", ""); TQL EVAL label_replace(demo_num_cpus, "~invalid", "", "src", "(.*)"); TQL EVAL label_replace(demo_num_cpus, "job", "value", "src", "(.*"); -- Issue 6438 -- -- SQLNESS SORT_RESULT 3 1 TQL EVAL (0, 15, '5s') label_replace(test{host="host1"}, "new_idc", "idc99", "idc", "idc2.*") == 1.0; -- SQLNESS SORT_RESULT 3 1 TQL EVAL (0, 15, '5s') label_join(test{host="host1"}, "new_host", "-", "idc", "host") == 3; -- Issue 8969 -- -- SQLNESS SORT_RESULT 3 1 TQL EVAL (0, 15, '5s') sum by (foo) (label_replace(test, "foo", "$1", "host", "(.*)")) * 0.8; DROP TABLE test; CREATE TABLE test ( ts timestamp(3) time index, host STRING, val BIGINT, PRIMARY KEY(host), ); INSERT INTO TABLE test VALUES (0, 'host1', 1), (0, 'host2', 2); SELECT * FROM test; -- 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=~".*"}; TQL EVAL (0, 1, '5s') test{job=~".+"}; -- SQLNESS SORT_RESULT 3 1 TQL EVAL (0, 1, '5s') test{job=""}; TQL EVAL (0, 1, '5s') test{job!=""}; DROP TABLE test; -- Issue 9444 -- -- Normalizing mixed histogram boundary representations must not be rejected while -- another label still tells the series apart. CREATE TABLE demo_bucket ( ts timestamp(3) time index, instance STRING, le STRING, val DOUBLE, PRIMARY KEY(instance, le), ); INSERT INTO TABLE demo_bucket VALUES (3000000, 'a', '10', 40), (3000000, 'a', '100', 50), (3000000, 'a', '+Inf', 50), (3000000, 'b', '10.0', 40), (3000000, 'b', '100.0', 50), (3000000, 'b', '1000.0', 50), (3000000, 'b', '+Inf', 50); -- SQLNESS SORT_RESULT 3 1 TQL EVAL (3000, 3000, '5s') label_replace(demo_bucket, "le", "$1", "le", "([0-9]+)[.]0+"); -- Aggregating `instance` away first makes the same rewrite collapse two series into -- one label set, which is a genuine duplicate and must still fail. TQL EVAL (3000, 3000, '5s') label_replace(sum by (le) (demo_bucket), "le", "$1", "le", "([0-9]+)[.]0+"); DROP TABLE demo_bucket;