如何使用FME連線資料

2021-08-22 00:27:17 字數 3564 閱讀 5966

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...