У меня есть целевая таблица и несколько таблиц приращений в Hive. Я должен добавить таблицы incrementl к цели и добавить new_id для каждой строки. Если old_id равен, я должен обновить имя, и process_date, но new_id должен быть из предыдущей строки. Не могли бы вы помочь мне?
create table target (
id string,
new_id string,
name string,
process_date string );
create table increment1 (
id string,
name string,
process_date string );
create table increment2 like increment1;
insert into table increment1 values
('1', 'Apple', '2020-03-12'),
('3', 'Kiwi', '2020-03-12');
insert into table increment2 values
('3', 'Avocado', '2020-03-13'),
('4', 'Blackberry', '2020-03-12');
Я пытался добавить с помощью сценария:
with a as (
select coalesce(i.id, t.id) as id,
coalesce(i.nk, t.new_id) as new_id,
coalesce(i.name, t.name) as name,
coalesce(i.process_date, t.process_date) as process_date
from target t
full join (
select id,
reflect("java.util.UUID", "randomUUID") as nk,
name,
process_date
from increment1 -- increment2
) i on t.id = i.id
)
from a
insert overwrite table target
select *;
После первой вставки я получил следующие данные в цель:
1 89296ec9-cc0f-4f50-a3dc-22cdaa61f707 Apple 2020-03-12
2 5cd1a5f7-7f86-4daa-8b68-1db5a33a14f8 Orange 2020-03-12
3 2513bd6d-1947-4b41-a033-58ec25c78313 Kiwi 2020-03-12
И после второй Я получил следующие данные в target:
1 89296ec9-cc0f-4f50-a3dc-22cdaa61f707 Apple 2020-03-12
2 5cd1a5f7-7f86-4daa-8b68-1db5a33a14f8 Orange 2020-03-12
3 df683397-c02e-4e6f-a09a-ad2d95f6b797 Avocado 2020-03-13
4 854df396-b345-499b-aa9b-6a6b0b84a92f Blackberry 2020-03-12
И new_id был изменен для строки с id = 3. Как оставить это старым?
3 2513bd6d-1947-4b41-a033-58ec25c78313 Avocado 2020-03-13