您知道在 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))]
感谢您的帮助!
答案 0 :(得分:0)
正如迈克所指出的,答案是“你不能那样做”,这是错误的说法。
该命令的效果是什么,如果它“免费工作”,将创建一个新表,为所有行插入 CURRENT_TIMESTMAP
。当您插入一个新行而值丢失时会发生这种情况。这提出了一个有趣的问题,即“哪些值对历史插入的行有意义”,而这部分是免费午餐所缺少的,因为您必须决定这意味着什么,因为如果您有“多年的数据词” " 和 inserted_at
将用于进行一些整洁的聚合或其他“价值丰富”,这意味着什么“一年的价值现在都有价值”。
鉴于这是您的数据,您需要知道如何处理这个块,或者如何正确回填该数据。
这通常是“缺少”免费午餐功能的本质,它们不会免费扩展到大数据,这意味着作为数据的所有者,您处于编写 DML 最适合的工作的最佳位置您的数据或数据的含义无法以“始终正确”的方式自动生成,因此用户需要理解该数据的边缘情况。