大數據什錦_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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章