• Tunnel上传遇到字符[NUL]问题


    模拟生产环境下数据格式,再现异常情景:
     
    Notepad++怎样输入字符[NUL]?
    安装 Hex-Editor 插件:
    HexEditor插件用于在notepad++中查看16进制文件,只需要将此dll放入notepad++安装目录下plugins文件夹下,重启notepad++即可。 
    使用方法: 可以切换到Hex模式,输入00,再切换回来。
    (使用notepad++打开16进制文件,然后单击菜单栏的‘H’按钮,即可转换,如果想转回来,再按一次‘H’按钮)
    问题描述:
    在文本文件中,有时候会包含一些空字符98ed85a0dbba2bf7551bc05414f338196a59b17b或^@:
    源数据在windows平台上Notepad++打开情形如下
    b2f7e096efa01580b1d578b09018e4eb16a67f94
    源数据在Linux Centos6.5平台上vim打开情形如下:
    c5988a9af06de8b851b8f47813cd5eede9887abb
     
    在使用Tunnel将生产环境下的文本数据上传到ODPS表过程中,由于源数据某些字段为NUL或^@,报错无法正确读取,异常是:导入数据列与目标表中列不匹配(not match).
    da773723341ff25152f46774d617635b5eedaa7d

    问题原因:
    可能是由于生产环境下业务需要,无效数据打上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选项:直接作用源文件,源文件将被修改)

    替换后效果截图如下:
    4cf6a6d2d178483eed7e1ef0c82178207ecb2e7d
     
    使用tunnel遇到空数据问题(建立测试数据):
    在一行中若有两个逗号,表明在中间有一个缺失值,test.txt文本测试数据如下:
    201207092314,,rubbyhao
    201207092313,,babyliy
    3f52c09631a095b75fe03fa29e6dcf92a369e727
    结论:对于文本文件中''导入到ODPS表中默认插入式null值
     
    补充一个知识点:
    find . -type f -name 文件名 -exec ./changerepository.sh {} /;
  • 相关阅读:
    STM32 USB应用——VCP
    基础数据类型与字节数组相互转换 BitConvter类
    C# 16进制与字符串、字节数组之间的转换
    C语言函数手册学习
    C串口通信
    C#串口通信
    C Socket通信编程
    C SOCKET编程
    C# SOCKE通信
    socket阻塞与非阻塞,同步与异步、I/O模型
  • 原文地址:https://www.cnblogs.com/dtstack/p/10271521.html
Copyright © 2020-2023  润新知