¿Por qué aparece el error "HIVE_BAD_DATA: Error parsing field value '' for field X: For input string: """ when I query CSV data in Amazon Athena ("HIVE_BAD_DATA: error al analizar el valor del campo X: para la cadena de entrada """ al consultar datos CSV en Amazon Athena")?
Cuando consulto datos en Amazon Athena, aparece un error similar a uno de los siguientes: "HIVE_BAD_DATA: Error parsing field value for field X: For input string: "12312845691"" (HIVE_BAD_DATA: error al analizar el valor de campo X para la cadena de entrada: "12312845691"" o "HIVE_BAD_DATA: Error parsing column '0': target scale must be larger than source scale." (HIVE_BAD_DATA: error al analizar la columna '0': la escala de destino debe ser mayor que la escala de origen").
Descripción breve
Hay varias versiones del error HIVE_BAD_DATA. El mensaje de error puede especificar una cadena de entrada nula o vacía, como "Para la cadena de entrada: """. Para ver este tipo de mensaje de error, consulte Why do I get the error "HIVE_BAD_DATA: Error parsing field value '' for field X: For input string: """ when I query CSV data in Amazon Athena? (¿Por qué aparece el error "HIVE_BAD_DATA: Error al analizar el valor para el campo X: para la cadena de entrada: """ al consultar datos en CSV en Amazon Athena?)
Los errores que especifican una cadena de entrada con un valor se producen en una de las siguientes condiciones:
- El tipo de datos que se define en la definición de la tabla no coincide con los datos de origen reales.
- Un solo campo contiene diferentes tipos de datos, como, por ejemplo, un valor entero para un registro y un valor decimal para otro registro.
Resolución
Se recomienda usar solo un tipo de datos en una columna. De lo contrario, se podría producir un error en la consulta. Para resolver errores, asegúrese de que cada columna contenga valores del mismo tipo de datos y de que los valores estén dentro de los rangos permitidos.
Si sigue recibiendo errores, cambie el tipo de datos de la columna a un tipo de datos compatible que tenga un rango superior. Si el cambio de tipo de datos no resuelve el problema, pruebe las soluciones de los siguientes ejemplos.
Ejemplo 1
- Formato de fuente: JSON
- Problema: En el último registro, el valor de la clave de ID es "0.54". Este valor de clave es el tipo de datos DECIMAL. Para los demás registros, el valor de la clave de ID se establece en INT.
Datos de fuente:
{ "id" : 50, "name":"John" } { "id" : 51, "name":"Jane" } { "id" : 53, "name":"Jill" } { "id" : 0.54, "name":"Jill" }
Declaración del lenguaje de definición de datos (DDL):
CREATE EXTERNAL TABLE jsontest_error_hive_bad_data ( id INT, name STRING ) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' WITH SERDEPROPERTIES ( 'ignore.malformed.json' = 'true') LOCATION 's3://awsexamplebucket/jsontest_error_hive_bad_data/';
Declaración del lenguaje de manipulación de datos (DML):
SELECT * FROM jsontest_error_hive_bad_data
Error:
Your query has the following error(s): HIVE_BAD_DATA: Error parsing field value '0.54' for field 0: For input string: "0.54" This query ran against the "default" database, unless qualified by the query. Please post the error message on our forum or contact customer support with Query Id: bd50793b-94fc-42a7-b131-b7c81da273b2.
Para resolver este problema, vuelva a definir la columna ID como CADENA. El tipo de datos CADENA puede representar correctamente todos los valores de este conjunto de datos. Ejemplo:
CREATE EXTERNAL TABLE jsontest_error_hive_bad_data_correct_id_data_type ( id STRING, name STRING ) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' WITH SERDEPROPERTIES ( 'ignore.malformed.json' = 'true') LOCATION 's3://awsexamplebucket/jsontest_error_hive_bad_data/';
Declaración de DML:
SELECT * FROM jsontest_error_hive_bad_data_correct_id_data_type
También puede realizar la conversión al tipo de datos deseado. Por ejemplo, puede convertir una cadena a un entero. Sin embargo, en función de los tipos de datos desde los que realice la conversión y hacia los que realice la conversión, esto podría arrojar resultados nulos o inexactos. Los valores que no se pueden convertir se descartan. Por ejemplo, al convertir el valor de cadena "0.54" a INT se obtienen resultados nulos:
SELECT TRY_CAST(id AS INTEGER) FROM jsontest_error_hive_bad_data_correct_id_data_type
Ejemplo de salida:
Results _col0 1 50 2 51 3 53 4
La salida muestra que se descartó el valor "0.54". No se puede convertir ese valor directamente de una cadena a un entero. Para resolver este problema, use la función COALESCE (del sitio web de Presto) para convertir los valores de tipo mixto en la misma columna que la salida. A continuación, permita que la función de agregación se ejecute en la columna. Ejemplo:
SELECT COALESCE(TRY_CAST(id AS INTEGER), TRY_CAST(id AS DECIMAL(10,2))) FROM jsontest_error_hive_bad_data_correct_id_data_type
Salida:
Results _col0 1 50.00 2 51.00 3 53.00 4 0.54
Ejecute funciones agregadas:
SELECT SUM(COALESCE(TRY_CAST(id AS INTEGER), TRY_CAST(id AS DECIMAL(10,2)))) FROM jsontest_error_hive_bad_data_correct_id_data_type
Salida:
_col0 1 154.54
Ejemplo 2
- Formato de fuente: JSON
- **Problema:**La columna ID se define como INT. Athena no pudo analizar "49612833315" porque el rango de valores INT en Presto es de -2147483648 a 2147483647.
Datos de fuente:
{ "id" : 50, "name":"John" } { "id" : 51, "name":"Jane" } { "id" : 53, "name":"Jill" } { "id" : 49612833315, "name":"Jill" }
Declaración de DDL:
CREATE EXTERNAL TABLE jsontest_error_hive_bad_data_sample_2 ( id INT, name STRING ) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' WITH SERDEPROPERTIES ( 'ignore.malformed.json' = 'true') LOCATION 's3://awsexamplebucket/jsontest_error_hive_bad_data_2/';
Declaración de DML:
SELECT * FROM jsontest_error_hive_bad_data_sample_2
Error:
Your query has the following error(s): HIVE_BAD_DATA: Error parsing field value '49612833315' for field 0: For input string: "49612833315" This query ran against the "default" database, unless qualified by the query. Please post the error message on our forum or contact customer support with Query Id: 05b55fb3-481a-4012-8c0d-c27ef1ee746f.
Para resolver este problema, defina la columna ID como BIGINT, que puede leer el valor "49612833315". Para obtener más información, consulte Tipos de enteros.
Declaración de DDL modificada:
CREATE EXTERNAL TABLE jsontest_error_hive_bad_data_sample_2_corrected ( id BIGINT, name STRING ) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' WITH SERDEPROPERTIES ( 'ignore.malformed.json' = 'true') LOCATION 's3://awsexamplebucket/jsontest_error_hive_bad_data_2/';
Ejemplo 3
- Formato de fuente: JSON
- **Problema:**Los datos de entrada son DECIMAL y la columna se define como DECIMAL en la definición de la tabla. Sin embargo, la escala se define como 2 y 2 no coincide con el valor "0.000054". Para obtener más información, consulte Tipo DECIMAL o NUMERIC.
Datos de fuente:
{ "id" : 0.50, "name":"John" } { "id" : 0.51, "name":"Jane" } { "id" : 0.53, "name":"Jill" } { "id" : 0.000054, "name":"Jill" }
Declaración de DDL:
CREATE EXTERNAL TABLE jsontest_error_hive_bad_data_sample_3( id DECIMAL(10,2), name STRING ) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' WITH SERDEPROPERTIES ( 'ignore.malformed.json' = 'true') LOCATION 's3://awsexamplebucket/jsontest_error_hive_bad_data_3/';
Declaración de DML:
SELECT * FROM jsontest_error_hive_bad_data_sample_3
Error:
Your query has the following error(s): HIVE_BAD_DATA: Error parsing column '0': target scale must be larger than source scale This query ran against the "default" database, unless qualified by the query. Please post the error message on our forum or contact customer support with Query Id: 1c3c7278-7012-48bb-8642-983852aff999.
Para resolver este problema, vuelva a definir la columna con una escala que capture todos los valores de entrada. Por ejemplo, en lugar de (10,2), use (10,7).
CREATE EXTERNAL TABLE jsontest_error_hive_bad_data_sample_3_corrected( id DECIMAL(10,7), name STRING ) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' WITH SERDEPROPERTIES ( 'ignore.malformed.json' = 'true') LOCATION 's3://awsexamplebucket/jsontest_error_hive_bad_data_3/';
Vídeos relacionados

Contenido relevante
- OFICIAL DE AWSActualizada hace un año
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace un año