You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Snowflake数据库表添加date_created和date_updated列?

在Snowflake中添加date_created和date_updated列的解决方案

1. 添加date_created列

你的第一条语句是完全可行的,直接执行即可:

ALTER TABLE test ADD COLUMN date_created timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP;

这条语句会为现有行自动填充当前时间戳,后续插入的新行也会默认使用当前时间。

2. 实现date_updated列(自动更新)

Snowflake不支持DEFAULT ON UPDATE CURRENT_TIMESTAMP这类语法,需要通过以下两种常用方式实现自动更新:

方式一:使用触发器

触发器可以在表发生UPDATE操作时,自动同步更新date_updated列。

步骤1:先添加date_updated列

ALTER TABLE test ADD COLUMN date_updated timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP;

步骤2:创建触发器函数

CREATE OR REPLACE FUNCTION update_date_updated()
RETURNS TRIGGER
LANGUAGE JAVASCRIPT
AS $$
    function main(event) {
        const rows = event.rows;
        for (let i = 0; i < rows.length; i++) {
            rows[i].NEW.date_updated = CURRENT_TIMESTAMP();
        }
        return rows;
    }
$$;

步骤3:绑定触发器到表的UPDATE事件

CREATE OR REPLACE TRIGGER test_update_trigger
AFTER UPDATE ON test
FOR EACH ROW
EXECUTE FUNCTION update_date_updated();

之后每次更新表中的行,date_updated列都会自动刷新为当前时间戳。

方式二:使用流+任务

这种方式适合不需要实时更新,或对触发器性能有顾虑的场景,通过流捕获表的变更,再用任务定期更新时间戳。

步骤1:添加date_updated列

ALTER TABLE test ADD COLUMN date_updated timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP;

步骤2:创建流捕获UPDATE变更

CREATE OR REPLACE STREAM test_update_stream
ON TABLE test
APPEND_ONLY = FALSE
SHOW_INITIAL_ROWS = FALSE;

步骤3:创建任务执行更新

CREATE OR REPLACE TASK test_update_task
WAREHOUSE = YOUR_WAREHOUSE_NAME -- 替换为你的仓库名称
SCHEDULE = '1 MINUTE' -- 可按需调整执行间隔
AS
UPDATE test t
SET t.date_updated = CURRENT_TIMESTAMP
FROM test_update_stream s
WHERE t.id = s.id; -- 替换为表的主键或唯一标识列

步骤4:启动任务

ALTER TASK test_update_task RESUME;

任务会按照设定的间隔自动更新流中捕获到的变更行的date_updated列。


内容的提问来源于stack exchange,提问作者Justin Battaglia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 19:02:37