(отправка от имени пользователя Snowflake)
В таблицу загружен неверный дубликат идентификатора, и нам нужно исправить его. Правила обновления идентификатора: когда разница во времени превышает 30 минут, идентификатор должен быть новым / уникальным. Я написал запрос, чтобы отфильтровать это, однако обновление не происходит
Ниже приведен запрос, чтобы найти идентификаторы для обновления. Для тестирования я использовал определенный идентификатор.
select id,
BEFORE_TIME,
TIMESTAMP,
datediff(minute,BEFORE_TIME,TIMESTAMP) time_diff,
row_number() over (PARTITION BY id ORDER BY TIMESTAMP) rowno,
concat(id,to_varchar(rowno)) newid from
(SELECT id,
TIMESTAMP,
LAG(TIMESTAMP_EST) OVER (PARTITION BY visit_id ORDER BY TIMESTAMP) as BEFORE_TIME
FROM table_name t
where id = 'XX1X2375'
order by TIMESTAMP_EST)
where BEFORE_TIME is not NULL and time_diff > 30
order by time_diff desc
;
И я мог видеть 12 записей с одинаковым идентификатором и разницей во времени более 30. Однако, когда я пытаюсь обновить. запрос выполнен успешно, но ничего не обновляется.
update table_name t
set t.id = c.newid
from
(select id ,
BEFORE_TIME,
TIMESTAMP,
datediff(minute,BEFORE_TIME,TIMESTAMP) time_diff,
row_number() over (PARTITION BY id ORDER BY TIMESTAMP) rowno,
concat(id,to_varchar(rowno)) newid from
(SELECT id,
TIMESTAMP,
LAG(TIMESTAMP) OVER (PARTITION BY visit_id ORDER BY TIMESTAMP) as BEFORE_TIME
FROM table_name t
where id = 'XX1X2375'
order by TIMESTAMP_EST)
where BEFORE_TIME is not NULL and time_diff > 30
order by time_diff desc) c
where t.id = c.id
and t.timestamp = c.BEFORE_TIME
;
обратите внимание:
Я даже создал временную таблицу t1 из вышеуказанного подзапроса.
И я вижузаписи в таблице t1.
при выполнении select с объединением с основной таблицей я даже вижу в записи в основной таблице.
Но опять же, когда я пытаюсь обновить с использованием нового t1. обновляется только нулевая запись.
Я даже попытался объединить, но та же проблема.
MERGE INTO snowplow_data_subset_temp t
USING t1
ON (trim(t.visit_id) = trim(t1.visit_id) and trim(t1.BEFORE_DATE) = trim(t.TIMESTAMP_EST))
WHEN MATCHED THEN UPDATE SET visit_number = newid;
Любые рекомендации, идеи или обходные пути? Спасибо!