2016-12-04 42 views
1

從Hive表插入HIVE表時,它正在載入更多記錄,即實際記錄。任何人都可以幫助這種蜂巢的怪異行爲?在HIVE中載入比實際更多的記錄

我查詢要尋找這樣的:

insert overwrite table_a 
    select col1,col2,col3,... from table_b; 

我的表-B由6405465個記錄。

從表-B插入到表-A後,我發現在表-A總記錄6406565.

任何一個可以請幫助這裏?

+0

它們以不同的方式存儲嗎?也許你在某些數據中有'table_a'行分隔符 –

+0

是的,table_b是普通文本表。其中table_a是分區文本表。並且這兩個表都有'\ n'的行,由'\ t'作爲分隔符。 –

+1

另請參閱:http://stackoverflow.com/a/39914232/2700344檢查您是否使用統計信息count(*)計算 – leftjoin

回答

2

如果hive.compute.query.using.stats=true;那麼優化器正在使用統計信息進行查詢計算,而不是查詢表數據。這要快得多,因爲Metastore是像MySQL這樣的快速數據庫,並且不需要map-reduce。但是如果表未使用INSERT OVERWRITE加載,或者負責將統計信息自動收集設置爲false的配置參數hive.stats.autogather,則統計信息可能不新鮮(陳舊)。在加載文件或使用第三方工具後,統計數據也不會保持新鮮。這是因爲文件從未被分析過,在Metastore中的統計數據並不新鮮,如果你有新的文件,沒人知道數據是如何改變的。在sqoop加載之後,等等。因此,在使用'ANALYZE TABLE ... COMPUTE STATISTICS'加載後收集表或分區的統計信息是一個好習慣。

如果無法自動收集統計信息(適用於INSERT OVERWRITE)或運行ANALYZE語句,則最好關閉hive.compute.query.using.stats參數。 Hive將查詢數據而不是使用統計信息。

請參閱參考:https://cwiki.apache.org/confluence/display/Hive/StatsDev#StatsDev-StatisticsinHive

相關問題