featuresjoiner是將資料連線在一起的轉換器,它最接近featuremerger(並且可能最終取代它)。它在工作空間中是這樣的:
該工作區將facility要素與postaladdress要素相結合。你可以看到,代替requestor/supplier這個轉換器有left/right埠,少乙個輸出埠; 但除此之外它確實看起來像featuremerger。
join on,conflict resolution和geometry handling引數非常明顯,與featuremerger中已有的類似。但是關鍵引數是join mode。
要了解join mode就有必要了解左連線和內連線。join mode選擇的三種模式是左連線,內連線和全連線。
模式描述
描述joined
unjoined left
unjoined
right
left
left埠要素尋找匹配的要素並且無論是否找到匹配要素都輸出
所有的匹配要素加上沒有匹配的要素
無沒有用上的right埠要素
inner
left埠要素尋找匹配的要素並且只輸出匹配了的要素
只輸出匹配了的要素
沒有找到匹配的left要素
沒有用上的right埠要素
full
無論是否找到連線,left和right要素都會成joined output埠輸出
所有匹配上的要素加上沒有找到匹配的left和right要素無無
理解操作的最簡單方法是:每個圖中的重疊部分總是輸出。這是乙個連線,所以這些功能通過連線埠輸出。
left / inner / full引數不控制連線了的的要素,而是未連線的要素。
l 在inner模式下,沒有連線的要素通過unjoined left或unjoined right埠輸出。
l 在left模式下,沒有匹配的left要素仍然通過joined埠輸出,沒有匹配的right要素通過unjoined right埠輸出。
l 在full模式下,沒有匹配的left和right要素仍然通過joined埠輸出。
接下來以facility/address為例,如何實現將facility要素和 address記錄相匹配。
在inner模式下,只有匹配了address的facility才會通過joined埠輸出,如果你想得到沒有匹配的要素,那麼通過unjoinedleft埠輸出的就是。
但是在left模式下,不管facility要素是否有匹配的,都會通過joined埠輸出。輸出的資料質量並不是很好,但是如果我們知道並不是所有的facility都有匹配的address,那這個模式也很好。
在full模式下,joined埠輸出的要素包括了所有的address,在這個例子的情況下可能不需要,但是在其他時候可能會用上。
到這裡,你會注意到featuresjoiner沒有 與featuresmerger「handle duplicate suppliers」引數等效的功能。要理解這點你需要知道我們的主旨是「match」
為了理解這一點我們來看看包含了要素計數的數字:
多少要素將從joined埠輸出呢?這得看情況。
如果我們假設每個facility和乙個address之間嚴格1:1匹配,則8個要素將以連線的方式輸出。為什麼?因為我們有8對匹配。計數將如此:
full模式下的joined埠輸出的1463442個要素包括了連線上了的8個要素,以及沒有連線上的1463434個要素。
這很好。但是,我們可能在facility和address表之間沒有這樣乙個純粹的1:1匹配。我們可能會遇到1:m,m:1,甚至m:m的情況。
假設每個facility在address中有兩個匹配項,我們會得到這個:
為什麼我們會得到比left埠輸入的更多的要素呢?因為每一次匹配我們都會得到一條要素,這裡出現了16次匹配。
這是featuresmerger做不到的,它會忽略掉第二個匹配或者建立乙個列表,但是featuresjoiner是按照sql等價的方式設計的,所以它工作的方式不同。事實上在極端的情況下,我們假設每個facility都有addressid=1,並且每個address都有addressid=1,那麼每個facility都會匹配到每個address!
那麼我們會得到8 x 1463442個匹配。
換句話說,在left或inner模式下我們可以輸入8個「requestor」要素並且得到11707536個要素,這沒有錯只是可能和你的習慣不同。
作為高階主題的一部分,匹配要素從轉換器輸出的順序和從left埠輸入的順序相同。因此如果left要素在進入轉換器時安裝特定的順序排序,那麼對於left模式或者inner模式,該順序在輸出中將保持不變。
如果在full模式下要保持完整的順序不變,那麼left和right要素必須按照順序排序。
那麼你應該使用哪種轉換器?那麼需要考慮兩個方面:功能和效能。
對於使用資料庫術語和功能的使用者來說,featurejoiner在功能上來說肯定更好。它旨在模仿sql,因此結果應該與輸入相同的sql連線命令相同。
關鍵的輸出差異是featurejoiner的每個要素匹配概念。featuremerger會讓你建立乙個列表。但是我想說,很多時候你立即使用listexploder將列表分解為要素,所以我不確定在featurejoiner中沒有list引數會帶來多大的不便。
另外,如果你確實需要列表,使用listbuilder對joined埠輸出的要素進行建立列表,並且按照連線關鍵屬性進行分組。這是輸出順序很重要的地方,因為如果featurejoiner輸入適當排序,你可能可以在listbuilder中設定按組排序的輸入。
至於效能,featurejoiner擁有改進的設計,並通過使用加速許多其他讀模組,寫模組和轉換器的「要素表」技術獲得更多的提公升。所以如果效能很重要,那麼你絕對應該試用featurejoiner。
起初,您可能會更熟悉熟悉的featuremerger,但至少嘗試使用featurejoiner是值得的。
你甚至可以學習一些術語來幫助你實現理想的工作!
pl sql developer 如何連線資料庫
首先要先安裝 oracle客戶端,然後按下列步驟配置。配置好以後,再啟動 plsql,就能登入了。假設資料庫所在伺服器 ip位址為 192.168.0.1 資料庫例項名為 ora92 使用者名稱 umap 密碼 umap 第一步 開啟配置程式 位於 程式 oracle orahome92 confi...
FME如何使用Python?
安裝fme後,在fme的安裝路徑中,找到 fmeobjects 資料夾 c program files fme fmeobjects 在fmeobjects 資料夾中,我們可以看到名為python版本的資料夾,因fme的版本不同,支援的python版本有所差異 以fme 2018 x64為例 選擇需...
如何使用Zend Framework 連線資料庫
db zend db factory pdo mysql array host 127.0.0.1 username root password 123456 dbname mysql 直接連線mysql 返回乙個資料庫連線物件 讀取配置檔案中的配置並連線 config new zend confi...