有条件地插入雪花表中

时间:2018-06-29 17:49:36

标签: sql 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。

2 个答案:

答案 0 :(得分:2)

怎么样

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。

答案 1 :(得分:0)

您可以使用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;

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