-
Descripción del problema:
Una tabla externa table_1 creada por Hive tiene una partición almacenada en incrementos de días, dt = '2020-04-01'
Cambiamos el nombre de la partición ALTER TABLE a través del comando Hive a dt = '2020-03-31', también queremos cambiar el directorio HDFS correspondiente a dt = '2020-03-31'
¿Pero descubrió que los datos de la consulta están vacíos? ? ?
-
Razón:
Debido a que es una tabla externa, los registros de metadatos y datos de Hive se administran por separado, y el almacenamiento de datos real de las tablas depende de la administración de HDFS (NameNode).
Aquí usamos ALTER TABLE para modificar la partición de la tabla externa, el directorio dt = '2020-04-01' del enlace suave HDFS no ha cambiado, y podemos consultar los datos normalmente.
Cuando cambiamos el nombre del directorio HDFS y el nombre de partición de la tabla dt = '2020-03-31' para que sea coherente, de hecho, cuando se ejecuta SQL, también buscará los metadatos de Hive (el registro aún es dt = '2020-03-31 'Sí)
Pero el dt = '2020-03-31' de esta sección de enlace suave y el dt = '2020-04-01' de HDFS no son válidos, y el dt = '2020-04-01' no se pudo encontrar. Por lo tanto, no se pueden consultar los datos. Cuando usamos Hive -e para ejecutar, también veremos el informe de error correspondiente:
Entonces, para permitir que nuestra partición modificada cargue datos correctamente, eliminamos la partición original dt = '2020-03-31, creamos un nuevo dt =' 2020-03-31, y en el paso anterior, tenemos Cambie dt = '2020-04-01' del directorio HDFS a dt = '2020-03-31'. Debido a las características de la tabla externa, especificamos manualmente el directorio de la tabla al crear la tabla, por lo que el enlace suave se configura como dive = '2020-03-31 para Hive y dt =' 2020-03-31 para HDFS. En este momento, el directorio es coherente, se pueden consultar los datos y se resuelve el problema.