verificar eliminar actualizar actualizaciones java hadoop hive nosql

java - eliminar - Colmena: la mejor manera de hacer actualizaciones incrementales en una tabla principal



verificar java (1)

Así que tengo una tabla principal en Hive, almacenará todos mis datos.

Quiero poder cargar una actualización de datos incremental cada mes con una gran cantidad de datos, un par de miles de millones de filas. Habrá nuevos datos, así como entradas actualizadas.

¿Cuál es la mejor manera de abordar esto? Sé que Hive se actualizó recientemente y admite la actualización / inserción / eliminación.

Lo que he estado pensando es encontrar de alguna manera las entradas que se actualizarán y eliminarlas de la tabla principal y luego simplemente insertar la nueva actualización incremental. Sin embargo, después de intentar esto, las inserciones son muy rápidas, pero las eliminaciones son muy lentas.

La otra forma es hacer algo usando la instrucción de actualización para que coincida con los valores clave de la tabla principal y la actualización incremental y actualizar sus campos. No he probado esto todavía. Esto también suena dolorosamente lento ya que Hive tendría que actualizar cada entrada 1 por 1.

¿Alguien tiene alguna idea sobre cómo hacer esto de la manera más eficiente y efectiva? Soy bastante nuevo en Hive y en las bases de datos en general.


Si no puede actualizar en modo ACID usando MERGE entonces es posible actualizar usando FULL OUTER JOIN. Para encontrar todas las entradas que se actualizarán, debe unir los datos de incremento con los datos antiguos:

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);

Es posible optimizar esto restringiendo las particiones en target_data que se sobrescribirán y unirán.

Además, si desea actualizar todas las columnas con datos nuevos, puede aplicar esta solución con UNION ALL+row_number() : https://.com/a/44755825/2700344