關於hive analyze命令
1. 命令用法:
表與分割槽的狀態資訊統計
analyze table tablename
[partition(partcol1[=val1], partcol2[=val2], ...)]
compute statistics [noscan];
列資訊統計
analyze table tablename
[partition(partcol1[=val1], partcol2[=val2], ...)]
compute statistics for columns ( columns name1 , columns name2…) [noscan];
當表存在分割槽時,需要在命令中指定,否則會報錯;
不支援使用列與表的別名
2. 某個有分割槽表的analyze命令執行結果:
partition default.test stats: [num_files: 1, num_rows: 0, total_size: 41, raw_data_size: 0]
table default.test stats: [num_partitions: 1, num_files: 1, num_rows: 0, total_size: 41, raw_data_size: 0]
3. 原始碼分析執行過程
命令的執行步驟:
當完成命令轉化完ast樹時 進入columnstatssemanticanalyzer類。
1) 命令型別的檢查( 比如 no scan , partial scan 等)
2) 查詢重寫,例如執行以下查詢:
analyze table pokes compute statistics for columns foo,bar;
以上查詢會根據ast樹,獲取 表名, 列名,列的數量和型別。分割槽名字,數量等資訊。生成乙個新的查詢:
select compute_stats(foo , 16 ) , compute_stats(bar , 16 ) from pokes
3) 生成新的ast樹
4) 回到driver 完成語法分析,生成查詢計畫。 在做語法分析時使用了新的ast樹和原有的ctx
5) 生成乙個列統計的任務替代fetch task,並寫統計資訊到metastore中。列統計任務的生成是通過mapreducecompiler 類中的gencolumsstatstask方法來完成的,每個task中都有對應的work 。核心**如下:
對於2中的查詢,所生成的roottasks 如下:
上圖中的mapredtask會執行一次聚合操作的rs.
6) 生成plan 。 對於2中的查詢,將會生成如下的plan:
,"querycounters":"null","stagegraph":,"stagelist":[","tasklist":[,,]},"operatorlist":[,,,],"done":"false","started":"false"},,]},"operatorlist":[,,],"done":"false","started":"false"}],"done":"false","started":"false"},","tasklist":,"done":"false","started":"false"}],"done":"false","started":"false"}
7) 列統計資訊的輸出schema
schema(
fieldschemas:[fieldschema(name:_c0,type:struct,comment:null),
fieldschema(name:_c1,type:struct, comment:null)],
properties:null)
以下是一些總結的資料:
1:列統計
針對表中的列數,特定列資料的直方圖,有多種方式可以實現。作為查詢優化的一種方法,統計輸入給優化器的代價函式,然後優化器比較不同的計畫,並從中獲取較優的計畫。
統計有時能夠滿足使用者的查詢,從而讓使用者,快速獲取結果(需執行儲存的統計資訊,而不需要觸發長時間的執行計畫)
注: 以上來自wiki 但目前還沒有實現統計輸入給優化器的這種優化。
2:範圍
hive 現在支援的表和分割槽級別的統計, 不支援列中資料的統計。由於這些表和分割槽的統計不足以完成1中所述通過cost model 計算獲取最優的計算。
統計首先要支援表和分割槽,這些統計會存在metastore中
比如分割槽:
• number of rows
• number of files
• size in bytes.
針對表,還包括表中的分割槽的格式number of partitions
針對分割槽級別的統計,可以實現列級別前n個值top k statistics
例項:假定有乙個表具有4個分割槽
• partition1: (ds='2013-03-08', hr=11)
• partition2: (ds='2013-03-08', hr=12)
• partition3: (ds='2013-03-09', hr=11)
• partition4: (ds='2013-03-09', hr=12)
執行命令如下
analyze table table1 partition(ds='2013-03-09', hr=11) compute statistics;
將只蒐集分割槽3
如果執行
analyze table table1 partition(ds='2013-03-09', hr) compute statistics;
則同時蒐集分區間3和4
如果執行
analyze table table1 partition(ds, hr) compute statistics;
則蒐集所有分割槽
針對分分割槽表,通過
analyze table table1 compute statistics;
檢視分割槽的統計資訊:
describe extended table1;
輸入類似:
... , parameters:, ....
例項:describe extended table1 partition(ds='2013-03-09', hr=11);
解析tar命令
tar命令的用法如下。摘自 鳥哥的私房菜 tar zxcvfpp tfile sfile 引數說明 z 是否同時具有 gzip 的屬性?x 解開乙個壓縮檔案的引數指令!t 檢視 tarfile 裡面的檔案!c 建立乙個壓縮檔案的引數指令 v 壓縮的過程中顯示檔案!f 使用檔名,請留意,在 f 之後要...
iptables命令解析
宣告 本文 bbs.chinaunix.net thread 2204793 1 1.html iptables 指令 語法 iptables t table command match j target jump t引數 用來指定規則表,內建的規則表有三個,分別是 nat,mangle和filte...
Vim 命令解析
qx 開始記錄巨集,並將結果存入暫存器x q 退出記錄模式 稍微解釋一下,當在normal模式下輸入 qx後,你對文字的所有編輯動作將會被記錄下來,再次輸入q即退出了記錄模 式,然後輸入 x對剛才記錄下來的命令進行重複,此命令後可跟數字,表示要重複多少次,比如 x20,可以重複20次。這個在文字的批...