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

,然后在windows上按照hive表格式写好的文件,上传到linux服务器,之后利用hadoop fs -put命令将文件上传至hdfs,之后去hive表中查询数据,发现全部都是NULL!喵喵喵???

    直接上图:

        1. 建表:

             

hive 表设计 hive 制表符_hive 表设计

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

             

hive 表设计 hive 制表符_hive 表设计_02

将数据上传到hdfs上:

             

hive 表设计 hive 制表符_hive_03

在hive client窗口中查询数据:

             

hive 表设计 hive 制表符_vim_04

    喵喵喵???Execuse me ???

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

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

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

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

             

hive 表设计 hive 制表符_hive_05

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

             

hive 表设计 hive 制表符_hive 表设计_06

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

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

                 

hive 表设计 hive 制表符_数据_07

    很奇怪吧,我没搞懂……

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

             

hive 表设计 hive 制表符_vim_08

             

hive 表设计 hive 制表符_hive_09

             

hive 表设计 hive 制表符_数据_10

        搞定!!!

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

    下面是我从网上查的:

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

             

hive 表设计 hive 制表符_hive 表设计_11

,然后点击Tab键:

             

hive 表设计 hive 制表符_vim_12

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

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

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