【发布时间】:2015-08-19 15:15:24
【问题描述】:
我在 Hive 中有一个外部表,它使用 serde 来处理 json 记录。偶尔会有一个值与表 ddl 数据类型不匹配,例如表字段定义为int,json有字符串值。在查询执行期间,由于类型不匹配,Hive 将正确地为元数据异常抛出此错误:
java.lang.RuntimeException: org.apache.hadoop.hive.ql.metadata.HiveException:
Hive Runtime Error while processing writable
有没有办法将 Hive 设置为忽略这些数据类型违规的记录?
注意 json 是有效的语法,因此设置 serde 属性如忽略格式错误的 json 是不适用的。
示例 DDL:
CREATE EXTERNAL TABLE IF NOT EXISTS test_tbl (
acd INT,
tzo INT
)
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
STORED AS TEXTFILE
;
ALTER TABLE test_tbl SET SERDEPROPERTIES ( "ignore.malformed.json" = "true");
示例数据 - TZO = alpha 记录将导致错误:
{"acd":6,"tzo":4}
{"acd":6,"tzo":7}
{"acd":6,"tzo":"alpha"}
【问题讨论】: