2014-08-29 59 views
0

我在配置單元中的每個分區有900萬條記錄,我有兩個分區。該表有20列。現在我想根據id列來比較分區之間的數據集。這是考慮到自我加入900萬條記錄會造成性能問題的最佳方式。比較配置單元中的兩個分區的數據

+0

在兩個分區中你有相同的ID嗎?我沒有自己加入9m記錄是蜂巢問題... – 2014-09-01 10:39:33

回答

0

你可以嘗試SMB連接 - 它主要就像合併兩個排序列表。但是在這種情況下,您需要創建兩個表。

另一種選擇是編寫一個UDF來做同樣的事情 - 那就是項目本身。第一種選擇更容易。

0

你嘗試過自我加入並讓它失敗?只要您正確指定連接條件,我認爲它不應該成爲問題。對於Hive來說,9百萬行其實並不多。它可以通過使用連接條件作爲縮減鍵來處理大型連接,因此它實際上並不是完整的笛卡兒積。

select a.foo, b.foo 
from my_table a 
full outer join my_table b 
on a.id <=> b.id 
where a.partition = 'x' and b.partition = 'y' 
0

要做到2個表(或比較2個分區同桌)進行全面的比較,我的經驗告訴我,使用一些校驗機制是一個更有效和可靠的解決方案比連接表(可提供性能問題,如你所提到的,並且在例如鍵被重複時也給出一些困難)。

你可以看看這個處理Hive表的比較(比較所有行和所有列)的Python程序,並會在網頁中顯示可能出現的差異:https://github.com/bolcom/hive_compared_bq

在你的情況下,你會使用該程序指定「2表比較」是相同的,並使用「--source-where」和「--destination-where」來指示你想要的分區比較。 「 - group-by-column」選項可能對指定「id」列也很有用。