Syntax 雪花更新

Syntax 雪花更新,syntax,snowflake-cloud-data-platform,Syntax,Snowflake Cloud Data Platform,MySQL具有“更新”功能,例如 CREATE TABLE t1 ( ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, dt DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); 在snowflake中,我需要一个类似的行为,在该行为中,每当行上有更新时,我都可以更新一个列,比如“lastupda

MySQL具有“更新”功能,例如

    CREATE TABLE t1 (
     ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
     dt DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    );
在snowflake中,我需要一个类似的行为,在该行为中,每当行上有更新时,我都可以更新一个列,比如“lastupdated”


这在snowflake中可能吗?

在其他数据库实现中,这是通过触发器实现的。
Snowflake不支持触发器。

我想知道您是否可以在Snowflake中创建一个存储过程来完成您要做的事情

如果您试图用时间戳更新行 也可以只更新copy或replace语句中的字段。 同样的做法是:

例1:

> UPDATE <target_table>
       SET Lastupdate = current_timestamp()
        [ FROM <additional_tables> ]
        [ WHERE <condition> ]

如上所述,借用自

,触发器不受支持-您必须在sql中明确执行此操作。请注意,您的流程还应该处理某些类型批次中的数据;如果你想在snowflake中一次录制一张唱片,至少对于任何真实的卷来说,那么你将会经历一段糟糕的时光。

这是一个非常好的功能要求。我已经使用MS SQL Server多年了。。。任何“更新”列都是在代码中完成的,或者如前所述,使用触发器完成的

我查看了snowflake文档,发现此参考仅适用于插入和CTA:

默认。。。或自动递增

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:

您可以这样做:

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;
这意味着每次从表中选择“雪花流”选项时,值都会发生变化。您可以在表的顶部创建一个流,流将有两列,这将为您提供您想要的内容


不幸的是,它的功能开发得不是很好

您可以使用流、外部或内部阶段和事件的组合来记录DML积垢的变化。实际上,这种组合非常优雅,因为您的模拟触发器可以触发外部事件

1) 创建流

create stream supplierStream on table SupplierTable before(statement => 'yourGUID `statementID');`
2) 如果使用Azure,请配置事件网格主题。假设您的主题名为“SupplierTopic”

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) 在服务器或无服务器系统中使用事件网格事件。

您是否尝试过将
合并
更新
结合使用?

create or replace stage supplierStage 
  url='azure://your account container ID'
  storage_integration = SupplierIntegration;