【问题标题】:Snowflake alter column to have default value雪花更改列以具有默认值
【发布时间】:2021-06-26 18:45:20
【问题描述】:
我有一张雪花桌。我想更改一列,使其具有默认值。
结构如下:
我想为 LAST_UPDATED 列设置默认值。
我正在运行这个查询:
alter table "TEST_STATUS" modify LAST_UPDATED set default CURRENT_TIMESTAMP() ;
我收到以下错误:
不支持的功能“更改列设置默认值”。
如何更改表格?
【问题讨论】:
标签:
snowflake-cloud-data-platform
snowflake-schema
【解决方案1】:
您不能使用ALTER TABLE 更改列的默认值,除非它是一个序列或添加列默认值。
检查here中的默认值部分
你需要重新创建你的表
【解决方案2】:
表上的默认值必须有行为,
- null 时使用 42,可以实现为读操作
- 插入空值时,使用更复杂的形式设置值。像 seq() 或 current_date(),这只能在写入时完成。
某些数据库上的后一种形式只是在当时和那里“重写”数据,但鉴于 Snowflake 不是免费的午餐/没有隐藏的成本。如果你想重写你的表(像第二种情况一样推送一个复杂的新值)你应该重写你的表。当你有一个 10 行的简单表时,这看起来很荒谬,让你像这样跳过箍。但是,当您拥有包含 TB 级数据的表时,重写所有这些数据需要大量计算时间,更重要的是绝对不是原子的,因此需要在结构化数据迁移过程中有意地完成。
与 Snowflake 的几乎所有内容一样,它旨在完成繁重的工作,因此大任务应该是有计划的任务。因此,大型重写可能是一个更大的仓库,并暂停入口数据进程。