Hive: Melhor maneira de fazer atualizações incremetais em uma tabela principal

Então eu tenho uma tabela principal no Hive, ele irá armazenar todos os meus dados.

Eu quero ser capaz de carregar uma atualização de dados incremental sobre todos os meses com uma grande quantidade de dados em bilhões de linhas. Haverá novos dados, bem como inputs atualizadas.

Qual é a melhor maneira de abordar isso? Eu sei que o Hive atualizou recentemente e suporta update / insert / delete.

O que eu tenho pensado é de alguma forma encontrar as inputs que serão atualizadas e removê-los da tabela principal e, em seguida, basta inserir a nova atualização incremental. No entanto, depois de tentar isso, as inserções são muito rápidas, mas as exclusões são muito lentas.

A outra maneira é fazer algo usando a instrução update para corresponder aos valores da chave da tabela principal e da atualização incremental e atualizar seus campos. Eu não tentei isso ainda. Isso também parece dolorosamente lento, já que o Hive teria que atualizar cada input 1 por 1.

Alguém tem alguma idéia de como fazer isso de forma mais eficiente e eficaz? Sou bem novo no Hive e nos bancos de dados em geral.

Se você não pode atualizar no modo ACID usando MERGE então é possível atualizar usando FULL OUTER JOIN. Para encontrar todas as inputs que serão atualizadas, você precisa juntar dados de incremento com dados antigos:

 insert overwrite target_data [partition() if applicable] SELECT --select new if exists, old if not exists case when i.PK is not null then i.PK else t.PK end as PK, case when i.PK is not null then i.COL1 else t.COL1 end as COL1, ... case when i.PK is not null then i.COL_n else t.COL_n end as COL_n FROM target_data t --restrict partitions if applicable FULL JOIN increment_data i on (t.PK=i.PK); 

É possível otimizar isso restringindo partições em target_data que serão sobrescritas e unidas.

Além disso, se você quiser atualizar todas as colunas com novos dados, poderá aplicar essa solução com UNION ALL+row_number() : https://stackoverflow.com/a/44755825/2700344