Hive 2.3.8插入临时ORC表数据异常问题求助
Hive 2.3.8插入S3源表数据到ORC临时表出现额外行问题
问题描述
使用Hive 2.3.8版本,现有一张直接读取AWS S3存储位置的外部表。将该表数据插入临时ORC表时,目标表会出现额外行,但直接查询原S3表结果完全正常。操作无表关联逻辑,直接查询原表效率极低(数据需多次复用,导致查询周转时间过长)。即使创建全新命名的ORC表执行插入操作,问题依然存在。
数据示例
原S3表数据dump:
col1 col2 col3 a 1st jan 1st jan a 1st jan 2nd jan a 1st jan 3rd jan
插入ORC表后的数据:
col1 col2 col3 a 1st jan 1st jan a 1st jan 2nd jan a 1st jan 3rd jan a 1st jan 4th jan a 1st jan 5th jan
直接查询原S3表的结果:
col1 col2 col3 a 1st jan 1st jan a 1st jan 2nd jan a 1st jan 3rd jan
排查与解决方向
- 检查S3源数据完整性
直接通过AWS CLI查看S3上的源文件内容,确认是否存在损坏、重复或隐藏的额外行(比如文件末尾空行、不可见字符):aws s3 cp s3://your-bucket/path/to/source-file - | cat -A - 验证原表的SerDe配置
检查原S3表的ROW FORMAT和STORED AS设置,确保与数据实际格式匹配。例如文本格式表需正确指定分隔符:
确认DESCRIBE FORMATTED s3_source_table;FIELDS TERMINATED BY等参数与数据实际分隔符一致。 - 禁用推测执行
Hive的推测执行可能导致重复写入数据,执行插入前添加以下设置:SET mapred.reduce.tasks.speculative.execution=false; SET hive.mapred.tasks.speculative.execution=false; INSERT OVERWRITE TABLE temp_orc_table SELECT * FROM s3_source_table; - 使用CTAS语句创建ORC表
替代先建表再插入的方式,直接用CTAS创建ORC表,减少分步操作的异常风险:CREATE TABLE temp_orc_table STORED AS ORC TBLPROPERTIES ("orc.compress"="SNAPPY") AS SELECT * FROM s3_source_table; - 检查ORC表的写入逻辑
确认插入时使用INSERT OVERWRITE而非INSERT INTO,避免多次执行时追加重复数据;如果是分区表,需验证分区过滤条件是否正确。 - 升级Hive补丁
Hive 2.3.8存在部分ORC写入相关的已知bug,可尝试升级到2.3.x系列的最新补丁版本,修复潜在的重复行问题。
内容的提问来源于stack exchange,提问作者Surabhi Agrawal
相关产品推荐
相关产品推荐

