Я не уверен, что это решит вашу проблему, но я думаю, что вам нужна такая логика:
select gr.values, gr.type
coalesce(max_key, 0) + row_number() over (partition by gr.type order by gr.values) as key,
gr.event_date
from gaid_raw gr left join
(select type, max(key) as max_key
from existing_key_table
group by 1
) e
on e.type = gr.type
where not exists (select 1
from existing_key_table e
where e.type = gr.type and e.values = gr.values
);
Для нераспознанных типов вам нужен coalesce()
во внешнем select
, а не подзапрос.
Похоже, вы также хотите назначить последовательные номера на основе типа.
Если вы все еще получаете ошибки ресурса, есть способ исправить это, но немного большенеобходима информация о данных.Однако в прошлом я использовал случайные значения для таких ключей - при условии, что упорядочение не требуется.Вероятность столкновения настолько мала, что он работал с довольно большими данными.
Теперь я бы использовал GENERATE_UUID()
для уникального идентификатора.