json - Hive 外部表排除违反数据类型的记录

标签 json hadoop hive

我在 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"}

最佳答案

您可以将 Hive 设置为容忍可配置数量的故障。

SET mapred.skip.mode.enabled = true;
SET mapred.map.max.attempts = 100; 
SET mapred.reduce.max.attempts = 100;
SET mapred.skip.map.max.skip.records = 30000;
SET mapred.skip.attempts.to.start.skipping = 1

这不是 Hive 特有的,也可以应用于普通的 MapReduce。

关于json - Hive 外部表排除违反数据类型的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30653513/

相关文章:

php - Composer 找不到composer.json

javascript - 无法将 JSON 值分配给 JS 变量

hadoop - 在 YARN 中,容器大小是如何确定的?

apache-spark - hadoop aws 版本兼容性

apache-spark - 从 Spark 删除分区

javascript - 动态命名 JSON 属性

javascript - Firebase数据库WEB获取JSON数据

mongodb - hadoop mongodb连接器构建失败

mysql - sqoop 异常,com.mysql.jdbc.exceptions.jdbc4.CommunicationsException

java - org.apache.hadoop.io.Text无法转换为org.apache.hive.hcatalog.data.HCatRecord