2014-06-06 48 views
5

我創建了一個表中HIVE的錯誤結果爲

CREATE TABLE IF NOT EXISTS daily_firstseen_analysis (
    firstSeen   STRING, 
    category   STRING, 
    circle   STRING, 
    specId   STRING, 
    language   STRING, 
    osType   STRING, 
    count    INT) 
    PARTITIONED BY (day STRING) 
    ROW FORMAT DELIMITED 
    FIELDS TERMINATED BY '\t' 
    STORED AS orc; 

COUNT(*)在蜂巢表COUNT(*)不給我正確的結果,此表

hive> select count(*) from daily_firstseen_analysis; 
OK 
75 
Time taken: 0.922 seconds, Fetched: 1 row(s) 

雖然數量在這個表中的行是959行

hive> select * from daily_firstseen_analysis; 
.... 
Time taken: 0.966 seconds, Fetched: 959 row(s) 

它給959行

數據3210
hive> ANALYZE TABLE daily_firstseen_analysis PARTITION(day) COMPUTE STATISTICS noscan; 
    Partition logdata.daily_firstseen_analysis{day=20140521} stats: [numFiles=6, numRows=70, totalSize=4433, rawDataSize=37202] 
    Partition logdata.daily_firstseen_analysis{day=20140525} stats: [numFiles=6, numRows=257, totalSize=4937, rawDataSize=136385] 
    Partition logdata.daily_firstseen_analysis{day=20140523} stats: [numFiles=6, numRows=211, totalSize=5059, rawDataSize=112140] 
    Partition logdata.daily_firstseen_analysis{day=20140524} stats: [numFiles=6, numRows=280, totalSize=5257, rawDataSize=148808] 
    Partition logdata.daily_firstseen_analysis{day=20140522} stats: [numFiles=6, numRows=141, totalSize=4848, rawDataSize=74938] 
    OK 
    Time taken: 5.098 seconds 

我使用的配置單元的版本蜂巢0.13.0.2.1.2.0-402

注: 我發現這個問題COUNT(*)如果我們插入到表中超過一次。使用單個插入創建的表不存在此問題

+0

那是不可能的。 您可以確定何時在Hive表中插入/加載記錄時,您沒有在該表上運行任何其他查詢。 –

+0

@MukeshS我按順序運行了所有插入查詢。我可以使用select *語句查看所有記錄。即使分析表給我一切正常。這個表格中只有count(*)是問題。在其他表上的count(*)在我的環境中工作正常。讓我知道你是否需要關於這個問題的更多信息。 – minhas23

+0

@MukeshS「那是不可能的」。所以你要親自證實這個配置單元有零錯誤?順便說一句,我已經在超過500個節點的簇中使用了兩年的配置單元。我認爲配置單元有一個或兩個缺陷.. – javadba

回答

6

我有同樣的問題,並使用ANALYZE修復它。按順序運行這些命令會給你正確的計數:

hive> ANALYZE TABLE daily_firstseen_analysis PARTITION(day) COMPUTE STATISTICS; 
hive> SELECT COUNT(*) FROM daily_firstseen_analysis; 

即你必須在count之前使用analyze命令。你的問題中有一半的答案。

1

如果您有外部表,請刪除HDFS中的所有文件,並再次插入表中,然後選擇count(*)將不正確。