【发布时间】:2020-01-16 20:44:40
【问题描述】:
我需要先创建一个 teradata 宏来将信息提取到 volatile 表中,然后执行 CTE 从该 volatile 表中提取数据并插入到 teradata 表中,尝试了不同的方法都失败了,感谢帮助!
CREATE MACRO database.macro_insertion_tablename AS (
CREATE VOLATILE TABLE vt AS
(
SELECT
id, bu,
CONCAT(TO_CHAR(comment_date, 'yyyy-mm-dd HH24:MI:SS'), ' ', action) AS full_action,
ROW_NUMBER() OVER (PARTITION BY id ORDER BY date DESC) AS row_num,
COUNT(*) OVER (PARTITION BY id) as cnt
FROM database.table1
) WITH DATA UNIQUE PRIMARY INDEX(id, row_num) ON COMMIT PRESERVE ROWS;
WITH RECURSIVE cte (id, bu, act, rn) AS
(
SELECT
id, bu
,CAST(full_action AS VARCHAR(5000)) AS full_action
,row_num
FROM vt
WHERE row_num = cnt
UNION ALL
SELECT
vt.id, vt.bu
,cte.act || ' / ' || vt.full_action
,vt.row_num
FROM vt
JOIN cte On vt.id = cte.id AND vt.row_num = cte.rn - 1
)
INSERT INTO database.table (id, bu, full_action)
SELECT id, bu, act
FROM cte
WHERE rn = 1;
DROP TABLE vt;
);
【问题讨论】:
-
失败是什么意思?这是一个错误还是您没有看到您所期望的?您期待什么结果,目前正在获得什么结果?
-
请记住,像您定义的可变表仅对创建它的会话可用。
-
除了指定结果集的分布 (
id, row_num) 之外,您需要使用 volatile 表还有什么特别的原因吗?您不能将 volatile 表的结果集作为辅助CTE合并到您的INSERT INTO database.table ...语句中吗?
标签: teradata