2014-06-24 37 views
1

我從mongodb集合中獲取所有文檔(百萬),並且在postgreSQL中有很多正則表達式。 我想測試每個正則表達式,直到包含在文檔中的多個字段上的一個匹配。在每個文檔上測試多個正則表達式

你有什麼想法該怎麼做?

我嘗試了一個Filter Row步驟,但我不知道如何遍歷所有來自postgreSQL的正則表達式。

回答

2

您可以通過使用連接行(笛卡爾積)組件解決您的問題。其中一個輸入必須在文檔中閱讀,另一個必須在正則表達式中閱讀。連接組件將從中創建一個外部產品,從而產生正則表達式和文檔的每種可能的組合。這個流必須輸入到Filter行組件,並將結果發送到某個輸出。

下列轉換將模擬天生這種方法(從CSV文件中讀取,但不應該有任何區別,從PostgreSQL的或MungoDB閱讀它):

transformation

輸入的數據爲「文檔」配置如下:

csv input for docs

爲「正則表達式」的輸入數據被配置如下:

csv input for regular expressions

加入不必在所有配置行,因爲我們將提供的連接條件,從而使其成爲有效的完整外部聯接。

篩選組件,你將不得不使用DOC_TEXTREGEX_TEXT領域在REGEXP操作執行檢查的基礎。

enter image description here

對於本文檔輸入

DOC_ID;DOC_TEXT 
1;DFGBGGG 
2;UHLLJAL 
3;JJJJHHH 
4;FGAKKBL 

和這個表達式輸入

REGEX_ID;REGEX_TEXT 
1;.*A.* 
2;.*B.* 

改造將輸出以下結果:

DOC_ID;DOC_TEXT;REGEX_ID;REGEX_TEXT 
1;DFGBGGG;2;.*B.* 
2;UHLLJAL;1;.*A.* 
4;FGAKKBL;1;.*A.* 
4;FGAKKBL;2;.*B.* 
+0

這不完全我首先想要什麼,但它工作正常,謝謝! – AnthonyB

+0

不客氣!我想還有改進的空間。什麼不適合你的需求? –

+0

對我來說,問題是如果一個文檔與多個正則表達式匹配,我會重複它們。我現在不需要它,但我知道我可以通過後續步驟來完成。 – AnthonyB