有 Teradata 的在线资源,例如 SO、Database Administrators (Stack Exhcange) 和 Teradata Developer Exchange。这些可能是您最好的信息来源。
Teradata SQL 数据定义语言的第 43 页- Teradata 13.10 的详细主题手册指出:
您不能将标识列添加到现有基表,也不能将标识列属性添加到现有列。
这可能看起来很乏味,但这种方法效果很好,并且可以最大限度地减少最终用户的数据停机时间。它运行良好,是我们在对具有数十亿行的表进行数据模型更改时使用的首选方法。向新表中插入数据应该得到相当好的优化,因为 Teradata 优化器应该选择数据块级别的 MERGE 操作,而不是逐行进行。
- 使用标识列创建新表
- 确保保留目标表对原始表的更改。
- 将旧表中的选择数据插入新表中。
- 将 {orig_table} 重命名为 {orig_table}_old。
- 将 {new_table} 重命名为 {orig_table}。
- 验证新表的数据并删除 {orig_table}_old
- 刷新 1:1 视图的视图定义以引入标识列。(选修的)
希望这可以帮助。
如果您需要扩展超出允许的就地修改的列的数据类型,您可以尝试另一种解决方案。(例如 DECIMAL(3,0) -> DECIMAL(5,0)):
ALTER TABLE {MyTable} ADD {Orig_ColumnName}_New DECIMAL(5,0) NULL;
UPDATE {MyTable} SET {Orig_ColumnName}_New = {Orig_Column};
ALTER TABLE {MyTable} DROP {Orig_ColumnName};
ALTER TABLE {MyTable} RENAME {Orig_ColumnName}_New AS {Orig_ColumnName};
ALTER TABLE {MyTable} ADD {Orig_ColumnName} NOT NULL; /* If original column was NOT NULL */
解释扩展列数据类型边界的规则可以在 Teradata DDL 手册中找到。