如何从雪花数据库中的表中删除前 N 条记录

Posted

技术标签:

【中文标题】如何从雪花数据库中的表中删除前 N 条记录【英文标题】:How to DELETE top N records from Table in Snowflake Database 【发布时间】:2020-08-21 12:30:17 【问题描述】:

我想在Snowflake DB中执行DELETE操作,有记录限制,我的要求是批量执行DELETE操作,比如先删除前1000条记录,然后再删除下1000条记录等等。

在 SQL Server 中,我们可以使用如下查询:

DELETE TOP (1000) FROM TABLE_NAME;

我正在寻找有关 Snowflake DB 的类似查询,我浏览了 Snowflake 文档以进行删除 - https://docs.snowflake.com/en/sql-reference/sql/delete.html,但我没有找到与 TOPLIMIT 匹配的语法。

【问题讨论】:

【参考方案1】:

这可能不是您正在寻找的答案,但您在 SQL Server 上删除 1000 个块的原因是因为 SQL Server 将这些记录到事务日志中,删除记录,更新索引等,而且更多以这种方式做事很有效率。在雪花中,它不是。

Snowflake 不记录删除,没有索引,事实上,它实际上并没有删除记录,而是重新创建这些记录来自的微分区,而不会删除记录。所以,事实上,在 Snowflake 中小批量删除实际上效率要低得多。相反,您应该简单地使用您希望删除的记录发出一条删除语句,然后让它完成它的工作。

【讨论】:

【参考方案2】:

试试这个


DELETE FROM  <TABLE>
WHERE <ID_COL> IN
(
SELECT TOP 2 <ID_COL> FROM <TABLE>);

【讨论】:

以上是关于如何从雪花数据库中的表中删除前 N 条记录的主要内容,如果未能解决你的问题,请参考以下文章

如何删除雪花数据库表中的重复记录

如何删除 SQL Server 2008 R2 数据库中的最后 N 条记录? [复制]

如何从 DbVisualizer 中删除表中的重复行

如何使用Android从sqlite中的表中删除所有记录?

如何根据某个字段从数据库表中删除重复项

从一个连接到另一个表 SQL 的表中删除记录