目录

一、简介

1、hive建表时存储格式

2、五种存储格式的区别

二、实践操作

1、textfile

2、sequencefile

3、rcfile

4、orc

5、parquet

三、适用场景


一、简介

1、hive建表时存储格式

一般情况下hive在创建表时默认的存储格式是textfile,hive常用的存储格式有五种,textfile、sequencefile、rcfile、orc、parquet。

2、五种存储格式的区别

hive五种存储格式的区别
存储格式 文件存储编码格式 建表指定
textfile

将表中的数据在hdfs上以正常文本的格式存储,下载后可以直接查看。

stored as textfile

sequencefile  

将表中的数据在hdfs上以二进制格式编码,并将数据压缩,下载的数据是二进制格式,不可以直接查看,无法可视化。

stored as sequecefile
rcfile   将表中的数据在hdfs上以二进制格式编码,并且支持压缩。下载后的数据无法可视化。 stored as rcfile
orc 文件存储方式为二进制文件。orc文件格式从hive0.11版本后提供,是RcFile格式的优化版,主要在压缩编码,查询性能方面做了优化。按行组分割整个表,行组内进行列式存储。 stored as orc
parquet 文件存储方式为二进制文件。parquet基于dremel的数据模型和算法实现,列式存储。 stored as parquet

textfile利弊:

  • 基于行存,每一行就是一条记录。
  • 可以使用任意的分隔符进行分割。
  • 无压缩,造成存储空间大。

sequencefile利弊:

  • 基于行存储。
  • sequencefile存储格有压缩,存储空间小,有利于优化磁盘和I/O性能。
  • 同时支持文件切割分片,提供了三种压缩方式:none,record,block(块级别压缩效率跟高).默认是record(记录)。

rcfile利弊:

  • 行列混合的存储格式,基于列存储。
  • 因为基于列存储,列值重复多,所以压缩效率高。
  • 磁盘存储空间小,io小。

orc利弊:

  • 具有很高的压缩比,且可切分;由于压缩比高,在查询时输入的数据量小,使用的task减少,所以提升了数据查询速度和处理性能。每个task只输出单个文件,减少了namenode的负载压力。
  • 在ORC文件中会对每一个字段建立一个轻量级的索引,如:row group index、bloom filter index等,可以用于where条件过滤。
  • 查询速度比rcfile快;支持复杂的数据类型;
  • 无法可视化展示数据;读写时需要消耗额外的CPU资源用于压缩和解压缩,但消耗较少;
  • 对schema演化支持较差;

parquet利弊:

  • 具有高效压缩和编码,是使用时有更少的IO取出所需数据,速度比ORC快,其他方面类似于ORC。
  • 不支持update和ACID。
  • 不支持可视化展示数据。

二、实践操作

下图红框标出的部分是利用hadoop本身InputFormat API从不同的数据源读取数据,OutputFormat API将数据写成不同的格式。所以对于不同的数据源,不同的存储格式就需要不同对应的InputFormat和Outputformat类来实现。

1、textfile

CREATE TABLE teacher(name string,age int
)row format delimited fields terminated by ','
stored as textfile;

2、sequencefile

CREATE TABLE teacher01(name string,age int
)stored as sequencefile;

这里没有使用row format delimited fields terminated by ',',是因为没有必要,单纯的load以逗号分隔的文本进去会报错。

FAILED: SemanticException Unable to load data to destination table. Error: The file that you are trying to load does not match the file format of the destination table.

3、rcfile

CREATE TABLE teacher02(name string,age int
)stored as rcfile;

这里也没有使用row format delimited fields terminated by ',',是因为没有必要,单纯的load以逗号分隔的文本进去会报错。

4、orc

CREATE TABLE teacher03(name string,age int
)stored as orc;

这里也没有使用row format delimited fields terminated by ',',是因为没有必要,单纯的load以逗号分隔的文本进去会报错。

5、parquet

CREATE TABLE teacher04(name string,age int
)stored as parquet;

这里也没有使用row format delimited fields terminated by ',',是因为可以load以逗号分隔的文本进去。但是select 查询会报错。

hive> select * from teacher12;
OK
Failed with exception java.io.IOException:java.lang.RuntimeException: hdfs://master.com:8020/user/hive/warehouse/teacher12/teacher.txt is not a Parquet file. expected magic number at tail [80, 65, 82, 49] but found [44, 49, 52, 10]
Time taken: 0.095 seconds

三、适用场景

  • 需要查看所存储的具体数据内容的小型查询,可以采用默认文件格式textfile。
  • 不需要查看具体数据的小型查询时可使用sequencefile文件格式。
  • 当用于大数据量查询时,可以使用rcfile、orc、parquet文件格式,一般情况下推荐使用orc,若字段数较多,不涉及到更新并且需要部分列查询场景多的情况下建议使用parquet。
  • 需通过sqoop+hive与关系型数据库交互时,import和export的hive表需要使用textfile格式。如果需要操作的表不是textfile存储格式,需要先insert到textfile格式的表中再操作。

