Условная вставка в таблицу в Снежинке - PullRequest
0 голосов
/ 29 июня 2018

Допустим, у меня есть 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
)
;

Когда COUNT (*) = 0 в TABLE_B, то Вставьте 'dummy_id', 'dummy_uid', current_date (), current_timestamp (), TO_OBJECT (PARSE_JSON ('{}')), TO_ARRAY ('DUMMY_ROWS') в TABLE_A.

Ответы [ 2 ]

0 голосов
/ 01 июля 2018

Как насчет

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 будет содержать что-то.

Кстати, это решение в целом должно работать для любой СУБД, а не только для Snowflake.

0 голосов
/ 29 июня 2018

Вы можете использовать функцию CASE SQL , вы можете написать что-то подобное

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;

Это не ответ на копирование, но из этого вы можете найти свой путь

...