模拟生产环境下数据格式,再现异常情景:
 

Notepad++怎样输入字符[NUL]?

安装 Hex-Editor 插件:

HexEditor插件用于在notepad++中查看16进制文件,只需要将此dll放入notepad++安装目录下plugins文件夹下,重启notepad++即可。

使用方法: 可以切换到Hex模式,输入00,再切换回来。
(使用notepad++打开16进制文件,然后单击菜单栏的‘H’按钮,即可转换,如果想转回来,再按一次‘H’按钮)
问题描述:
在文本文件中,有时候会包含一些空字符或^@:
源数据在windows平台上Notepad++打开情形如下:
源数据在Linux Centos6.5平台上vim打开情形如下:
 
在使用Tunnel将生产环境下的文本数据上传到ODPS表过程中,由于源数据某些字段为NUL或^@,报错无法正确读取,异常是:导入数据列与目标表中列不匹配(not match).

问题原因:
可能是由于生产环境下业务需要,无效数据打上NUL字符或^@标记。
 
解决思路:
想办法把源数据中存在NUL或^@过滤或替换成空值。
 

具体解决方案如下:



字符在Linux平台上用vim编辑器打开后显示^@,用sed命令将^@替换成空
 
(sed命令组合很强大,要注意备份文件)
 

sed 's/[\x00]//g' test.txt > test.txt.bak

 
其中\x00表示二位十六进制
如果不想备份直接替换加上参数-i
 

sed -i 's/[\x00]//g' test.txt(-i选项:直接作用源文件,源文件将被修改)

替换后效果截图如下:

 

使用tunnel遇到空数据问题(建立测试数据):

在一行中若有两个逗号,表明在中间有一个缺失值,test.txt文本测试数据如下:
201207092314,,rubbyhao
201207092313,,babyliy
结论:对于文本文件中''导入到ODPS表中默认插入式null值
 
补充一个知识点:
find . -type f -name 文件名 -exec ./changerepository.sh {} /;

最新文章

  1. NOIP 考前 计算几何练习
  2. 自己yy的fulkson最大流算法
  3. 201453408刘昊阳 《Java程序设计》第5周学习总结
  4. django中的filter和get的区别 (MultipleObjectsReturned: get() returned more than one Publisher --)(DoesNotExist: Publisher matching query does not exist.)
  5. [Effective C++ --019]设计class犹如设计type
  6. BZOJ_1588_&_Codevs_1296_[HNOI2002]_营业额统计(平衡树/set)
  7. Unix/Linux环境C编程入门教程(9) unbntu CCPP开发环境搭建
  8. Sicily-1009 梅森素数
  9. 乞讨N!到底有多少0
  10. ClickHouse 快速入门
  11. 调整分区大小(ext2\ext3\ext4)
  12. CSS学习笔记05 display属性
  13. iOS开发--XMPPFramework--环境的配置(一)
  14. 原生js添加博客点击鼠标出小心心效果~~
  15. Linux epoll机制
  16. 如何判断ACCESS数据库有无密码
  17. 使用gitbook plugin
  18. HanLP 配置与使用
  19. springboot添加fluent日志记录
  20. C++ UTF8和UTF16互转代码

热门文章

  1. ASP.NET Core MVC如何上传文件及处理大文件上传
  2. STM32之系统时钟
  3. STM32之FSMC
  4. 过滤器Filter在配置文件中不起作用
  5. WebGL学习笔记(1)
  6. CentOS6.5 虚拟机 磁盘扩容
  7. Jquery中菜单的展开和折叠
  8. Canvas状态的保存与恢复
  9. Opportunity Helper
  10. 中国软件大会上大快搜索入选中国数字化转型TOP100服务商