首页 > 解决方案 > 雪花有条件地从表中删除

问题描述

在 Snowflake 中实现以下 Teradata 逻辑的最佳方法是什么?

检查传入阶段表是否有行。如果是,则截断目标表,如果不是,则跳过(并转到“endofcode”,示例中没有的标签,我们只需跳过)

SELECT * FROM ${STAGE}.STAGE_TABLE SAMPLE 1;
.IF ACTIVITYCOUNT = 0 THEN .GOTO endofcode
BEGIN TRANSACTION;

DELETE FROM ${DWH}.TARGET_TABLE ALL;

谢谢你。

编辑: 这会工作/是最好的方法吗?:

DELETE FROM targettab WHERE EXISTS (SELECT 1 FROM stagetab sample (1 rows))

标签: sqlsnowflake-cloud-data-platform

解决方案


关于这个查询: DELETE FROM targettab WHERE EXISTS (SELECT 1 FROM stagetab) 是的,它会工作。

但是:你说你想截断而不是删除。在 Snowflake 中,截断和删除整个表之间存在差异:https ://docs.snowflake.com/en/sql-reference/sql/delete.html

如果要使用 TRUNCATE,可以考虑使用 Snowflake 存储过程。


推荐阅读