有条件地插入 Snowflake 中的 table

Conditional insert into table in Snowflake

假设我有 2 个表 TABLE_A 和 TABLE_B。当 TABLE_B 中没有行时,我想在 TABLE_A 中插入一个虚拟行,如果 TABLE_B 中有任何行,我想将存在的任何内容插入 TABLE_A 中。我们该怎么做?

CREATE TABLE TABLE_A(
    id          STRING      NOT NULL
  , uid         STRING      NOT NULL
  , date        STRING      NOT NULL
  , timestamp   TIMESTAMP   NOT NULL
  , payload     OBJECT      NOT NULL
  , arr         ARRAY       NOT NULL
)
;

CREATE TABLE TABLE_B(
    id          STRING      NOT NULL
  , uid         STRING      NOT NULL
  , date        STRING      NOT NULL
  , timestamp   TIMESTAMP   NOT NULL
  , payload     OBJECT      NOT NULL
  , arr         ARRAY       NOT NULL
)
;

当 TABLE_B 中的 COUNT(*) = 0 则 插入'dummy_id','dummy_uid',current_date(),current_timestamp(),TO_OBJECT(PARSE_JSON('{}')),TO_ARRAY('DUMMY_ROWS') 进入 TABLE_A。

你可以使用SQL的CASE函数,你可以这样写

INSERT into table_A(),
CASE
WHEN (select count(*) from table_b ) > 0 
THEN select * from table_b
ELSE "some dummy data"
END
FROM table_b;

这不是复制粘贴答案,但您可以从中找到您的路径

怎么样

INSERT INTO TABLE_A
  SELECT * FROM TABLE_B
UNION ALL
  SELECT 
    'dummy_id','dummy_uid', current_date(), current_timestamp(),
    TO_OBJECT(PARSE_JSON('{}')), TO_ARRAY('DUMMY_ROWS') 
  WHERE (SELECT COUNT(*) FROM TABLE_B) = 0

只有 UNION ALL 的一部分会包含一些东西。

顺便说一句,这个解决方案通常适用于任何 DBMS,而不仅仅是 Snowflake。