我想创建一个定时查询来每天更新Redshift上的现有表。
这个想法是,我想每天添加具有唯一key1和key2的事件的新行。此外,我想更新上周在value1, value2或value3中有更新的行,但是我想只在原始prod表中插入这些值时才插入这些值(因此我不能删除行并再次为key1和key2插入它们)。
我错过了正确的语法可能是因为下面的代码不工作。查询临时表工作正常。你能告诉我这里遗漏了什么吗?
红移文档示例在这里:https://docs.amazonaws.cn/en_us/redshift/latest/dg/merge-specify-a-column-list.html
create temp table [temp_table_name] as
[SELECT * FROM temp_table_name];
begin transaction;
update [prod_table_name]
set value1 = NVL(value1, temp_table_name.value1),
value2 = NVL(value2, temp_table_name.value1),
value3 = NVL(value3, temp_table_name.value1)
from [temp_table_name]
where key1 = temp_table_name.key1
and key2 = temp_table_name.key2
and key3 = temp_table_name.key3
and key4 = temp_table_name.key4;
insert into [prod_table_name]
select *
from [temp_table_name]
where value1 <> temp_table_name.value1
and value2 <> temp_table_name.value2;
end transaction;
我遇到各种各样的错误,找不到问题在哪里。
我怀疑问题出在"key1"one_answers";value1"。我认为您需要在WHERE子句中通过名称指定目标表。这样的:
where prod_table_name.key1 = temp_table_name.key1
:
where prod_table_name.value1 <> temp_table_name.value1