hadoop - particiones - Agregue una columna en una tabla en HIVE QL
eliminar tabla en hive (1)
No puede agregar una columna con un valor predeterminado en Hive . Tiene la sintaxis correcta para agregar la columna ALTER TABLE test1 ADD COLUMNS (access_count1 int);
, solo necesita deshacerse de la default sum(max_count)
. No se realizarán cambios en los archivos que respaldan su tabla como resultado de agregar la columna. Hive maneja los datos "perdidos" al interpretar NULL
como el valor de cada celda en esa columna .
Entonces ahora tiene el problema de necesitar completar la columna. Desafortunadamente en Hive, esencialmente necesitas volver a escribir la tabla completa, esta vez con la columna llena. Puede ser más fácil volver a ejecutar su consulta original con la nueva columna. O puede agregar la columna a la tabla que tiene ahora, luego seleccionar todas sus columnas más el valor de la nueva columna.
También tiene la opción de COALESCE
siempre la columna a su valor predeterminado deseado y dejarlo NULL
por el momento. Esta opción falla cuando desea que NULL
tenga un significado distinto del predeterminado que desea. También requiere que dependas de recordar siempre a COALESCE
.
Si tiene mucha confianza en sus habilidades para manejar los archivos que respaldan Hive, también puede modificarlos directamente para agregar su valor predeterminado. En general, recomendaría no hacerlo porque la mayoría de las veces será más lento y más peligroso. Puede haber algún caso en el que tenga sentido, así que he incluido esta opción para que esté completo.
Estoy escribiendo un código en HIVE para crear una tabla que consta de 1300 filas y 6 columnas:
create table test1 as SELECT cd_screen_function,
SUM(access_count) AS max_count,
MIN(response_time_min) as response_time_min,
AVG(response_time_avg) as response_time_avg,
MAX(response_time_max) as response_time_max,
SUM(response_time_tot) as response_time_tot,
COUNT(*) as row_count
FROM sheet WHERE ts_update BETWEEN unix_timestamp(''2012-11-01 00:00:00'') AND
unix_timestamp(''2012-11-30 00:00:00'') and cd_office = ''016''
GROUP BY cd_screen_function ORDER BY max_count DESC, cd_screen_function;
Ahora quiero agregar otra columna como access_count1
que consiste en un valor único para las 1300 filas y el valor será sum(max_count)
. max_count es una columna en mi tabla existente. ¿Como puedo hacer eso? Estoy tratando de alterar la tabla con este código ALTER TABLE test1 ADD COLUMNS (access_count1 int) set default sum(max_count);