按天劃分的表:使用分割槽
分割槽:乙個理想的分割槽方案不應該導致產生太多的分割槽和資料夾目錄,並且每個目錄下的檔案應該足夠大,應該是檔案系統中塊大小的若干倍。
如何保證:
按時間範圍進行分割槽的乙個好的策略就是按照不同的時間粒度來確定合適大小的資料積累量,而且安裝這個時間粒度。
另乙個解決方案是使用兩個級別的分割槽並且使用不同的維度。
最後如果使用者找不到好的分割槽方案,可以使用"分桶表資料儲存"。
同乙份資料的多重處理:提高效率
from history
insert overwrite table sales select * where action="purchased"
insert overwrite table credits select * where action="returned" ;
分桶表資料儲存:
分割槽提供乙個隔離資料和優化查詢的便利方式,但是並不是所有的資料集都可形成合理的分割槽。
分桶是將資料集分解成更容易管理的若干部分的另乙個技術。
create table weblog(
userid int,
url string ,
sourceip string
)partitioned by (dt string)
clustered by (userid) into 96 buckets ;
下面介紹如何在insert...table語句時正確的填充表。
首先我們需要設定乙個屬性來強制hive為目標表的分桶初始化過程設定乙個正確的reducer個數。然後我們在執行乙個查詢來填充分割槽。
set hive.enforce.bucketing = true ;
from raw_logs
insert overwrite table weblog
partition (dt="2009-02-25")
select userid,url,sourceip where dt="2009-02-25" ;
注:如果我們沒有使用hive.enforce.bucketing屬性,那麼我們就需要自己設定和分桶個數相匹配的reducer的個數。例如,使用set mapred.reduce.task = 96 ,然後在insert語句中,需要再select語句後增加cluster by語句。
分桶好處:
因為桶的數量是固定的,所以沒有資料波動;
桶很適合抽樣;
分桶有利於執行高效的map-side join。
Hive工作模式
hive非互動模式 1 可以將hive執行的sql語句儲存到指令碼檔案中,通過 f選項指定指令碼檔案執行hive eg hive f script.sql 2 對於較短的sql語句,可以直接使用 e選項執行hive eg hive e select from table a 3 s選項 hive執行...
hive本地模式
看hive資料會看到hive本地模式這個介紹,下面是查詢網上資料後的一些整理 大多數的hadoop job是需要hadoop集群來處理大資料的,不過,有時hive的輸入資料量是非常小的。在這種情況下,為查詢執行任務的時間消耗可能會比實際job的執行時間要多的多,因此hive0.7版本後hive開始支...
hive 嚴格模式
hive提供了乙個嚴格模式,可以防止使用者執行那些可能產生意向不到的不好的效果的查詢。說通俗一點就是這種模式可以阻止某些查詢的執行。通過如下語句設定嚴格模式 hive set hive.mapred.mode strict hive select distinct planner id from f...