我希望创建一个包含列updated_date
的表,每次更新该行中的任何字段时,该列都会更新为 SYSDATE 。我应该如何在Redshift中执行此操作?
答案 0 :(得分:1)
您应该创建如下所示的表格定义,以确保无论何时insert
记录,它都会填充sysdate
。
create table test(
id integer not null,
update_at timestamp DEFAULT SYSDATE);
每次现场更新?
请记住, Redshift是DW解决方案,而不是简单的数据库,因此updates should be avoided or minimized
。
UPDATE = DELETE + INSERT
理想情况下,您应该删除并插入任何记录,而不是更新任何记录,因此在更新时会处理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;
希望这能回答你的问题。
答案 1 :(得分:0)
Redshift不支持UPSERT,因此您应首先将数据加载到临时/临时表,并检查主表中的ID,这些ID也存在于临时表中(即需要更新的表)。
删除这些记录,并从登台表中插入数据,该登台表将包含新的updated_date
。
另外,不要忘记每隔一段时间在桌面上运行VACUUM,因为你的用例涉及很多DELETE和UPDATE。
有关其他信息,请参阅this。