是否存在Hive查詢以快速查找表大小(即行數)而不啓動耗時的MapReduce作業? (這就是爲什麼我想避免COUNT(*)
。)Hive查詢快速查找表大小(行數)
我試過DESCRIBE EXTENDED
,但是產生了numRows=0
這顯然是不正確的。
(很抱歉沒能福利局問題,我試着用搜索引擎和搜索沒有成功apache.org文檔)。
是否存在Hive查詢以快速查找表大小(即行數)而不啓動耗時的MapReduce作業? (這就是爲什麼我想避免COUNT(*)
。)Hive查詢快速查找表大小(行數)
我試過DESCRIBE EXTENDED
,但是產生了numRows=0
這顯然是不正確的。
(很抱歉沒能福利局問題,我試着用搜索引擎和搜索沒有成功apache.org文檔)。
它是一個很好的問題。計數()將花費很多時間來查找結果。但不幸的是()是唯一的辦法。
還存在另一種方式(不能說比上面的情況下備用但更好等待時間):
設置屬性 組hive.exec.mode.local.auto = TRUE;
並運行相同的命令(從tbl中選擇count(*)),這會提供比以前更好的延遲。
確實有其他方法。見下面的其他答案。 –
這裏是快速命令
ANALYZE TABLE tablename [PARTITION(partcol1[=val1], partcol2[=val2], ...)] COMPUTE STATISTICS [noscan];
例如,如果表已分區
hive> ANALYZE TABLE ops_bc_log PARTITION(day) COMPUTE STATISTICS noscan;
輸出是
分區logdata.ops_bc_log {天= 20140523}統計:[numFiles = 37,numRows = 26095186,totalSize = 654249957,rawDataSize = 58080809507]
Part銀行足球比賽logdata.ops_bc_log {天= 20140521}統計:[numFiles = 30,= numRows行21363807,總計TOTALSIZE = 564014889,rawDataSize = 47556570705]
分區logdata.ops_bc_log {天= 20140524}統計:[numFiles = 35,= numRows行25210367,總計TOTALSIZE = 631424507,rawDataSize = 56083164109]
分區logdata.ops_bc_log {天= 20140522}統計:[numFiles = 37,= numRows行26295075,總計TOTALSIZE = 657113440,rawDataSize = 58496087068]
行
所用時間:5.252秒
請注意,根據[文檔](https://cwiki.apache.org/confluence/display/Hive/StatsDev),「noscan」參數將阻止掃描文件以獲取正確的行數。你會得到總大小。在你的情況下,它可能已經工作,因爲你正在通過配置收集統計信息。 –
@DanielLangdon是rawDataSize字節,塊或其他的單位嗎? – dlamblin
使用實木複合地板格式來存儲外部/內部表格的數據。那麼你會得到更快的結果。
有關使用方法:
hdfs dfs -du -s -h /path/to/table/name
檢查此[鏈接](https://stackoverflow.com/a/45304801/7043815)!希望它有助於:) –