您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

获取在Snowflake Datawarehouse中插入的行的标识

获取在Snowflake Datawarehouse中插入的行的标识

雪花无法提供@H_502_5@SCOPE_IDENTITY今天的效果

但是,您可以在执行给定语句后立即利用SNowflake的时间旅行来检索列的最大值。

这是一个例子:

@H_502_5@create or replace table x(rid int identity, num int);
insert into x(num) values(7);
insert into x(num) values(9);
-- you can insert rows in a separate transaction Now to test it
select max(rid) from x AT(statement=>last_query_id());
----------+
 MAX(RID) |
----------+
 2        |
----------+

@H_502_5@last_query_id()如果您以后想访问它,也可以将其保存到变量中,例如

@H_502_5@insert into x(num) values(5);
set qid = last_query_id();
...
select max(rid) from x AT(statement=>$qid);

注意-通常这是正确的,但是如果用户(例如)@H_502_5@rid手动将较大的值插入其中,则可能会影响此查询的结果。

由于类似的分布式系统中查询的各个阶段的执行顺序@H_502_5@SNowflake可能是不确定的,并且SNowflake允许并发INSERT语句,因此可能会发生以下情况

请注意,此@H_502_5@T1时间晚于@H_502_5@T2。现在,当我们尝试执行操作时@H_502_5@SELECT ... AT(statement=>Q1),我们将看到状态为as@H_502_5@T1,包括之前语句的所有更改,因此包括@H_502_5@2from的值@H_502_5@Q2。这不是我们想要的。

解决这个问题的方法可能是向@H_502_5@unique identifier每个@H_502_5@INSERT对象添加一个(例如,来自单独的SEQUENCE对象),然后使用@H_502_5@MAX。

对不起。分布式交易很困难:)

其他 2022/1/1 18:52:46 有402人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