- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果我有一个带有自动递增 ID 列的表,我希望能够在该表中插入一行,并获取我刚刚创建的行的 ID。我知道,一般来说,StackOverflow 问题需要某种尝试过的代码或研究工作,但我不确定从哪里开始使用 Snowflake。我已经挖掘了他们的documentation我对此一无所获。
到目前为止我能做的最好的就是尝试 result_scan()
和last_query_id()
,但这些并没有为我提供有关已插入行的任何相关信息,只是确认已插入行。
我相信我所要求的是 MS SQL Server 的 SCOPE_IDENTITY()
的内容功能。
MS SQL Server 的 SCOPE_IDENTITY()
是否有 Snowflake 等效函数?
编辑:为了在这里有代码:
CREATE TABLE my_db..my_table
(
ROWID INT IDENTITY(1,1),
some_number INT,
a_time TIMESTAMP_LTZ(9),
b_time TIMESTAMP_LTZ(9),
more_data VARCHAR(10)
);
INSERT INTO my_db..my_table
(
some_number,
a_time,
more_data
)
VALUES
(1, my_time_value, some_data);
我想要自动增量ROWID
对于我刚刚插入的这一行。
最佳答案
注意:在某些极少数情况下,下面的答案可能不是 100% 正确,请参阅下面的更新部分
Snowflake 目前不提供与 SCOPE_IDENTITY
等效的功能。
但是,您可以利用 Snowflake 的 time travel在执行给定语句后立即检索列的最大值。
这是一个例子:
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 |
----------+
如果您想稍后访问它,您还可以将 last_query_id()
保存到变量中,例如
insert into x(num) values(5);
set qid = last_query_id();
...
select max(rid) from x AT(statement=>$qid);
注意 - 它通常是正确的,但如果用户例如手动向 rid
插入较大的值,可能会影响本次查询的结果。
注意,我意识到上面的代码很少会生成错误的答案。
由于像 Snowflake
这样的分布式系统中查询的各个阶段的执行顺序可能是不确定的,并且 Snowflake 允许并发 INSERT 语句,因此可能会发生以下情况
Q1
和 Q2
,执行简单的单行 INSERT
,大致在同一时间开始第一季度
开始,有点领先第二季度
开始Q1
从 IDENTITY
列创建值为 1
的行Q2
从 IDENTITY
列创建值为 2
的行Q2
领先于 Q1
- 这是关键部分Q2
提交,在 T2
时间标记为完成Q1
提交,在时间 T1
标记为完成请注意,T1
晚于 T2
。现在,当我们尝试执行 SELECT ... AT(statement=>Q1)
时,我们将看到 T1
的状态,包括之前语句的所有更改,因此包括来自 Q2
的值 2
。这不是我们想要的。
解决方法可能是为每个 INSERT
添加一个唯一标识符
(例如,来自单独的 SEQUENCE 对象),然后使用 MAX
.
抱歉。分布式事务很难:)
关于sql - 获取雪花数据仓库中插入的行的标识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53837950/
Hortonworks 数据平台 HDP 3.0 有 spark 2.3 和 Hive 3.1,默认情况下 spark 2.3 应用程序(pyspark/spark-sql 等)使用 spark 数据
是否最好让一个软件仓库包含多个文件夹,这些文件夹映射到工作区中的不同路径。或者一个仓库中的多个文件夹映射到多个工作区,或多个仓库映射到多个工作区。 有人对此事有任何实用建议吗? 我还注意到,当我在仓库
Git 是分布式源代码控制系统,对吧。如何在没有集中存储库的情况下连接两个开发人员。 我们的团队使用 Github,如果两个开发人员想在同一个分支上工作,似乎需要将该分支推送到远程,然后他们才能访问它
Maven – 仓库 什么是 Maven 仓库? 在Maven 的术语中,仓库是一个位置(place),例如目录,可以存储所有的工程 jar 文件、library jar 文件、插件或任何其他的工
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 3年前关闭。 Improve this questi
我开始将 git 与我的 .git 目录以及网络根目录中的其他所有内容一起使用。进一步阅读后,这似乎是一种不好的做法。我现在将我的应用程序和系统文件夹放在网络根目录之外。我的网络根目录中唯一剩下的就是
有没有可能没有历史的 Git 仓库?例如,我有一个我工作的本地 Git 存储库,我想将最新版本推送到生产服务器。生产服务器上不应存储任何历史记录。我该怎么做? 最佳答案 你可以看到命令 git arc
Laravel 中的 Repositories 有什么优势?它似乎是从应用程序的业务逻辑中抽象出模型层。虽然这似乎只是让整个请求生命周期变得更加复杂,但收效甚微。 有人可以阐明 Laravel 存储库
我有一个本地 git 服务器在我的 NAS 上运行,我正在我的笔记本电脑和工作站上进行开发,所有这些都在我的本地网络中。所以,如果我想在一个新的空 repo 中开始一个项目,我会关注 this ans
我们正在使用 SVN 来存储 maven 依赖项(组织限制不能像现在那样使用 nexus 或 artifactory maven 存储库)。 SVN 在使用 https 协议(protocol)的网络
我想允许某人查看我在我的私有(private)存储库中所做的工作。我该怎么做? 我看了https://help.github.com/articles/making-a-private-reposit
我试图阻止同事在 git 中再次推送已删除的标签(因为它被错误地推送了一次)。 我知道如何在本地执行此操作以及如何将其推送到远程以及如何指示我的同事以正确的方式从他们的本地存储库中删除已删除的标签。
我已经使用 url 克隆了一个 friend 的 git repo git 克隆 https://github.com/user/repo_name.git 然后我创建了我的分支,提交并尝试将我的代码
我目前正在我的代理机构安排比赛。我想对开发人员可以使用的模块进行一些管理。 是否可以托管 Play 模块和 Maven 库的镜像存储库并将 play 配置为仅使用这些存储库? 我已阅读此内容 docu
我正在尝试在我的 readme.md 中嵌入图像用于在 GitHub 上显示。我以前在公共(public)存储库中没有遇到任何问题,格式如下: 中。
我发现自己越来越喜欢将Rstudio与R markdown文件(.rmd)一起使用,并且我非常喜欢“编织HTML +发布到Rpubs”的便利与同事共享我的工作。不幸的是,发布的文件必须是公开可见的,而
我是一名优秀的程序员,十分优秀!