小文件治理之hive文件合并:hive小文件合并的三种方法
文章目錄
- 前言
- 一、concatenate方法
- 二、insert overwrite方法
- 三、insert overwrite select * 用法
- 總結
前言
hive分區下,有很多小文件,例如一個分區有1000個文件,但每個文件大小是10k,數倉大量這種小文件。
小文件太多,需要消耗hdfs存儲資源,mr,spark計算的任務數。
為了處理小文件,需要對它們進行合并。
一、concatenate方法
#對于非分區表
alter table tablename concatenate;
#對于分區表
alter table tablename partition(dt=20201224) concatenate;
優點: 使用方便
缺點: concatenate 命令只支持 RCFILE 和 ORC 文件類型,需要執行多次,才能把文件合并為1個。
二、insert overwrite方法
insert overwrite table tableName partition(dt=2022031100) select column1,column2 from tableName where dt=2022031100缺點: select 的字段需要自己拼起來,select * 的話,由于帶有dt字段,無法寫入新分區。
優點: 支持所有數據類型
三、insert overwrite select * 用法
從select * 中去掉一列的方法:
insert overwrite tableA select (name)?+.+ from test;
從select * 中去掉列 address
hive> select `(address)?+.+` from test; hook status=true,operation=QUERY OK name friends children songsong ["bingbing","lili"] {"xiao song":18,"xiaoxiao song":19} yangyang ["caicai","susu"] {"xiao yang":18,"xiaoxiao yang":19} Time taken: 0.144 seconds, Fetched: 2 row(s)用這個方法就能去掉分區表的日期字段
注意,語法生效,需要設置
hive> set hive.support.quoted.identifiers=none;
更多用法參考: https://blog.csdn.net/spark_dev/article/details/123692018
總結
concatenate 和 insert overwrite方法 都可以實現hive文件的合并。
總結
以上是生活随笔為你收集整理的小文件治理之hive文件合并:hive小文件合并的三种方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vsCode插件-------Beaut
- 下一篇: 一点英语不会可以学java吗_不会英语能