Cómo cambiar el tipo de datos de una tabla externa de Hive de Double a Decimal.
Estoy tratando de cambiar varios columnas en una tabla externa de HIVE de double a decimal. He eliminado, recreado la tabla, y ejecutado la instrucción msck repair
. Sin embargo, no puedo seleccionar la tabla ni desde Hive ni desde Impala, ya que devuelve estos errores:
Hive: ERROR procesando la consulta/instrucción. Código de error: 0, Estado SQL: El archivo 'hdfs://ns-bigdata/user/warehouse/fact/TEST_FACT/key=2458773/000000_0' tiene un esquema Parquet incompatible con la columna 'testing.fact_table.tot_amt'. Tipo de columna: DECIMAL(28,7), Esquema Parquet:
opcional double tot_amt [i:29 d:1 r:0]
Impala: ERROR procesando la consulta/instrucción. Código de error: 0, Estado SQL: El archivo 'hdfs://ns-bigdata/user/warehouse/fact/TEST_FACT/key=2458773/000000_0' tiene un esquema Parquet incompatible con la columna 'testing.fact_table.tot_amt'. Tipo de columna: DECIMAL(28,7), Esquema Parquet:
opcional double tot_amt [i:29 d:1 r:0]
¿Es posible cambiar el tipo de dato de double a decimal?
Además, ¿cuál es la diferencia entre eliminar+recrear la tabla y modificar la tabla?
davy.ai
Solución
Sí, es posible cambiar el tipo de dato de double a decimal.
Para alterar el tipo de dato de double a decimal, puedes utilizar la sentencia
ALTER TABLE
en Hive. Aquí tienes la sintaxis:Por ejemplo, si quieres cambiar el tipo de dato de la columna
tot_amt
de double a decimal(28,7), puedes ejecutar el siguiente comando:Después de cambiar el tipo de dato, debes asegurarte de que el esquema de tu tabla sea compatible con el archivo almacenado en HDFS.
En cuanto a la diferencia entre eliminar y volver a crear la tabla y alterar la tabla: