雪花更新

时间:2019-09-23 04:55:19

标签: syntax snowflake-data-warehouse

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

    CREATE TABLE t1 (
     ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
     dt DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    );

我在雪花中需要类似的行为,每当行上有更新时,我都可以更新列“ lastupdated”。

雪花有可能吗?

8 个答案:

答案 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)

您是否尝试过将MERGEUPDATE结合使用? https://docs.snowflake.com/en/sql-reference/sql/merge.html