在雪花上添加一个默认约束为 CURRENT_TIMEStAMP() 的列

时间:2021-07-21 21:07:05

标签: snowflake-cloud-data-platform

您知道在 Snowflake 上添加默认约束为 CURRENT_TIMEStAMP() 的列的语法是什么吗?

我正在尝试:

ALTER TABLE clients
ADD COLUMN inserted_at TIMESTAMP_NTZ DEFAULT CAST(CURRENT_TIMESTAMP AS TIMESTAMP_NTZ);

但它向我显示了这个错误:

SQL compilation error: Invalid column default expression [CAST(CURRENT_TIMESTAMP() AS TIMESTAMP_NTZ(9))]

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

正如迈克所指出的,答案是“你不能那样做”,这是错误的说法。

该命令的效果是什么,如果它“免费工作”,将创建一个新表,为所有行插入 CURRENT_TIMESTMAP。当您插入一个新行而值丢失时会发生这种情况。这提出了一个有趣的问题,即“哪些值对历史插入的行有意义”,而这部分是免费午餐所缺少的,因为您必须决定这意味着什么,因为如果您有“多年的数据词” " 和 inserted_at 将用于进行一些整洁的聚合或其他“价值丰富”,这意味着什么“一年的价值现在都有价值”。

鉴于这是您的数据,您需要知道如何处理这个块,或者如何正确回填该数据。

这通常是“缺少”免费午餐功能的本质,它们不会免费扩展到大数据,这意味着作为数据的所有者,您处于编写 DML 最适合的工作的最佳位置您的数据或数据的含义无法以“始终正确”的方式自动生成,因此用户需要理解该数据的边缘情况。