2016-01-23 76 views
2

我想知道SQL連接如何在Greenplum這樣的MPP數據庫中工作,如果我想要在跨多個節點節點分佈的兩個大表之間進行連接,那麼數據如何處理?查詢連接如何在MPP數據庫中工作?

主節點是否從所有節點獲取所有相關數據,然後進行連接並返回結果集?如果你要做很多這種類型的表連接,這可能不會是一個大瓶頸嗎?

我發現從here如下:

的MPP數據庫試圖段跨多個服務器中的數據,使每個服務器節點都可以獨立於其它的工作。例如,要在大表和小表之間執行JOIN,MPP數據庫將在每個節點上存儲大表中的行子集以及整個小表的副本。然後,每個節點可以獨立於其他節點執行JOIN,從而消除共享資源產生的瓶頸。這可以實現大規模並行處理,其中大型查詢可以分解爲一組較小的查詢,每個查詢都可以在單獨的服務器上獨立運行。

這特別會談,小桌子約聯接,但提到了關於連接兩個大表..

回答

2

如果兩個表是由相同的密鑰分配什麼,然後加入當地發生的每一個部分。如果您要加入兩個非常大的表格,建議您使用同一個鍵分配表格。

在兩個表格不是由同一個鍵分配的情況下,Greenplum將使用表格的統計數據將數據從較小的表格複製到較大的表格的位置以執行連接。現在,它不會移動所有東西。它只移動它需要的數據。

比方說,你有預測和實際的表,真的很大,並通過不同的鍵分配。實際值大於預測值,您的比較過濾器預測只有一個月。 Greenplum將創建一個分片,僅查詢該月的預測表,然後將結果發送到其他分段以加入到實際表格中。意識到這是在每個細分市場上並行完成的,因此非常快速和可擴展。

主服務器創建查詢計劃並管理執行,但數據不會發送到主服務器,直到查詢完成。查詢由段處理。因此,不,主節點不會「從所有節點獲取所有相關數據,然後進行連接並返回結果集」。

相關問題