内容纲要
概要描述
什么是tdt_rock_table_开头的表?
在TDH平台的Quark组件(或ArgoDB的Quark服务)中,当用户通过TDT(Transwarp Data Transfer)数据加载任务执行批量数据同步时,系统会在数据库(通常是Inceptor或ArgoDB的默认default库)中自动创建一系列临时表,这些表以tdt_rock_table_为前缀,同时可能伴随 tdt_rock_view_开头的视图。它们的作用是作为数据加载过程中的中间存储,用于暂存源端数据、进行转换、校验等操作。正常情况下,加载任务完成后,这些临时表会被自动清理。
详细说明
这些临时表长期存在的原因
如果发现数据库中堆积了大量tdt_rock_table_开头的表未被清理,通常由以下两种原因导致:
1.加载任务异常中断,未能执行清理逻辑
任务执行过程中发生网络中断、资源不足、Quark 重启、任务超时等异常,导致清理步骤(DROP TABLE)未能执行。
某些任务在运行中因数据质量问题或语法错误而失败,但清理逻辑未被触发。
2.加载任务配置了“不清理临时表”
在 TDT 加载任务的参数设置中,存在一个tdt.job.cleaning参数。该参数默认为true,任务完成后会自动删除临时表。
若调试或需要保留中间数据供后续分析的场景,改成了false,忘记改回true,就会导致永久残留。
如何判断这些临时表归属于哪个加载任务?
以下图为例:

use tdt_transporter1;
WITH RECURSIVE cte AS (
SELECT uuid, name, parent_uuid,name AS full_path
FROM navigator_navigation
WHERE category='DATALOAD'
and uuid in
(
select
t2.solution_uuid
from tdt_solution t1
left join tdt_variable t2
on t1.unique_id=t2.solution_uuid
where t2.var_key='tdt.job.cleaning'
and t2.var_value='false'
)
UNION all
SELECT t.uuid, t.name, t.parent_uuid ,CONCAT(t.name,'/',cte.full_path ) AS full_path FROM navigator_navigation t
JOIN cte
ON t.uuid = cte.parent_uuid
)
SELECT full_path FROM cte
where parent_uuid='-';

如何清理这些临时表?
首先,将前面查询到的加载任务的参数 tdt.job.cleaning 修改回 true,避免继续生成;
对已有表,批量生成删除语句手动执行:
--在Quark的beeline或SQL编辑器执行以下语句,生成所有tdt_rock_table_表的 DROP 命令:
SELECT 'DROP TABLE IF EXISTS ' || table_name || ';'
FROM system.tables_v
WHERE table_name LIKE 'tdt_rock_table_%'
AND create_time < SYSTIMESTAMP-INTERVAL '3' DAY ;
--将结果复制出来,确认无误后执行。
--注意:为了避免影响正在运行的任务依赖,建议加上create_time限制条件,比如上面删除3天前的