hive遍历_从Hive中的stored as file_foramt看hive调优

一、行式数据库和列式数据库的对比

1、存储比较

行式数据库存储在hdfs上式按行进行存储的,一个block存储一或多行数据。而列式数据库在hdfs上则是按照列进行存储,一个block可能有一列或多列数据。

2、压缩比较

对于行式数据库,必然按行压缩,当一行中有多个字段,各个字段对应的数据类型可能不一致,压缩性能压缩比就比较差。

对于列式数据库,必然按列压缩,每一列对应的是相同数据类型的数据,故列式数据库的压缩性能要强于行式数据库。

3、查询比较

假设执行的查询操作是:select id,name from table_emp;

对于行式数据库,它要遍历一整张表将每一行中的id,name字段拼接再展现出来,这样需要查询的数据量就比较大,效率低。

对于列式数据库,它只需找到对应的id,name字段的列展现出来即可,需要查询的数据量小,效率高。

假设执行的查询操作是:select * from table_emp;

对于这种查询整个表全部信息的操作,由于列式数据库需要将分散的行进行重新组合,行式数据库效率就高于列式数据库。

但是,在大数据领域,进行全表查询的场景少之又少,进而我们使用较多的还是列式数据库及列式储存。

二、stored as file_format 详解

1、建一张表时,可以使用“stored as file_format”来指定该表数据的存储格式,hive中,表的默认存储格式为TextFile。

30b57c7523e6007da6b30f133c10ba2d.png

2、TEXTFILE、SEQUENCEFILE、RCFILE、ORC等四种储存格式及它们对于hive在存储数据和查询数据时性能的优劣比较

6bf48b794688b1ed4932d57b133c5c58.png

TEXTFILE: 只是hive中表数据默认的存储格式,它将所有类型的数据都存储为String类型,不便于数据的解析,但它却比较通用。不具备随机读写的能力。支持压缩。

SEQUENCEFILE: 这种储存格式比TEXTFILE格式多了头部、标识、信息长度等信息,这些信息使得其具备随机读写的能力。支持压缩,但压缩的是value。(存储相同的数据,SEQUENCEFILE比TEXTFILE略大)

RCFILE(Record Columnar File): 现在水平上划分为很多个Row Group,每个Row Group默认大小4MB,Row Group内部再按列存储信息。由facebook开源,比标准行式存储节约10%的空间。

ORC: 优化过后的RCFile,现在水平上划分为多个Stripes,再在Stripe中按列存储。每个Stripe由一个Index Data、一个Row Data、一个Stripe Footer组成。每个Stripes的大小为250MB,每个Index Data记录的是整型数据最大值最小值、字符串数据前后缀信息,每个列的位置等等诸如此类的信息。这就使得查询十分得高效,默认每一万行数据建立一个Index Data。ORC存储大小为TEXTFILE的40%左右,使用压缩则可以进一步将这个数字降到10%~20%。

ORC这种文件格式可以作用于表或者表的分区,可以通过以下几种方式进行指定:

a8384fd5d39bf5593ca4c9d557dea3c5.png
b6a949d2b2b5817996d5e5d415f38fa3.png

示例:创建带压缩的ORC存储表

efccb1ee43276da4ae8eaf2160cd5ed6.png

PARQUET: 存储大小为TEXTFILE的60%~70%,压缩后在20%~30%之间。


注意:

  1. 不同的存储格式不仅表现在存储空间上的不同,对于数据的查询,效率也不一样。因为对于不同的存储格式,执行相同的查询操作,他们访问的数据量大小是不一样的。
  2. 如果要使用TEXTFILE作为hive表数据的存储格式,则必须先存在一张相同数据的存储格式为TEXTFILE的表table_t0,然后在建表时使用"insert into table table_stored_file_ORC select from table_t0;"创建。或者使用"create table as select from table_t0;"创建。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/457794.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle sql语句 从指定条数查询

现有表A 查询从第10行之后的数据 select a from ( select a, rownum r from A ) where r > 10 order by r; 实际工作中例子 select account,acct_name from ( select account, acct_name, rownum r from pmctl_nonsleep_acct ) where r > 10 order by

帮助孩子学会感恩_页数204_出版日期2015.03_完整版PDF电子书下载

帮助孩子学会感恩_页数204_出版日期2015.03_完整版PDF电子书下载 带索引书签目录高清版_13813212 下载链接http://pan.baidu.com/s/1geEmUeZ 【作 者】(英)蒂姆惠特尼(TimWhitney)著【丛书名】陪孩子成长系列丛书【形态项】 204 …

xwpftablecell设置字体样式_HTML的文字样式

font 属性可以用来作为 font-style, font-variant, font-weight, font-size, line-height 和 font-family 属性的简写,或将元素的字体设置为系统字体。字体修改font-family 属性:设置HTML页面中的字体font-size 属性:设置字体大小font-weight…

