【Hive】Hive / HiveQL ~ データ圧縮あれこれ ~

■ はじめに

https://dk521123.hatenablog.com/entry/2020/11/03/000000

の続き。

Hive の テーブルデータ を GZIP にするなどを行ったので
知識を整理しておく

目次

【1】テーブルデータを圧縮する
 1)サンプル
【2】ファイルフォーマットを指定する
 1)STORED AS <FORMAT>
 2)サンプル

【1】テーブルデータを圧縮する

以下を指定すればいい。
他にも、BZIP2 / Snappy / LZ4 などが指定できる。
詳細は、以下のサイトを参照のこと。

https://blog.amedama.jp/entry/2018/02/15/234725

テーブルデータをGZIPに指定する

set hive.exec.compress.output=true;
set mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;

※ プロパティに関する詳細な説明は、以下の関連記事を参照のこと。

https://dk521123.hatenablog.com/entry/2020/09/19/152136

1)サンプル

-- GZIP形式で圧縮する
set hive.exec.compress.output=true;
set mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;

DROP TABLE IF NOT EXISTS sample_db.sample_table;
CREATE TABLE sample_db.sample_table
ROW FORMAT DELIMITED FIELDS TEMINATED BY '\001'
STORED AS TEXTFILE
AS
SELECT
 *
FROM
 sample_db.sample_table_temp;

出力結果

# GZIPとして保存されている
0000_0.gz
0000_1.gz
...

【2】ファイルフォーマットを指定する

 『STORED AS <フォーマット>』で 
例えば、パーケットを指定(STORED AS PARQUET)すれば
 データを圧縮できる

1)STORED AS

https://cwiki.apache.org/confluence/display/hive/languagemanual+ddl#LanguageManualDDL-StorageFormatsStorageFormatsRowFormat,StorageFormat,andSerDe

より抜粋

* TEXTFILE:プレインテキストで保存
* SEQUENCEFILE:SequenceFile(シーケンスファイル) 形式で保存
* ORC:ORC(Optimized Row Columnar) 形式で保存
* PARQUET:パーケット形式で圧縮
* AVRO:AVRO(アブロ、バイナリ)形式で保存
* RCFILE:RCFile形式で保存
* JSONFILE:JSON形式で保存(Hive 4.0.0 以降)
etc...

2)サンプル

CREATE TABLE xxx (
  id BIGINT
)
-- PARQUET形式として指定
-- (列志向・カラムナフォーマット: Parquet, ORC / TEXTFILE etc)
STORED AS PARQUET
-- 圧縮形式:snappy
TBLPROPERTIES("parquet.compression"="SNAPPY")
;

参考文献

https://qiita.com/yskazuma/items/db543d45d32013cfcbb9

関連記事

Hive / HiveQL ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2019/11/25/235219
Hive / HiveQL ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/02/25/231235
Hive / HiveQL ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2020/06/02/183823
Hive / HiveQL ~ テーブル作成 ~
https://dk521123.hatenablog.com/entry/2020/11/03/000000
Hive / HiveQL ~ 設定プロパティ ~
https://dk521123.hatenablog.com/entry/2020/09/19/152136