当前位置:   article > 正文

hive建表指定字段分隔符为制表符,之后上传文件,文件内容未被hive表正确识别问题_hive制表符

hive制表符

        不知道大家有没有遇到过这个问题:

        hive建表,指定字段分隔符为制表符’\t’,然后在windows上按照hive表格式写好的文件,上传到linux服务器,之后利用hadoop fs -put命令将文件上传至hdfs,之后去hive表中查询数据,发现全部都是NULL!喵喵喵???

    直接上图:

        1. 建表:

             

        2. 准备数据(在linux下直接vim创建文件,然后输入内容),下面是显示的文件:

             

        3. 将数据上传到hdfs上:

             

        4. hive client窗口中查询数据:

             

    喵喵喵???Execuse me ???

            我是直接在linux系统下通过vim创建的文件,然后输入的内容,制表符 \t也是直接摁的键盘上的 Tab 啊!我擦嘞,为啥hive就不认这个 ‘\t’ 呢?

    我一直以为,只要是所有的操作都在linux系统下执行,就会被linux完全认同的,后来我通过一些方法校验了之后,我发现自己太年轻了……

    好了,不扯皮了,我下面列出我的校验过程吧:

        1. 既然hive表不认识我编写的文件中的 \t 制表符,也就是说我在vim 窗口下直接输入制表符(摁键盘上的Tab键是有问题的),那我就使用 \t 符号吧:

             

        2. 使用cat -A命令分别查看temp1.txt文件和test.txt文件中内容的区别:

             

    咦,这还真是不同哈!!!我的天呐~

    看来在vim窗口直接输入制表符和将 \t 输入到文件中,最后文件中的保存方式是不一样的,下面是ASCII码表中对制表符的说明:

                 

    很奇怪吧,我没搞懂……

        3. test.txt文件上传到hdfs,并查询数据:

             

             

             

        搞定!!!

    现在知道原因了,程序是可以向文件中输入 \t 的,但是如果我就是自己的数据文件,自己要输入 \t 的话,那可怎么办呢?

    下面是我从网上查的:

        1. vim编辑窗口,先执行命令:set list(命令意思自己查)

             

        2. Ctrl+V,然后点击Tab键:

             

    大家可以看出来了吧,出现了 ^I 符号,这个才能被hive识别为 \t 键。

            之后再输入自己的内容即可。

    另外呢,我记得我之前有时候在Windows文本编辑器上直接编辑时,摁 Tab 键直接输入的制表符,上传到linux,再到hdfs,是可以直接被hive识别的,可是现在就不行了,不知道为啥……

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/562590
推荐阅读
相关标签
  

闽ICP备14008679号