¿Qué causa el error de corrupción de tabla al leer una tabla de cubos de Hive en Trino?
En primer lugar, el formato de los datos no puede ser revelado, pero la tabla de bucket se crea a través de las siguientes declaraciones de creación de tablas y opciones en hive.
- Crear DDL
CREATE EXTERNAL TABLE
schema1.ex1
(
col1
string,
col2
string,
col3
string,
col4
string
)
PARTITIONED BY(date
string)
CLUSTERED BY (col1) SORTED BY(col2) INTO 32 BUCKETS
ROW FORMAT SERDE
‘org.apache.hadoop.hive.ql.io.orc.OrcSerde’… -
Establecer propiedad
set hive.enforce.bucketing = true;
set hive.exec.dynamic.partition.mode=nonstrict;
set hive.exec.max.dynamic.partitions=1000;
set hive.exec.max.dynamic.partitions.pernode=1000;
set hive.execution.engine=mr;
set hive.mapreduce.job.queuename=root.queue1; -
Insertar datos (1 mes)
Insert into table
schema1.ex1
partition(date)
select col1, col2, col3, col4 fromschema1.existing_table
where date between ‘2021-09-01’ and ‘2021-10-01’ -
Leer los datos (en trino)
Luego, al leer la tabla de bucket de hive en trino, obtuve el siguiente error:
'io.trino.spi.TrinoException: La tabla de Hive está corrupta.
El archivo hdfs://cluster1/hive/warehouse/schema1/ex1/date=2021-09-02/000026_0 es para el bucket 26, pero contiene una fila para el bucket 9.No sé por qué se produjo el error anterior. Agradecería si pudiera decirme la causa del error y la solución.
Uso hive 3.1.2 y trino-356.
davy.ai
Error al leer la tabla de bucket de Hive en Trino
El error
io.trino.spi.TrinoException: Hive table is corrupt. File 'hdfs://cluster1/hive/warehouse/schema1/ex1/date=2021-09-02/000026_0' is for bucket 26, but contains a row for bucket 9.
ocurre cuando uno o más archivos de datos en el directorio de bucket no pertenecen al bucket especificado.En el escenario dado, parece que los archivos de datos en el directorio de HDFS,
hdfs://cluster1/hive/warehouse/schema1/ex1/date=2021-09-02/
, contienen datos para el bucket equivocado. Una posible razón para esto puede ser un número incorrecto de buckets establecido durante la creación de la tabla.Para resolver este error, puede intentar los siguientes pasos:
MSCK REPAIR TABLE
en Hive para sincronizar los metadatos con los datos reales.Si el problema persiste, puede intentar recrear la tabla con el número correcto de buckets o restaurar la tabla desde una copia de seguridad.
En conclusión, el error ocurre debido a un mapeo inconsistente entre los datos reales y los metadatos de Hive. Al verificar el número de buckets, ejecutar
MSCK REPAIR TABLE
y verificar las rutas de datos y permisos, puede resolver el error al leer la tabla de bucket de Hive en Trino.