MySQL具有“更新中”功能,例如
CREATE TABLE t1 (
ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
dt DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
我在雪花中需要类似的行为,每当行上有更新时,我都可以更新列“ lastupdated”。
雪花有可能吗?
答案 0 :(得分:0)
在其他数据库实现中,这是通过触发器实现的。 雪花不支持触发器。
答案 1 :(得分:0)
我想知道您是否可以在Snowflake中创建一个存储过程来完成您想做的事情。
如果您尝试使用时间戳更新行 或者您可以只更新copy或replace语句中的字段。 同样也可以这样:https://community.snowflake.com/s/question/0D50Z00006uSiEKSA0/syntax-for-adding-a-column-with-currenttimestamp-default-constraint
示例1:
> UPDATE <target_table>
SET Lastupdate = current_timestamp()
[ FROM <additional_tables> ]
[ WHERE <condition> ]
示例2:
>create or replace table x(i int, t timestamp default current_timestamp());
>insert into x(i) values(1);
从this link借来的
答案 2 :(得分:0)
不支持触发器-您必须在sql中明确地执行此操作。请注意,您的流程还应该以某种类型的批处理数据;如果您想一次在雪花中一次做任何记录-至少对于任何实际音量-都会遇到麻烦。
答案 3 :(得分:0)
这是一个非常不错的功能请求。我已经使用MS SQL Server多年了……任何“更新”的列要么在代码中完成,要么如已经指出的那样,使用触发器。
我检查了雪花文档,发现此参考文献仅适用于INSERT和CTAS:
默认...或自动增加...
Specifies whether a default value is automatically inserted in the column if a value is not explicitly specified via an **INSERT or CREATE TABLE AS SELECT** statement:
https://docs.snowflake.net/manuals/sql-reference/sql/create-table.html
答案 4 :(得分:0)
您可以执行以下操作:
CREATE or REPLACE TABLE t1 (
ts TIMESTAMP_LTZ(9) as CURRENT_TIMESTAMP,
dt DATE as CURRENT_DATE,
NAME VARCHAR(200)
);
insert into t1 (NAME) VALUES ('Jerry Smith');
insert into t1 (NAME) VALUES ('Gazorpazorp Smith');
select * from t1;
仅仅意味着您每次从表中选择值时都会更改
答案 5 :(得分:0)
签出“雪花流”选项。您可以在表的顶部创建一个流,该流将具有几列,这些列将为您提供所需的确切信息!
不幸的是,它没有很好地开发功能!
答案 6 :(得分:0)
您可以结合使用流,外部或内部阶段以及eventing来记录DML CRUD更改。实际上,这种组合非常优雅,因为模拟触发器可以触发外部事件。
1)创建一个流
create stream supplierStream on table SupplierTable before(statement => 'yourGUID `statementID');`
2)如果使用Azure,请配置事件网格主题。假设您的主题名称是“ SupplierTopic” MS event grid
3)创建您的通知集成
CREATE NOTIFICATION INTEGRATION supplierIntegration
ENABLED = true
TYPE = QUEUE
NOTIFICATION_PROVIDER = AZURE_STORAGE_QUEUE
4)创建您的舞台
create or replace stage supplierStage
url='azure://your account container ID'
storage_integration = SupplierIntegration;
5)在服务器或无服务器系统中使用事件网格事件。
答案 7 :(得分:0)
您是否尝试过将MERGE
与UPDATE
结合使用?
https://docs.snowflake.com/en/sql-reference/sql/merge.html