hive的存储格式

打印 上一主题 下一主题

主题 1630|帖子 1630|积分 4890

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1) 四种存储格式
hive的存储格式分为两大类:一类纯文本文件,一类是二进制文件存储。
Hive支持的存储数据的格式主要有:TEXTFILE、SEQUENCEFILE、ORC、PARQUET
第一类:纯文本文件存储
textfile: 纯文本文件存储格式,不压缩,也是hive的默认存储格式,磁盘开销大,数据分析开销大
第二类:二进制文件存储
- sequencefile:
会压缩,不能使用load方式加载数据
- parquet:
会压缩,不能使用load方式加载数据
- rcfile:
会压缩,不能load。查询性能高,写操纵慢,所需内存大,盘算量大。此格式为行列肴杂存储,hive在该格式下,会只管将附近的行和列的块存储到一起。
- orcfile:rcfile的升级版。
2)列式存储和行式存储

TEXTFILE和SEQUENCEFILE的存储格式都是基于行存储的;
ORC和PARQUET是基于列式存储的。
行式存储:查找某一条整行数据比较快
列式存储:查找某个字段比较快 select name from user;
修改hive的默认存储格式:
  1. <property>
  2.   <name>hive.default.fileformat</name>
  3.   <value>TextFile</value>
  4.   <description>
  5.     Expects one of [textfile, sequencefile, rcfile, orc].
  6.     Default file format for CREATE TABLE statement. Users can explicitly override it by CREATE TABLE ... STORED AS [FORMAT]
  7.   </description>
  8. </property>
  9. 也可以使用set方式修改:
  10. set hive.default.fileformat=TextFile
复制代码
textfile类型演示:

  1. create table stocks_1 (
  2.   track_time string,
  3.   url string,
  4.   session_id string,
  5.   referer string,
  6.   ip string,
  7.   end_user_id string,
  8.   city_id string
  9. )
  10. row format delimited fields terminated by '\t'
  11. stored as textfile;
  12. load data local inpath '/home/hivedata/stocks.log' into table stocks_1;
  13. 在linux的命令行上使用hdfs dfs -put方法去上传到指定目录下。
复制代码
可以查看到数据,说明是文本类型的。

sequencefile 的使用

  1. create external table if not exists stocks_seq_1 (
  2.   track_time string,
  3.   url string,
  4.   session_id string,
  5.   referer string,
  6.   ip string,
  7.   end_user_id string,
  8.   city_id string
  9. )
  10. row format delimited fields terminated by '\t'
  11. stored as sequencefile;
  12. 由于不能load数据,从普通表中查询出来插入进入。
  13. 使用insert into的方式加载数据
  14. insert into stocks_seq_1 select * from stocks_1 ;
  15. 或者使用克隆的方式:
  16. create table stocks_seq_2 stored as sequencefile as select * from stocks_1;
复制代码
查看数据,是乱码,说明是二进制文件

parquetfile 类型

  1. create external table if not exists stocks_parquet (
  2. track_time string,
  3. url string,
  4. session_id string,
  5. referer string,
  6. ip string,
  7. end_user_id string,
  8. city_id string
  9. )
  10. row format delimited
  11. fields terminated by '\t'
  12. stored as parquet;
  13. 使用insert into的方式加载数据
  14. insert into stocks_parquet select * from stocks_1 ;
  15. 或者使用克隆的方式:
  16. create table stocks_parquet_1 stored as parquet as select * from stocks_1;
复制代码


rcfile类型:

  1. create external table if not exists stocks_rcfile (
  2. track_time string,
  3. url string,
  4. session_id string,
  5. referer string,
  6. ip string,
  7. end_user_id string,
  8. city_id string
  9. )
  10. row format delimited
  11. fields terminated by '\t'
  12. stored as rcfile;
  13. 使用insert into的方式加载数据
  14. insert into stocks_rcfile select * from stocks_1;
  15. 或者使用克隆的方式:
  16. create table stocks_rcfile_2 stored as rcfile as select * from stocks_1;
复制代码


orcfile类型:rcfile的升级版

  1. create external table if not exists stocks_orcfile (
  2. track_time string,
  3. url string,
  4. session_id string,
  5. referer string,
  6. ip string,
  7. end_user_id string,
  8. city_id string
  9. )
  10. row format delimited
  11. fields terminated by ','
  12. stored as orcfile;
  13. 使用insert into的方式加载数据
  14. insert into stocks_orcfile select * from stocks_1;
  15. 或者使用克隆的方式:
  16. create table stocks_orcfile_2 stored as orcfile as select * from stocks_1;
复制代码


查询速度和压缩比例对比:
  1. select count(*) from stocks_1;
  2. select count(*) from stocks_seq_1;
  3. select count(*) from stocks_parquet;      
  4. select count(*) from stocks_rcfile;
  5. select count(*) from stocks_orcfile;
  6. 比较一下上述五个查询所需要的时间
复制代码
文件存储格式是真正的压缩吗? 每一种文件文件格式有一定的压缩比例,但是不是真正的压缩,而是文件格式带来的。





免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

耶耶耶耶耶

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表