hive嚴格模式
hive提供了乙個嚴格模式,可以防止使用者執行那些可能產生意想不到的不好的效果的查詢。即某些查詢在嚴格
模式下無法執行。
1)帶有分割槽的表的查詢
如果在乙個分割槽表執行hive,除非where語句中包含分割槽字段過濾條件來顯示資料範圍,否則不允許執行。換句話說,
就是使用者不允許掃瞄所有的分割槽。進行這個限制的原因是,通常分割槽表都擁有非常大的資料集,而且資料增加迅速。
如果沒有進行分割槽限制的查詢可能會小號令人不可接受的巨大資源來處理這個表:
hive> select distinct(planner_id) from fracture_ins where planner_id=5;
failed: error in semantic analysis: no partition predicate found for alias "fracture_ins" table "fracture_ins
如下這個語句在where語句中增加了乙個分割槽過濾條件(也就是限制了表分割槽):
hive> select distinct(planner_id) from fracture_ins
> where planner_id=5 and hit_date=20120101;
... normal results ...
2)帶有orderby的查詢
對於使用了orderby的查詢,要求必須有limit語句。因為orderby為了執行排序過程會講所有的結果分發到同乙個reducer中
進行處理,牆紙要求使用者增加這個limit語句可以防止reducer額外執行很長一段時間:
hive> select * from fracture_ins where hit_date>2012 order by planner_id;
failed: error in semantic analysis: line 1:56 in strict mode,
limit must be specified if order by is present planner_id
只需要增加limit語句就可以解決這個問題:
hive> select * from fracture_ins where hit_date>2012 order by planner_id
> limit 100000;
... normal results ...
3)限制笛卡爾積的查詢
對關係型資料庫非常了解的使用者可能期望在執行join查詢的時候不使用on語句而是使用where語句,這樣關聯式資料庫的執行
優化器就可以高效的將where語句轉換成那個on語句。不行的是,hive不會執行這種優化,因此,如果表足夠大,那麼這個查詢就會
出現不可控的情況:
hive> select * from fracture_act join fracture_ads
> where fracture_act.planner_id = fracture_ads.planner_id;
failed: error in semantic analysis: in strict mode, cartesian product
is not allowed. if you really want to perform the operation,
+set hive.mapred.mode=nonstrict+
下面這個才是正確的使用join和on語句的查詢:
hive> select * from fracture_act join fracture_ads
> on (fracture_act.planner_id = fracture_ads.planner_id);
... normal results ...
hive 嚴格模式
hive提供了乙個嚴格模式,可以防止使用者執行那些可能產生意向不到的不好的效果的查詢。說通俗一點就是這種模式可以阻止某些查詢的執行。通過如下語句設定嚴格模式 hive set hive.mapred.mode strict hive select distinct planner id from f...
hive嚴格模式
說真的,這個模式在我做sql開發的歲月裡,從未用到過。用的都是動態分割槽非嚴格模式。我的好友東嶽同學在車上問我。確實問到了我 體現出了我基本功不紮實的情況。hive提供了乙個嚴格模式,可以防止使用者執行那些可能產生意向不到的不好的效果的查詢。說通俗一點就是這種模式可以阻止某些查詢的執行。通過如下語句...
hive優化 嚴格模式
預設配置為 hive.mapred.mode nonstrict the mode in which the hive operations are being performed.in strict mode,some risky queries are not allowed to run.th...