大数据什锦_ORC&PARQUET_按列存储_Columnar VS Row-based

概述

本文通过使用Hadoop的数据仓库工具Hive中的不同存储格式,比较按行存储和按列存储的不同。按列存储使用的是企业中最长见的ORC和PARQUET。

这里不讲解对于Hive的使用。

Columnar VS Row-based

  • 行存储和列存储的存储区别
    在这里插入图片描述

  • 优缺点比较

    • 按行存储:
      优点:insert和update更加容易
      缺点:查询某几列时,所有数据也都会被读取
    • 按列存储:
      优点:查询时只有涉及到的列会被读取;投影很高效;任何列都能作为索引
      缺点:insert/update会比较麻烦
  • 不同存储格式的压缩比较
    在这里插入图片描述

企业中更多的业务场景是对列数据进行操作,如果按行存储,需要把每行数据加载到内存中,在从每行去获取数据。

ORC和PARQUET

ORC

在这里插入图片描述
Hive使用orc格式时,默认使用ZLIB压缩
在这里插入图片描述在这里插入图片描述

Parquet

在这里插入图片描述在这里插入图片描述
可选压缩方式:

实验准备

创建数据库

  • Hive官网建库示例
CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name
  [COMMENT database_comment]
  [LOCATION hdfs_path]
  [WITH DBPROPERTIES (property_name=property_value, ...)];
  • 建库
create database if not exists web_analysis location "/user/hive/warehouse/web_analysis";

创建表和加载数据

准备好存放了100000条数据page_views.data数据文件。

  • 创建表page_views_txt,格式:行存储,TEXTFILE格式
create table web_analysis.page_views_txt(
track_time string,
url string,
session_id string,
referer string,
ip string,
end_user_id string,
city_id string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE;
  • 加载数据
load data local inpath '/opt/datas/page_views.data' into table page_views_txt;
  • 获取表page_views_txt条数
select count(1) from page_views_txt;

Hive通过跑MR之后获取到page_views_txt的条数是100000。

  • 创建表page_views_orc,格式:orc,按列存储
create table web_analysis.page_views_orc(
track_time string,
url string,
session_id string,
referer string,
ip string,
end_user_id string,
city_id string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS orc;
  • 创建表page_views_parquet,格式:parquet,按列存储
create table web_analysis.page_views_parquet(
track_time string,
url string,
session_id string,
referer string,
ip string,
end_user_id string,
city_id string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS PARQUET;
  • 从已有表插入数据
insert into table page_views_parquet select * from page_views_txt ;
insert into table page_views_orc select * from page_views_txt ;

比较表的大小

  • TEXTFILE格式
    在hive命令行中输入
dfs -du -h /user/hive/warehouse/web_analysis/page_views_txt;

得到以下结果,说明page_views_txt有18.1M
在这里插入图片描述

  • PARQUET格式
    在hive命令行中输入
dfs -du -h /user/hive/warehouse/web_analysis/page_views_parquet;

得到以下结果,说明page_views_parquet有13.1M
在这里插入图片描述

  • ORC格式

在hive命令行中输入

dfs -du -h /user/hive/warehouse/web_analysis/page_views_orc;

得到以下结果,说明page_views_orc只有2.6M
在这里插入图片描述

存储格式+压缩

ORC

ORC格式默认ZLIB压缩,这里设置为snappy

create table page_views_orc_snappy(
track_time string,
url string,
session_id string,
referer string,
ip string,
end_user_id string,
city_id string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS orc tblproperties ("orc.compress"="SNAPPY");

PARQUET

set parquet.compression=SNAPPY ;
create table page_views_parquet_snappy(
track_time string,
url string,
session_id string,
referer string,
ip string,
end_user_id string,
city_id string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS parquet;
发布了9 篇原创文章 · 获赞 6 · 访问量 2379
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章