"ОБНОВЛЕНИЕ" эквивалент для Amazon Redshift
Я хочу создать таблицу, которая имеет столбец updated_date
он обновляется до SYSDATE каждый раз, когда обновляется любое поле в этой строке. Как мне это сделать в Redshift?
2 ответа
Вы должны создать определение таблицы, как показано ниже, это будет гарантировать, когда вы insert
запись, она заполняет sysdate
,
create table test(
id integer not null,
update_at timestamp DEFAULT SYSDATE);
Каждый раз обновление поля? Помните, Redshift - это решение DW, а не простая база данных, следовательно updates should be avoided or minimized
,
ОБНОВЛЕНИЕ = УДАЛИТЬ + ВСТАВИТЬ
В идеале, вместо обновления какой-либо записи, вы должны удалять и вставлять ее, поэтому заботится о update_at
население при обновлении, которое в конечном итоге, DELETE+INSERT
,
Кроме того, большинство из используемых ETL, вы можете использовать stg_sales
Таблица для заполнения вашей даты, а также, выше решение работает, где вы могли бы сделать что-то вроде ниже.
DELETE from SALES where id in (select Id from stg_sales);
INSERT INTO SALES select id from stg_sales;
Надеюсь, что это ответ на ваш вопрос.
Redshift не поддерживает UPSERT, поэтому вы должны сначала загрузить свои данные во временную / промежуточную таблицу и проверить идентификаторы в основных таблицах, которые также существуют в промежуточной таблице (т. Е. Которые необходимо обновить).
Удалите эти записи и вставьте данные из промежуточной таблицы, которая будет иметь новый updated_date
,
Кроме того, не забывайте периодически запускать VACUUM на своих таблицах, потому что ваш сценарий использования включает в себя множество DELETE и UPDATE.
Обратитесь к этому для дополнительной информации.