【Hive】建表时的存储格式
目录
一、简介
1、hive建表时存储格式
2、五种存储格式的区别
二、实践操作
1、textfile
2、sequencefile
3、rcfile
4、orc
5、parquet
三、适用场景
一、简介
1、hive建表时存储格式
一般情况下hive在创建表时默认的存储格式是textfile,hive常用的存储格式有五种,textfile、sequencefile、rcfile、orc、parquet。
2、五种存储格式的区别
存储格式 | 文件存储编码格式 | 建表指定 |
---|---|---|
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】建表时的存储格式相关推荐
- Hive建表时指定分隔符或使用多字符分隔
不知道你是否会有会这样的苦恼,就是从hdfs或者file中导入数据到Hive建数仓的时候,因为数据是数据流前段的小GG用特殊符号分隔的,然后导致你导入数据时一脸蒙圈? 这篇教程可能会帮到你. 首先我们 ...
- Hive建表时,指定分隔符
一.建表语句 CREATE TABLE employee (name STRING,salary FLOAT,subordinates ARRAY <STRING>,deductions ...
- hive建表的标准格式及其建表属性详解1
Hive建表是学习使用hive的第一步,然后才能基于表对hive数据仓库进行操作.学习建表前,首先要知道hive表的构建属性 ,知道哪些属性是固定的,哪些属性是可以定制的等等. 一.标准hql建表语法 ...
- Oracle、Hive建表语句
1.Oracle建表 drop table T_PSSC_TRAN_PORTRAIT_CENTER; create table T_PSSC_TRAN_PORTRAIT_CENTER ( OBJ_ID ...
- 大数据单机学习环境搭建(5)Hive建表DDL详解
专题:大数据单机学习环境搭建和使用 1. Hive建表简单示例 1.1.Hive建表语句 1.2.表详细信息 1.3.数据展示 2. Hive建表语法详解 3.拓展1:复杂数据分割 4.拓展2:事务表 ...
- Hive建表及插入数据浅析
通过已有表创建新表(仅创建表结构) create table new_table like old_table; 通过已有表创建新表,并复制已有表数据 create table new_table a ...
- 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] ( ...
- 建表时数据库建议使用 utf8mb4字符集
之前一直认为,utf8mb4相比utf8最大的作用就是能存储Emoji表情,直到遇到了内容中带有[]的文章需要入库的时候. 普及两个知识 UTF-8字符集编码有可能是两个.三个.四个字节.但MySQL ...
- MySQL工作笔记-建表时为Float型数据确定精度,查询时精度显示,多列之和查询
目录 建表时设置精度 查询时设置精度 查询多列之和 建表时设置精度 首先是建表时为float类型设置精度: SQL代码如下: CREATE TABLE `testtable` (`id` int(11 ...
最新文章
- windows server 2008 R2 初试Hyper-V(一)
- js 设计模式—工厂模式
- python就业方向选择-学完Python,你有哪些就业方向可以选?
- hive能替代oracle_173-Hive
- if you want to reserve a place at the college library
- GraphicsStatsService之1-dump数据的实现
- 基于多进程和基于多线程服务器的优缺点及nginx服务器的启动过程
- python命令行参数作用_Python命令行参数解析模块argparse
- 冬季小学期 NIIT公司 web前端培训 CSS
- nodebb使用mysql_centos7.6安装nodebb v1.14.3(2020年)
- AndroidStudio安卓原生开发_Activity的启动方法_隐式启动2种方法_activity关闭---Android原生开发工作笔记83
- 计算机游戏攻略67,保卫萝卜2 67攻略水晶萝卜详解
- Atitit 网络存储协议 远程存储协议 目录 1. Email类	1 1.1. Eas Exchange Activesync介绍	1 1.2. Imap pop3	1 2. 网盘类远程存储web
- oracle tsm rman,TSM下oracle备份
- 《线性代数及其应用》看完
- Java基础知识面试复习大纲
- 计算机科学之父——Alan Turing及相关电影介绍
- 【大数据】Linkis如何安装部署,及一些常见问题
- 你需要偷偷珍藏的java兼职平台
- 图片大小如何调整到10k?图片压缩到指定大小怎么弄?
热门文章
- 图片怎么转jpg?教你两个超简单的图片转jpg格式的方法
- 孤独后厂村,码农的故乡:30万互联网人跳不出的中国硅谷
- (力扣)LeetCode19. 删除链表的倒数第 N 个结点(C++/C语言)
- android逆向开发工程师需要掌握的技能--实习一个月总结报告
- 485通信c语言编程linux,Rs485通信单片机C程序
- 超微A+ Server 4124GS-TNR做主板集成RAID
- 水果店圈子:水果店怎么入门,水果店工作注意什么
- 【必看】企业网站IPv6改造升级方案---中科三方
- skynet设计原理和使用
- io vivado 怎么查看ps_基于Vivado的嵌入式开发 ——PS+PL实践