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 命令用法詳解

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM