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识别的,可是现在就不行了,不知道为啥……

猜你喜欢

转载自blog.csdn.net/u012443641/article/details/80021226
今日推荐