为什么在 Amazon Athena 中查询 CSV 数据时,我会收到错误消息“HIVE_BAD_DATA: Error parsing field value '' for field X: For input string: ""”?

上次更新时间:2021 年 9 月 28 日

当我在 Amazon Athena 中查询 CSV 数据时,收到了与以下类似的错误消息:

您的查询存在以下错误:

HIVE_BAD_DATA: Error parsing field value '' for field 0: For input string: ""(HIVE 数据错误:解析字段 0 的字段值 '' 时出错:输入字符串:"")

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: b99xxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.(除非由查询限定,否则此查询将针对“默认”数据库运行。请在我们的论坛上发布此错误消息,或联系客户支持并提供查询 ID:b99xxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx。)

简短描述

此错误有多个版本。如果错误消息包含一个带有值的输入字符串值(例如,“For input string: "12312845691"”),则表示文件中的数据类型与架构中的预期数据类型不匹配。有关更多信息,请参阅为什么我的 Amazon Athena 查询失败,并显示错误“HIVE_BAD_DATA: Error parsing field value for field X: For input string: "12312845691"”?

当以下两个条件都为 true 时,将发生指明输入字符串为 null 或空的错误(“For input string: "”):

  • 您将 Athena 与 OpenCSVSerDe 一起使用,这意味着您的源数据使用双引号 (") 作为默认引号字符。
  • 源数据包含 null 值 ("") 或空单元格。

例如,以下数据将返回“Error parsing field value”错误:

"1","1","a3","a4"
"","2","a3","def"
"1","3","abc3","ab4"

解决方法

将每个列都定义为 STRING。Athena 中的解析器会根据发现的内容将 STRING 中的值解析为实际类型。这可以防止 Athena 在找到 null 值(带双引号且无空格的空字符串)或空单元格(没有值或双引号)时引发错误。有关 Athena 如何处理 CSV 文件的更多信息,请参阅用于处理 CSV 的 OpenCSVSerDe

要对具有 null 值或空值的列使用特定的数据类型,请使用 CAST 将列转换为所需的类型:

1.    创建表并将每个列定义为 STRING:

CREATE EXTERNAL TABLE myopencsvtable_example (
   col1 string,
   col2 string,
   col3 string,
   col4 string
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
   'separatorChar' = ',',
   'quoteChar' = '"',
   'escapeChar' = '\\'
   )
STORED AS TEXTFILE
LOCATION 's3://awsexamplebucket/';

2.    查询表:

select * from myopencsvtable_example

示例输出:

col1     col2    col3      col4
1    1        1       a3        a4
2             2       a3        def
3    1        3       abc3      ab4

3.    将“col1”强制转换为 INT 并打印 null 值的默认值 (""):

SELECT COALESCE(TRY(CAST(col1 AS integer)),0) as cast_column,* from myopencsvtable_example

示例输出:

cast_column    col1    col2     col3      col4
1    1              1       1        a3        a4
2    0                      2        a3        def
3    1              1       3        abc3      ab4

这篇文章对您有帮助吗?


您是否需要账单或技术支持?