hive使用中踩的一些坑

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/somTian/article/details/74010429

默认分隔符问题

问题描述:

将hive中表A的内容查询出来存放到另外表B时,发现字段错位,有些字段的内容分成了几部分存在后面的字段中去

原因

原因是hive默认的分隔符为“/u0001”,而表A中有一个字段的内容中间有“/u0001”,因此导致了问题的出现

解决方法

修改了表B的默认分隔符:

CREATE TABLE b row format delimited fields terminated by '\t' as 
SELECT * FROM a limit 100;

彻底解决:
或者建表时将表存储格式改成ORC,ORC格式不需要分隔符,彻底解决问题

CREATE TABLE b row format delimited fields terminated by '\t' stored as orc as 
SELECT * FROM a limit 100;

hive中表的存储格式

  • textfile

Hive的默认存储格式
存储方式:行存储
磁盘开销大 数据解析开销大
压缩的text文件 hive无法进行合并和拆分

  • SequenceFile

二进制文件以key,value的形式序列化到文件中
存储方式:行存储
可分割 压缩
一般选择block压缩
优势是文件和Hadoop api中的mapfile是相互兼容的

  • rcfile

存储方式:数据按行分块 每块按照列存储
压缩快 快速列存取
读记录尽量涉及到的block最少
读取需要的列只需要读取每个row group 的头部定义。
读取全量数据的操作 性能可能比sequencefile没有明显的优势

  • orc

存储方式:数据按行分块 每块按照列存储
压缩快 快速列存取
效率比rcfile高,是rcfile的改良版本

  • 自定义格式

用户可以通过实现inputformat和 outputformat来自定义输入输出格式

猜你喜欢

转载自blog.csdn.net/somTian/article/details/74010429
今日推荐