データを Hive に効率的に保存し、圧縮されたデータを Hive に保存および取得するにはどうすればよいですか? 現在、私はそれをTextFileとして保存しています。私はBejoy の記事を読んでいましたが、LZO 圧縮はファイルの保存に適していて、分割可能であることがわかりました。
出力を生成するHiveQL Selectクエリが1つあり、その出力をどこかに保存して、Hiveテーブル(品質)の1つがそのデータを使用できるようにして、そのquality
テーブルをクエリできるようにします。
以下は、quality
テーブルを上書きするために使用しているパーティションを作成して、以下の SELECT クエリからデータをロードしているテーブルquality
です。
create table quality
(id bigint,
total bigint,
error bigint
)
partitioned by (ds string)
row format delimited fields terminated by '\t'
stored as textfile
location '/user/uname/quality'
;
insert overwrite table quality partition (ds='20120709')
SELECT id , count2 , coalesce(error, cast(0 AS BIGINT)) AS count1 FROM Table1;
ここでは、現在 として保存していますがTextFile
、これを として作成Sequence file
し、データを に保存する必要がありLZO compression format
ますか? それともテキストファイルでもいいですか?選択クエリから、毎日テーブル品質にアップロードする必要がある数 GB のデータを取得します。
では、どの方法が最適ですか?出力を TextFile または SequenceFile 形式 (LZO 圧縮) として保存して、Hive 品質テーブルを照会しているときに結果をより速く取得できるようにする必要があります。クエリが高速であることを意味します。
アップデート:-
ブロック圧縮を使用して SequenceFile として保存するとどうなりますか? 以下のように-
set mapred.output.compress=true;
set mapred.output.compression.type=BLOCK;
set mapred.output.compression.codec=org.apache.hadoop.io.compress.LzoCodec;
上記とは別に、BLOCK Compression を有効にするには、他にいくつか設定する必要がありますか? また、テーブルを SequenceFile 形式で作成しています
再更新
以下のようなテーブルを作成する必要がありますか?または、Sequence File で BLOCK 圧縮を有効にするには、他の変更を加える必要がありますか?
create table lipy
( buyer_id bigint,
total_chkout bigint,
total_errpds bigint
)
partitioned by (dt string)
row format delimited fields terminated by '\t'
stored as sequencefile
location '/apps/hdmi-technology/lipy'
;