将中文标点符号替换成英文标点符号

/// 转全角的函数(SBC case) /// ///任意字符串 /// 全角字符串 /// ///全角空格为12288,半角空格为32 ///其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248 ///public string ToSBC(string input) { //半角转全角:char[] cinput.ToCh…

Centos6.5升级GCC

由于CentOS自带的gcc实在是老掉牙了,所以决定升级一下gcc,下面介绍如何进行源码编译,升级gcc。 从GNU网站下载你想要的gcc版本,链接:ftp://ftp.gnu.org/gnu/gcc/,选择合适的gcc版本,然后下载&am…

oracle sql语句 exists

exists 这个关键字只是个查询条件 用来判断后面跟的查询语句是否查找到记录 查找到为真 反之为假 例子 select * from ammst_corp a where account 999999999999999999 and exists ( select 1 from pmrgt_unit where unit_code a.open_unit ) 查找 9999999999999999…

python金字塔_高斯金字塔与拉普拉斯金字塔的原理与python构建

高斯金字塔和拉普拉斯金字塔【1】在图像相关领域应用广泛,尤其是图像融合和图像分割方面。本文从理论和opencv实现两个方面对两种金字塔进行了介绍,并给出了二者的视觉效果。1、高斯金字塔在计算机视觉与图像处理相关任务中,经常需要使用同一…

mongodb在32位机的连接

Windows 32bit版本安装Mongodb时,会发生的下面问题 2016-05-09T00:09:45.1240800 I STORAGE [initandlisten] exception in initAndListen: 28663 Cannot start server. The default storage engine wiredTiger is not available with this build of mongod. Pleas…

oracle sql 语句 start with ...... connect by prior .......

这个查询条件可以理解为递归查询 select up_unit_code from pmctl_nuit START WITH unit_code 1188899Q CONNECT BY PRIOR up_unit_code unit_code 语句理解: 首先根据条件 START WITH unit_code 查询到 up_unit_code 显示 然后 CONNECT BY P…

cnetos7安装zabbix3.0.3安装手册

亲测可用呀。学习好几天 最好用的文档详见附件http://down.51cto.com/data/2251232转载于:https://blog.51cto.com/11802086/1863554

python文件夹目录_Python 操作文件、文件夹、目录大全

#-*- coding: utf-8 -*-importosimportshutil#一. 路径操作:判断、获取和删除#1. 得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd()#print: currentpath: f:\LearnPythoncurrentpath os.getcwd()print "currentpath:",currentpa…

LightOJ 1370 Bi-shoe and Phi-shoe(欧拉函数)

题意:题目给出一个欧拉函数值F(X),让我们求>这个函数值的最小数N,使得F(N) > F(X); 分析:这个题目有两种做法。第一种,暴力打出欧拉函数表,然后将它调整…

15-CSS基础-浮动流

浮动 网页的布局方式 什么是网页的布局方式? 网页的布局方式其实就是指浏览器是如何对网页中的元素进行排版的 标准流(文档流/普通流)排版方式 其实浏览器默认的排版方式就是标准流的排版方式在CSS中将元素分为三类, 分别是块级元素/行内元素/行内块级元素在标准流中有两种排版…

oracle sql 排序

当有多个排序列时 并且每列都是降序排序 需要在每个列名后 写desc

迁移DirectX11到VS2015 Win10

书本中的例子迁移:Introduction to 3D Game Programming with Direct3D 11.0 颜色:DirectXColors.h and the DirectX::Colors namespace. 效果:Effect framework编译后只需两个文件,d3dx11effect.h及生成的lib文件。 纹理&#xf…

python监控网页更新_python监控网页更新

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里技术人对外发布原创技术内容的最大平台&…

git-- 使用

git 使用时两个人冲突: Resolve conflicts

ansible 配置文件

配置文件 两个核心文件:ansible.cfg和hosts文件,默认都存放在/etc/ansible目录下。 ansible.cfg:主要设置一些ansible初始化的信息,比如日志存放路径、模块、插件等配置信息 hosts:机器清单,进行分组管理 1.ansible.cf…

高内聚低耦合通俗理解_抱歉,请不要把“业务逻辑层”理解为“业务中台”

在IAS2019中台架构峰会上,我曾与一位年轻帅气的技术小伙来了一番有趣的对话。因为和朋友有约,所以我在现场互动结束之后,就急匆匆地跟其他嘉宾打了声招呼,抱着笔记本冲出了会场。但没想到刚到电梯口,却被一位帅小伙迎面…

ofstream的使用方法--超级精细。C++文件写入、读出函数(转)

ofstream的使用方法ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间; 在C中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类…