这当然是可能的(使用测试设置中的实际结构):
- 创建一个流,例如:
CREATE FOREIGN TABLE s_tracking (
c_timestamp TIMESTAMPTZ,
c_session BIGINT,
c_request BIGINT,
c_client VARCHAR,
c_gender VARCHAR,
c_path VARCHAR
) SERVER pipelinedb;
- 创建一个插入条目的触发器函数,例如:
CREATE FUNCTION func_tracking_insert_pipe() RETURNS trigger
LANGUAGE plpgsql AS
$$BEGIN
INSERT INTO
t_tracking (c_timestamp, c_session, c_request, c_client, c_gender, c_path)
VALUES
(NEW.c_timestamp, NEW.c_session, NEW.c_request, NEW.c_client, NEW.c_gender, NEW.c_path)
;
RETURN NEW;
END;$$
;
- 创建一个连续的变换,例如:
CREATE VIEW v_t_forward_raw_data
WITH (action=transform, outputfunc=func_tracking_insert_pipe)
AS
SELECT c_timestamp, c_session, c_request, c_client, c_gender, c_path FROM s_tracking
;
- 插入流而不是表:
INSERT INTO s_tracking
(c_timestamp, c_session, c_request, c_client, c_gender, c_path)
...
...这将导致生成为流定义的所有指标s_tracking
以及完整的原始数据到 (hyper-)table 中t_tracking
。
INSERT
但是,由于使用基于行的触发器函数的变通方法,每个参与的人都会受到惩罚。
如果你能忍受,上面可能是你最好的机会。