我有一个每天运行增量构建的表。现在处理成本为 17 TB。尺寸会随着时间的推移而增大。我经常需要向该表添加新列,并且我希望不仅能够在末尾添加这些新列,而且还能够在特定列之后添加这些新列。
到目前为止,我发现做到这一点的唯一方法是使用以下语句:
create or replace table <SCHEMA.NEW_TABLE_NAME> as
select col1,col2,col3 from <SCHEMA.OLD_TABLE_NAME>;
但是,这是扫描整个表,我不想每次需要在中间添加新列时都运行 17 TB 处理。
根据我所读到的内容,我认为这是不可能的,但我认为没有任何公开询问的问题。
@SANN3 绝对正确。最后向表添加新列时,通常可以使用
ALTER TABLE
语句添加该列,而无需重新创建整个表。这是大多数关系数据库管理系统 (RDBMS) 中常见且高效的操作。
ALTER TABLE <SCHEMA.OLD_TABLE_NAME>
ADD COLUMN new_column_name datatype;
此语句会将新列添加到表列列表的末尾,而不需要重新创建整个表。这是扩展表架构的一种简单而有效的方法。
但是,您最初的问题是在现有列之间添加列,这是一个更复杂的操作。许多数据库不支持在不重新创建表或进行大量数据移动的情况下在任意位置添加列。在这种情况下,可以使用我之前描述的涉及临时表和重命名的方法来实现此目的。
但是,如果您需要在表末尾添加列,则可以使用 ALTER TABLE 语句,并且不需要全表扫描或重新创建。
将此答案发布为社区 Wiki,因为这是唯一可能的解决方法,并且为了将来可能遇到此用例的社区的利益。
请随时编辑此答案以获取更多信息,以及是否有针对此用例的其他可能的解决方法/直接解决方案。