如何在Teradata的CREATE TABLE AS SELECT中迁移并添加列CommentString
在Teradata中通过CTAS语句保留/添加列注释的方案
直接在CTAS中指定列注释(适合少量列)
Teradata支持在CTAS的SELECT子句中通过COMMENT关键字直接为列添加注释,同时可以查询DBC.Columns获取原表列的注释实现迁移:
CREATE TABLE new_table AS ( SELECT -- 从原表获取col1的注释并迁移 col1 COMMENT (SELECT CommentString FROM DBC.Columns WHERE DatabaseName = '你的源库名' AND TableName = 'source_table' AND ColumnName = 'col1'), -- 为col2添加新注释 col2 COMMENT 'This is a CommentString for col2' FROM source_table ) WITH DATA;
- 注意事项:
- 子查询必须返回单个值,若原列无注释,会返回
NULL,新列也不会生成注释 - 如果原注释包含单引号,需要用两个单引号转义(比如原注释是
It's a test,要写成'It''s a test')
- 子查询必须返回单个值,若原列无注释,会返回
动态生成CTAS语句(适合大量列)
当表中列数较多时,手动写每个列的注释效率低,可以通过查询系统表生成完整的带注释的CTAS语句:
SELECT 'CREATE TABLE new_table AS (SELECT ' || STRING_AGG( CASE WHEN ColumnName = 'col2' THEN ColumnName || ' COMMENT ''This is a CommentString for col2''' ELSE ColumnName || ' COMMENT ''''' || COALESCE(CommentString, '') || '''''' END, ', ' ) || ' FROM source_table) WITH DATA;' FROM DBC.Columns WHERE DatabaseName = '你的源库名' AND TableName = 'source_table' ORDER BY ColumnId;
- 执行该查询后,会输出一条完整的CTAS语句,其中:
col2使用指定的新注释- 其他列自动继承原表的注释(无注释则留空)
STRING_AGG函数会按列的原始顺序拼接所有列的定义
关键说明
Teradata的CTAS语法本身支持COMMENT子句,无需额外的COMMENT ON语句,既保留了原有CTAS的代码结构,又实现了注释的迁移和新增。
内容的提问来源于stack exchange,提问作者Ricoter
相关产品推荐
相关产品推荐

