【问题标题】:Conditional insert into table in Snowflake有条件地插入到雪花中的表中
【发布时间】:2018-06-29 17:49:36
【问题描述】:

假设我有 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 snowflake-cloud-data-platform


    【解决方案1】:

    怎么样

    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。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多