【Hive】建表时的存储格式相关推荐

  1. Hive建表时指定分隔符或使用多字符分隔

    不知道你是否会有会这样的苦恼,就是从hdfs或者file中导入数据到Hive建数仓的时候,因为数据是数据流前段的小GG用特殊符号分隔的,然后导致你导入数据时一脸蒙圈? 这篇教程可能会帮到你. 首先我们 ...

  2. Hive建表时,指定分隔符

     一.建表语句 CREATE TABLE employee (name STRING,salary FLOAT,subordinates ARRAY <STRING>,deductions ...

  3. hive建表的标准格式及其建表属性详解1

    Hive建表是学习使用hive的第一步,然后才能基于表对hive数据仓库进行操作.学习建表前,首先要知道hive表的构建属性 ,知道哪些属性是固定的,哪些属性是可以定制的等等. 一.标准hql建表语法 ...

  4. Oracle、Hive建表语句

    1.Oracle建表 drop table T_PSSC_TRAN_PORTRAIT_CENTER; create table T_PSSC_TRAN_PORTRAIT_CENTER ( OBJ_ID ...

  5. 大数据单机学习环境搭建(5)Hive建表DDL详解

    专题:大数据单机学习环境搭建和使用 1. Hive建表简单示例 1.1.Hive建表语句 1.2.表详细信息 1.3.数据展示 2. Hive建表语法详解 3.拓展1:复杂数据分割 4.拓展2:事务表 ...

  6. Hive建表及插入数据浅析

    通过已有表创建新表(仅创建表结构) create table new_table like old_table; 通过已有表创建新表,并复制已有表数据 create table new_table a ...

  7. mysql workbench建表时PK,NN,UQ,BIN,UN,ZF,AI

    随笔 - 220, 文章 - 1, 评论 - 32, 引用 - 0 mysql workbench建表时PK,NN,UQ,BIN,UN,ZF,AI [intrinsic column flags] ( ...

  8. 建表时数据库建议使用 utf8mb4字符集

    之前一直认为,utf8mb4相比utf8最大的作用就是能存储Emoji表情,直到遇到了内容中带有[]的文章需要入库的时候. 普及两个知识 UTF-8字符集编码有可能是两个.三个.四个字节.但MySQL ...

  9. MySQL工作笔记-建表时为Float型数据确定精度,查询时精度显示,多列之和查询

    目录 建表时设置精度 查询时设置精度 查询多列之和 建表时设置精度 首先是建表时为float类型设置精度: SQL代码如下: CREATE TABLE `testtable` (`id` int(11 ...

最新文章

  1. windows server 2008 R2 初试Hyper-V(一)
  2. js 设计模式—工厂模式
  3. python就业方向选择-学完Python,你有哪些就业方向可以选?
  4. hive能替代oracle_173-Hive
  5. if you want to reserve a place at the college library
  6. GraphicsStatsService之1-dump数据的实现
  7. 基于多进程和基于多线程服务器的优缺点及nginx服务器的启动过程
  8. python命令行参数作用_Python命令行参数解析模块argparse
  9. 冬季小学期 NIIT公司 web前端培训 CSS
  10. nodebb使用mysql_centos7.6安装nodebb v1.14.3(2020年)
  11. AndroidStudio安卓原生开发_Activity的启动方法_隐式启动2种方法_activity关闭---Android原生开发工作笔记83
  12. 计算机游戏攻略67,保卫萝卜2 67攻略水晶萝卜详解
  13. Atitit 网络存储协议 远程存储协议 目录 1. Email类 1 1.1. Eas Exchange Activesync介绍 1 1.2. Imap pop3 1 2. 网盘类远程存储web
  14. oracle tsm rman,TSM下oracle备份
  15. 《线性代数及其应用》看完
  16. Java基础知识面试复习大纲
  17. 计算机科学之父——Alan Turing及相关电影介绍
  18. 【大数据】Linkis如何安装部署,及一些常见问题
  19. 你需要偷偷珍藏的java兼职平台
  20. 图片大小如何调整到10k?图片压缩到指定大小怎么弄?

热门文章

  1. 图片怎么转jpg?教你两个超简单的图片转jpg格式的方法
  2. 孤独后厂村,码农的故乡:30万互联网人跳不出的中国硅谷
  3. (力扣)LeetCode19. 删除链表的倒数第 N 个结点(C++/C语言)
  4. android逆向开发工程师需要掌握的技能--实习一个月总结报告
  5. 485通信c语言编程linux,Rs485通信单片机C程序
  6. 超微A+ Server 4124GS-TNR做主板集成RAID
  7. 水果店圈子:水果店怎么入门,水果店工作注意什么
  8. 【必看】企业网站IPv6改造升级方案---中科三方
  9. skynet设计原理和使用
  10. io vivado 怎么查看ps_基于Vivado的嵌入式开发 ——PS+PL实践