sql - 雪花有条件地从表中删除
问题描述
在 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))
解决方案
关于这个查询:
DELETE FROM targettab WHERE EXISTS (SELECT 1 FROM stagetab)
是的,它会工作。
但是:你说你想截断而不是删除。在 Snowflake 中,截断和删除整个表之间存在差异:https ://docs.snowflake.com/en/sql-reference/sql/delete.html
如果要使用 TRUNCATE,可以考虑使用 Snowflake 存储过程。
推荐阅读
- verilog - 是否可以在编译时在 verilog 中声明模块输入?
- .net - xunit 2.4.1 使用 cli dotnet test --collect:"Code Coverage" 不生成覆盖 xml
- visual-studio - 已移除的视觉对象显示在实时视觉对象树中
- html - 当我调整窗口大小时,我的页脚前出现了一个全新的空白区域,我不知道为什么
- python - 给定数组 [1, 5, 6, -11, 6, 2] 当加在一起等于 X 时返回对
- rust - Rust 中的 Bindgen 未定义引用
- javascript - 无法使用 Nuxt 和 iView 自定义主题
- numpy - numpy - 解释“np.copy 是浅拷贝,不会复制数组中的对象元素”
- javascript - 如何在 ReactJS 中显示餐厅的相关项目
- aws-secrets-manager - 如何在区域之间同步秘密管理器中的密码