我知道託管對於Netezza中的分佈式連接很重要。在高層次上,它具有以下定義:Netezza - 在SQL的角度來看,什麼是主機託管?
All data for joins are located in the same SPU
我也談到了一些Netezza公司員工在過去,他們提到,加入被視爲同一地點,如果所有表分發和加入相同的列。
不過,我還是覺得這個定義有點欠缺......根據我的理解1相和2相GROUP BY的,我懷疑真的託管運行在如下的定義:
A join is considered colocated if the set of columns used in the join condition is a superset of the distribution keys of all participating tables.
這是一個正確的定義嗎?我試圖在新西蘭尋找一個確切的定義,但我得到的是一堆文章,有點假定你已經知道定義。在這個
輸入,將不勝感激。謝謝!
編輯:基於ScottMcG的建議下,我重新的定義,同位爲加盟:
1. It must be a HASH or MERGE SORT JOIN
2. Set of columns in join conditions must be superset of all distribution keys of all participating tables
3. ?
的? #3的標記是我需要解決的一個模棱兩可的問題。按照ScottMcG的規定,每個表的分配鍵也必須相互連接。
假設表A,B,C分佈在文本列A.C1,A.C2,B.C3,B.C4,C.C5和C.C6上,我們有以下連接。
SELECT * FROM A
INNER JOIN B "Join1"
ON A.C1=B.C3
INNER JOIN C "Join2"
ON A.C2=B.C4
AND A.C2=C.C6
AND [X]
現在,讓我們提供一些[X]的可能定義。那麼[X]的哪些定義將Join2共同定位?
(1) [X] = A.C2 = 5
(2) [X] = A.C2 = B.C1 OR A.C2 = C.C5
(3) [X] = A.C1 IS NULL
(4) [X] = A.NonKeyColumn1 = B.NonKeyColumn2
我明白了。所以我提出的定義是要求#1。在#2上,如果表A分佈在A.CustomerName上,則表B分佈在CardholderName上,並且我們在A.CustomerName = B.CardholderName上有Join。我認爲那不會是共同本地化的。那麼認爲「同一」專欄的一種方式是,條件必須使得LHS和RHS必須具有PK-FK關係或兩者都是FK指向相同的PK?至於要求3,這是我第一次看到它提到。我知道這是HASH JOIN所必需的。那麼我可以假設共位聯接的前提條件是它必須是HASH嗎? – user1836155 2015-02-10 21:41:54
我認爲,我編輯了我的回覆,以澄清這一點,就像您發表評論一樣。對於#2,只有列中的內容散列爲相同的值纔是重要的。因此,對於「表A分佈在A.CustomerName上,表B分佈在CardholderName上,並且我們在A.CustomerName = B.CardholderName上有聯合」,只要CustomerName和CardholderName都是varchar,那麼您可以有一個共同連接,因爲兩者中的「SMITH」都會哈希到相同的值。對於#3,讓我補充更多的答案來澄清。 – ScottMcG 2015-02-10 21:53:52
有趣。因此,讓我嘗試對協作需求做一個簡單的形式化:(1)JOIN必須是HASH/MERGE SORT JOIN,並且(2)連接所需的一組列必須是每個表的分配鍵。至於JOIN類型,是否有一個頁面能夠很好地滿足他們的需求和性質?我唯一能找到的就是HASH JOIN需要等號和相同類型,EXIST JOIN是一種特殊類型的HASH JOIN,而NESTED LOOP JOIN是baddddd。如果有必要,我可以提出一個新的問題 – user1836155 2015-02-10 22:55:37