GP通过外部表装载数据时遇到ERROR:extra data after last expected column解决方法

一般通过hive -e导出文本时,我都习惯把比较容易出错的String类型字段做一次regexp_replace()处理,

因为如果字段里面含有制表符,那是一件很坑很坑的事。

hive -e "select regexp_replace(String_Col1,'\t',''),Date_Col2,Integer_Col3 ... from hivedb.export_table" 
| sed 's/\t/\x01/g;s/\\/\\\\/g;s/\x00//g'  
>.../export_table.txt
GP中新建外部表,根据之前把\t替换掉的分隔符x01来分隔,屡试不爽,成功率99.99%

drop external table if exists product_ext.export_table_ext;
create external table product_ext.export_table_ext(
String_Col1 varchar(1000),
Date_Col2 date,
Integer_Col3 integer,
...
)
LOCATION (
'gpfdist://xxx.xxx.xxx.xxx:port/.../export_table.txt'
)FORMAT 'TEXT' (DELIMITER E'\x01'); --irview_vt
即使sed 's/\t/\x01/g;s/\\/\\\\/g;s/\x00//g'处理过,分隔符按照\x01处理,今天还是遇到了0.01%的失败,下面是解决方法:

根据错误信息,定位到含有出错字符串的行,备份到一个临时文件,实际上也就发现了一行有错误,没办法,只能查找删除它

more rid_mac_201735to38w.txt | grep 'jQTIJWkiyytg97PCjh5U' > rid_mac_falsedata.txt
把包含错误(也就是通过外部表映射到内部表出错)信息的行删除掉
sed -i '/jQTIJWkiyytg97PCjh5U/d' rid_mac_201735to38w.txt
此时,就能正常插入了

Query returned successfully: 302060132 rows affected, 26.6 secs execution time.

附.

sed命令_Linux sed 命令用法详解


  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值