Sql 雪花:如何执行CTA或将数据从表x复制到y,并包含约束和默认值?

Sql 雪花:如何执行CTA或将数据从表x复制到y,并包含约束和默认值?,sql,database,copy,clone,snowflake-cloud-data-platform,Sql,Database,Copy,Clone,Snowflake Cloud Data Platform,我通常使用CTA或CLONE将数据从一个表复制到另一个表。 问题是,我不仅需要重命名目标上的相同列,还需要: 在alter表中定义OK的约束,添加约束 例如,Alter列和SETNOTNULL 定义默认值不是序列…因此SF不支持his。 那么,如果我甚至不能用默认值添加一列,这怎么能实现呢?我的想法是先修改CTA,然后修改table以添加列DEFAULT、pks和其他约束,但它在默认情况下失败了 如果我使用普通CTA,我可以重命名列,但不能保留/更改约束和默认值,可以吗 有没有办法做到这一点?确

我通常使用CTA或CLONE将数据从一个表复制到另一个表。 问题是,我不仅需要重命名目标上的相同列,还需要:

在alter表中定义OK的约束,添加约束 例如,Alter列和SETNOTNULL 定义默认值不是序列…因此SF不支持his。 那么,如果我甚至不能用默认值添加一列,这怎么能实现呢?我的想法是先修改CTA,然后修改table以添加列DEFAULT、pks和其他约束,但它在默认情况下失败了

如果我使用普通CTA,我可以重命名列,但不能保留/更改约束和默认值,可以吗


有没有办法做到这一点?确实需要将数据从一个模式复制到另一个模式:这是一次性的事情。

您仍然可以使用主键和约束克隆基表。然后可以重命名克隆表中的列,这不会影响任何关联的约束。例如:

-创建用作外键约束的表

创建或替换表fk_表id整数主键

-创建带主键、默认值和FK约束的基表

创建或替换表basetable id integer, dt日期默认当前日期, fk整数, 主键id, 外键fk引用fk_表id; -克隆您的表

创建或替换表克隆\表克隆基表

-更改表并重命名某些列 更改表克隆\u表将列id重命名为id\u新建; 更改表克隆_table将列fk重命名为fk_new

-获取新对象的DDL并确认约束和默认值 -被保存下来


选择get_ddl'table'、'clone_table'

您仍然可以克隆带有主键和约束的基表。然后可以重命名克隆表中的列,这不会影响任何关联的约束。例如:

-创建用作外键约束的表

创建或替换表fk_表id整数主键

-创建带主键、默认值和FK约束的基表

创建或替换表basetable id integer, dt日期默认当前日期, fk整数, 主键id, 外键fk引用fk_表id; -克隆您的表

创建或替换表克隆\表克隆基表

-更改表并重命名某些列 更改表克隆\u表将列id重命名为id\u新建; 更改表克隆_table将列fk重命名为fk_new

-获取新对象的DDL并确认约束和默认值 -被保存下来


选择get_ddl'table'、'clone_table'

你能按照你想要的方式用DDL创建新表,然后从select插入吗?@GregPavlik我可以,如果它们不是那么重的话……对一些人来说,这可能没问题,但对其他人来说,我的WH需要太长时间,对于有数百万行的表。你能按照你想要的方式用DDL创建一个新表,然后从select中插入吗?@GregPavlik我可以,如果它们不是那么重的话……对于一些表,这可能没问题,但是对于其他表,在我的WH中花费太长时间,对于有数百万行的表。