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

本文探讨了在Hive中使用制表符作为字段分隔符时遇到的问题,特别是当从Windows环境中创建并上传文件到HDFS时数据出现NULL的情况。文章详细介绍了如何正确地在Linux环境下使用制表符,并提供了具体的解决步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

 

 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

第一片心意

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值