【问题标题】:snowflake conditionally delete from table雪花有条件地从表中删除
【发布时间】:2020-11-06 16:27:47
【问题描述】:

在 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))

【问题讨论】:

    标签: sql snowflake-cloud-data-platform


    【解决方案1】:

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

    但是:你说你想截断而不是删除。在 Snowflake 中,截断和删除整个表是有区别的:https://docs.snowflake.com/en/sql-reference/sql/delete.html

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

    【讨论】:

    • 嗨,是的,我知道 truncate 和 delete 之间的区别 - 但不能选择使用 truncate。
    • 这样的存储过程会是什么样子?谢谢你的帮助
    • 或者 - 使用删除会对性能产生很大影响吗?
    猜你喜欢
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-06
    • 2022-06-14
    • 2017-12-15
    • 1970-01-01
    相关资源
    最近更新 更多