mirror of
https://github.com/GreptimeTeam/greptimedb.git
synced 2026-05-15 20:40:39 +00:00
* feat: flow tql cte Signed-off-by: discord9 <discord9@163.com> * fix: creating flow TQL CTE source tables lose cte part in query Signed-off-by: discord9 <discord9@163.com> * test: update sqlness result Signed-off-by: discord9 <discord9@163.com> * chore Signed-off-by: discord9 <discord9@163.com> * fix: properly canonicalize ident Signed-off-by: discord9 <discord9@163.com> * feat: even stricter check Signed-off-by: discord9 <discord9@163.com> * chore: sqlness update Signed-off-by: discord9 <discord9@163.com> * chore: after rebase fix Signed-off-by: discord9 <discord9@163.com> --------- Signed-off-by: discord9 <discord9@163.com>
195 lines
6.4 KiB
Plaintext
195 lines
6.4 KiB
Plaintext
CREATE TABLE metric_cte (
|
|
ts timestamp(3) time index,
|
|
val DOUBLE,
|
|
);
|
|
|
|
Affected Rows: 0
|
|
|
|
INSERT INTO TABLE metric_cte VALUES
|
|
(0::Timestamp, 0),
|
|
(5000::Timestamp, 1),
|
|
(10000::Timestamp, 2),
|
|
(15000::Timestamp, 3);
|
|
|
|
Affected Rows: 4
|
|
|
|
CREATE FLOW calc_cte SINK TO metric_cte_sink EVAL INTERVAL '1m' AS
|
|
WITH tql (ts, the_value) AS (
|
|
TQL EVAL (now() - now(), now() - (now() - '15s'::interval), '5s') metric_cte
|
|
)
|
|
SELECT * FROM tql;
|
|
|
|
Affected Rows: 0
|
|
|
|
CREATE TABLE tql (
|
|
ts timestamp(3) time index,
|
|
val DOUBLE,
|
|
);
|
|
|
|
Affected Rows: 0
|
|
|
|
INSERT INTO TABLE tql VALUES
|
|
(0::Timestamp, 10),
|
|
(5000::Timestamp, 20),
|
|
(10000::Timestamp, 30),
|
|
(15000::Timestamp, 40);
|
|
|
|
Affected Rows: 4
|
|
|
|
-- Fail due to case sensitivity of CTE name
|
|
CREATE FLOW calc_cte_case SINK TO metric_cte_join_sink EVAL INTERVAL '1m' AS
|
|
WITH "TQL"(ts, the_value) AS (
|
|
TQL EVAL (now() - now(), now() - (now() - '15s'::interval), '5s') metric_cte
|
|
)
|
|
SELECT * FROM TQL;
|
|
|
|
Error: 1004(InvalidArguments), Invalid flow query: WITH is only supported for the simplest TQL CTE in CREATE FLOW
|
|
|
|
CREATE FLOW calc_cte_non_star SINK TO metric_cte_non_star_sink EVAL INTERVAL '1m' AS
|
|
WITH tql(ts, the_value) AS (
|
|
TQL EVAL (now() - now(), now() - (now() - '15s'::interval), '5s') metric_cte
|
|
)
|
|
SELECT ts FROM tql;
|
|
|
|
Error: 1004(InvalidArguments), Invalid flow query: WITH is only supported for the simplest TQL CTE in CREATE FLOW
|
|
|
|
CREATE FLOW calc_cte_filter SINK TO metric_cte_filter_sink EVAL INTERVAL '1m' AS
|
|
WITH tql(ts, the_value) AS (
|
|
TQL EVAL (now() - now(), now() - (now() - '15s'::interval), '5s') metric_cte
|
|
)
|
|
SELECT * FROM tql WHERE ts > 0::timestamp;
|
|
|
|
Error: 1004(InvalidArguments), Invalid flow query: WITH is only supported for the simplest TQL CTE in CREATE FLOW
|
|
|
|
CREATE FLOW calc_cte_mixed SINK TO metric_cte_mixed_sink EVAL INTERVAL '1m' AS
|
|
WITH s1 AS (SELECT 1),
|
|
tql(ts, the_value) AS (
|
|
TQL EVAL (now() - now(), now() - (now() - '15s'::interval), '5s') metric_cte
|
|
)
|
|
SELECT * FROM tql;
|
|
|
|
Error: 1004(InvalidArguments), Invalid flow query: WITH is only supported for the simplest TQL CTE in CREATE FLOW
|
|
|
|
CREATE FLOW calc_cte_case SINK TO metric_cte_join_sink EVAL INTERVAL '1m' AS
|
|
WITH "TQL"(ts, the_value) AS (
|
|
TQL EVAL (now() - now(), now() - (now() - '15s'::interval), '5s') metric_cte
|
|
)
|
|
SELECT * FROM "TQL";
|
|
|
|
Affected Rows: 0
|
|
|
|
SHOW CREATE TABLE metric_cte_sink;
|
|
|
|
+-----------------+---------------------------------------------------+
|
|
| Table | Create Table |
|
|
+-----------------+---------------------------------------------------+
|
|
| metric_cte_sink | CREATE TABLE IF NOT EXISTS "metric_cte_sink" ( |
|
|
| | "ts" TIMESTAMP(3) NOT NULL, |
|
|
| | "the_value" DOUBLE NULL, |
|
|
| | TIME INDEX ("ts") |
|
|
| | ) |
|
|
| | |
|
|
| | ENGINE=mito |
|
|
| | WITH( |
|
|
| | 'comment' = 'Auto created table by flow engine' |
|
|
| | ) |
|
|
+-----------------+---------------------------------------------------+
|
|
|
|
SELECT source_table_names FROM information_schema.flows WHERE flow_name = 'calc_cte';
|
|
|
|
+----------------------------+
|
|
| source_table_names |
|
|
+----------------------------+
|
|
| greptime.public.metric_cte |
|
|
+----------------------------+
|
|
|
|
SHOW CREATE TABLE metric_cte_join_sink;
|
|
|
|
+----------------------+-----------------------------------------------------+
|
|
| Table | Create Table |
|
|
+----------------------+-----------------------------------------------------+
|
|
| metric_cte_join_sink | CREATE TABLE IF NOT EXISTS "metric_cte_join_sink" ( |
|
|
| | "ts" TIMESTAMP(3) NOT NULL, |
|
|
| | "the_value" DOUBLE NULL, |
|
|
| | TIME INDEX ("ts") |
|
|
| | ) |
|
|
| | |
|
|
| | ENGINE=mito |
|
|
| | WITH( |
|
|
| | 'comment' = 'Auto created table by flow engine' |
|
|
| | ) |
|
|
+----------------------+-----------------------------------------------------+
|
|
|
|
SELECT source_table_names FROM information_schema.flows WHERE flow_name = 'calc_cte_case';
|
|
|
|
+----------------------------+
|
|
| source_table_names |
|
|
+----------------------------+
|
|
| greptime.public.metric_cte |
|
|
+----------------------------+
|
|
|
|
-- SQLNESS REPLACE (ADMIN\sFLUSH_FLOW\('\w+'\)\s+\|\n\+-+\+\n\|\s+)[0-9]+\s+\| $1 FLOW_FLUSHED |
|
|
ADMIN FLUSH_FLOW('calc_cte');
|
|
|
|
+------------------------------+
|
|
| ADMIN FLUSH_FLOW('calc_cte') |
|
|
+------------------------------+
|
|
| FLOW_FLUSHED |
|
|
+------------------------------+
|
|
|
|
SELECT * FROM metric_cte_sink ORDER BY ts;
|
|
|
|
+---------------------+-----------+
|
|
| ts | the_value |
|
|
+---------------------+-----------+
|
|
| 1970-01-01T00:00:00 | 0.0 |
|
|
| 1970-01-01T00:00:05 | 1.0 |
|
|
| 1970-01-01T00:00:10 | 2.0 |
|
|
| 1970-01-01T00:00:15 | 3.0 |
|
|
+---------------------+-----------+
|
|
|
|
-- SQLNESS REPLACE (ADMIN\sFLUSH_FLOW\('\w+'\)\s+\|\n\+-+\+\n\|\s+)[0-9]+\s+\| $1 FLOW_FLUSHED |
|
|
ADMIN FLUSH_FLOW('calc_cte_case');
|
|
|
|
+-----------------------------------+
|
|
| ADMIN FLUSH_FLOW('calc_cte_case') |
|
|
+-----------------------------------+
|
|
| FLOW_FLUSHED |
|
|
+-----------------------------------+
|
|
|
|
SELECT * FROM metric_cte_join_sink ORDER BY ts;
|
|
|
|
+---------------------+-----------+
|
|
| ts | the_value |
|
|
+---------------------+-----------+
|
|
| 1970-01-01T00:00:00 | 0.0 |
|
|
| 1970-01-01T00:00:05 | 1.0 |
|
|
| 1970-01-01T00:00:10 | 2.0 |
|
|
| 1970-01-01T00:00:15 | 3.0 |
|
|
+---------------------+-----------+
|
|
|
|
DROP FLOW calc_cte;
|
|
|
|
Affected Rows: 0
|
|
|
|
DROP FLOW calc_cte_case;
|
|
|
|
Affected Rows: 0
|
|
|
|
DROP TABLE metric_cte;
|
|
|
|
Affected Rows: 0
|
|
|
|
DROP TABLE tql;
|
|
|
|
Affected Rows: 0
|
|
|
|
DROP TABLE metric_cte_sink;
|
|
|
|
Affected Rows: 0
|
|
|
|
DROP TABLE metric_cte_join_sink;
|
|
|
|
Affected Rows: 0
|
|
|