[ETL] Nifi 初體驗 - Join

更新於 發佈於 閱讀時間約 8 分鐘

解決完Inert的問題之後,下一個想在測試的流程就是SQL中的Join,是因為這方式在原本的ETL工具中使用最多功能。


簡單的說明流程:

Join Flow

Join Flow

在測試Join的時候,遇到了很多問題,除了Solution非常的少,大多的建議都是Nifi並不適合使用SQL中的Join。有幸可以找到這篇文章,雖然我們使用的資料來源不一樣,但依照相同的設定與概念建立Nifi,還是可以達到一樣的效果。
Reference : https://medium.com/@surajnagendra/merge-csv-files-apache-nifi-21ba44e1b719


在Nifi的設計如下:

Nifi Join Setting — 1

Nifi Join Setting — 1

Nifi Join Setting — 2

Nifi Join Setting — 2

Nifi Insert Setting

Nifi Insert Setting


設定的方式區分為兩個區塊,區塊一是指Process表面的設定,區塊二是指Flow Configure中Reader和Write的設定。

區塊一說明:

1. ExcuteSQL: 從DB倒出資料的Process. 其實在Nifi中,可以導出SQL的Process 很多,除了這個以外,還有先前有提到的QueryDatabaseTable,我並沒有很專研Nifi,但就功能性來說ExcuteSQL還有包含Pre-SQL與Post-SQL,在設計上因為最終是希望可以將資料寫入DB中,因此可以在這Process搭配Delete SQL。另一方面,這Process也可以搭配控制流程的GenerateFlowFile,因此就選擇了這個Process。但相信越是簡單的Process一定也有它的道理。


ExecuteSQL Setting

ExecuteSQL Setting


2. UpdateAttribte for classfing ata : 在流程中有兩段UpdateAttribute的Processes,在這一段主要是區分資料流,各自給予參數與相對的值,此設定是要在流程後利用此參數來區分資料,才能進行Join。
Attribute Description:

  • fragment.index = 0, 1. → 此參數為MergeContent使用。
  • metric = a, b.

MergeContent詳細說明可參考官方文件: https://nifi.apache.org/docs/nifi-docs/components/org.apache.nifi/nifi-standard-nar/1.6.0/org.apache.nifi.processors.standard.MergeContent/index.html

UpdateAttribute Setting for classifying

UpdateAttribute Setting for classifying


3. UpdateAttribute for Joining style : 流程中的第二段參數設定,主要是要設定Join 的型態。
Attribute Description:

  • fragment.count = 2.
  • fragment.idenifier = X,以上的參數設定,也適用於MergeContent
  • schema.name = metric.

詳細說明可參考官方文件: https://nifi.apache.org/docs/nifi-docs/components/org.apache.nifi/nifi-standard-nar/1.6.0/org.apache.nifi.processors.standard.MergeContent/index.html

UpdateAttribute for Joining style

UpdateAttribute for Joining style


4. UpdateRecord:對 record 設定參數。
Attribute Description:

  • /m = ${metric}. ← 此寫法是抓取此流程以上的Processes中有參數設定寫入的參數值。
${metric} value

${metric} value

UpdateRecord Setting

UpdateRecord Setting


5. MergeContent : 這個Process是讓我在測試Join時,撞到最多牆的一個地方,在merge時,是利用先前設定的參數進行的,相關的參數可以參考官方文件。

MergeContent description

MergeContent description

MergeContent Setting

MergeContent Setting

the view after merging

the view after merging



6. QueryRecord: 使用SQL來將已經做分類的資料流,利用參數設定來進行Join。
Attribute Description:

  • query:
attribute query setting

attribute query setting

QueryRecord Setting

QueryRecord Setting

以上就是Join"表面"的區塊一設定,細節藏在魔鬼中。


關鍵的設定看到在UpdateRecord中的Record Reader和Record Write,這就是Join真正的驅動者。


區塊二設定:
在第一個出現Record Reader and Write的Process是在UpdateRecord.

  • Record Reader : AvroReader.
AvroReader Setting

AvroReader Setting

  • Record Write : AvroRecordSetWriter.
    Setting Description:
    a. Schema Access Strategy (very IMPORTANT): AvroSchemaRegistry.
    b. Schema Name : ${schema.name}. 這部分一樣式擷取傳入的FileFlow中參數 schema.name的值。
AvroRecordSetWriter Setting

AvroRecordSetWriter Setting

第二次出現Reader and Write的設定是在QueryRecord,設定內容如下:

  • Record Reader: AvroReader-Query.
    Setting Description:
    a. Schema Registry: AvroSchemaRegistry.
    b. Schema Name : ${schema.name}.這部分一樣式擷取傳入的FileFlow中參數 schema.name的值。
AvroReader-Query Setting

AvroReader-Query Setting

  • Record Write : AvroRecordSetWriter-Query.
    Setting Description:
    a. Schema Registry: AvroSchemaRegistry.
    b. Schema Name: metric.
AvroRecordSetWriter-Query Setting

AvroRecordSetWriter-Query Setting


設定以上兩組Flow Configuration時,都會設定到Schema Registry,在Join中,就是根據這個設定,來確定最終需要顯示的欄位是什麼,使用的是Apache特有格式Avor.
Schema Registry設定如下:

  • metric =
attribute metric Setting

attribute metric Setting

AvroSchemaRegistry Setting

AvroSchemaRegistry Setting

最後Join的結果如下:

Result

Result


Nifi的測試就到這裡了,在測試的期間,可以感受到Nifi的功能很廣,但測試目的主要是處理DB的基本功能,例如Join, Group by等等,因此Nifi並不適合。

留言
avatar-img
留言分享你的想法!
avatar-img
Hedwig Hsu的沙龍
2會員
5內容數
Hedwig Hsu的沙龍的其他內容
2022/05/20
文字對於壓抑的自己,是人生各式酸甜苦辣的重要出口。
2022/05/20
文字對於壓抑的自己,是人生各式酸甜苦辣的重要出口。
2022/05/15
Date:2022/05/15 今天寫完離別文章後,情感也開竅了,開始在這熟悉的房間裡,尋找摸不到的影子。
2022/05/15
Date:2022/05/15 今天寫完離別文章後,情感也開竅了,開始在這熟悉的房間裡,尋找摸不到的影子。
2022/01/18
回想第一次發作的時候是在高中時,發生的狀況印象不深刻,只有幾個關鍵字「熱」、「非常暈」、「虹瑾與倪君」、「學長」、「老爸」與「胃炎」。 最後醫生並未檢查出有發炎反應,開出的診斷是「暈眩症」,很快的在兩三個小時後就離開醫院了,戴著室友辛苦往返公司,頂著大雨帶回來的安全帽回家了。
2022/01/18
回想第一次發作的時候是在高中時,發生的狀況印象不深刻,只有幾個關鍵字「熱」、「非常暈」、「虹瑾與倪君」、「學長」、「老爸」與「胃炎」。 最後醫生並未檢查出有發炎反應,開出的診斷是「暈眩症」,很快的在兩三個小時後就離開醫院了,戴著室友辛苦往返公司,頂著大雨帶回來的安全帽回家了。
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
ETL是資料倉儲領域中一個重要的概念,全稱為Extract-Transform-Load,中文可譯為"抽取-轉換-載入"。ETL的作用是將來自不同來源的資料抽取出來,經過清理、轉換、整合等處理後,最終將處理好的資料載入到資料倉儲或其他單一的資料存放區
Thumbnail
ETL是資料倉儲領域中一個重要的概念,全稱為Extract-Transform-Load,中文可譯為"抽取-轉換-載入"。ETL的作用是將來自不同來源的資料抽取出來,經過清理、轉換、整合等處理後,最終將處理好的資料載入到資料倉儲或其他單一的資料存放區
Thumbnail
專案產生大量又瑣碎的作業做處理,眼下要從iReport的設定檔(jrxml)擷取每一項套印參數出來,提供給別人做Excel公式的資料表進行作業。
Thumbnail
專案產生大量又瑣碎的作業做處理,眼下要從iReport的設定檔(jrxml)擷取每一項套印參數出來,提供給別人做Excel公式的資料表進行作業。
Thumbnail
在 UiPath 學習道路上,我們有時會不知如何使用各項功能、設定參數,因此 RPAI 數位優化器今天要介紹的是:如何透過 UiPath 功能進行字串結合和拆分,因為不少業務流程都有機會使用到字串,我們在進行流程開發時,即可透過 VB 函式快速進行大量且穩定的操作,因此千萬別錯過這個功能!
Thumbnail
在 UiPath 學習道路上,我們有時會不知如何使用各項功能、設定參數,因此 RPAI 數位優化器今天要介紹的是:如何透過 UiPath 功能進行字串結合和拆分,因為不少業務流程都有機會使用到字串,我們在進行流程開發時,即可透過 VB 函式快速進行大量且穩定的操作,因此千萬別錯過這個功能!
Thumbnail
承上篇【NGINX 架構 - 事件驅動架構】後續,這篇開始記錄函數庫的相關筆記 事件驅動處理函數庫: 函數庫的細節,就沒打算太過深入,我們只要知道模型的運作方式、優缺點及如何使用就足夠了。 1. select模型: 手動啟用模組編譯: 禁用模組編譯: 2. poll模型: Nginx編譯代碼:
Thumbnail
承上篇【NGINX 架構 - 事件驅動架構】後續,這篇開始記錄函數庫的相關筆記 事件驅動處理函數庫: 函數庫的細節,就沒打算太過深入,我們只要知道模型的運作方式、優缺點及如何使用就足夠了。 1. select模型: 手動啟用模組編譯: 禁用模組編譯: 2. poll模型: Nginx編譯代碼:
Thumbnail
如果你 WHERE 的條件需要常常更動,但每次都要進去 QUERY 所在的儲存格編輯語法,實在是有點太麻煩了?但其實有個小技巧,可以讓 QUERY 更新得更輕鬆。來看看吧!
Thumbnail
如果你 WHERE 的條件需要常常更動,但每次都要進去 QUERY 所在的儲存格編輯語法,實在是有點太麻煩了?但其實有個小技巧,可以讓 QUERY 更新得更輕鬆。來看看吧!
Thumbnail
進入目錄、列出目錄列表、讀取檔案內容、寫入檔案(資料)、變更檔案名稱、刪除檔案、目錄內新增檔案、變更目錄名稱、刪除目錄
Thumbnail
進入目錄、列出目錄列表、讀取檔案內容、寫入檔案(資料)、變更檔案名稱、刪除檔案、目錄內新增檔案、變更目錄名稱、刪除目錄
Thumbnail
話說我這個小懶鬼當初沒有搞懂專題分頁是什麼,所以 Tag 亂下,搞得我的專題分頁看起來很不明確。再加上最近在臉書分享的 Notion 貼文又開始有人在按讚(神奇的演算法),為了感謝大家的這一年來的支持,想要在年末的時候教大家一些我常用的小技巧!
Thumbnail
話說我這個小懶鬼當初沒有搞懂專題分頁是什麼,所以 Tag 亂下,搞得我的專題分頁看起來很不明確。再加上最近在臉書分享的 Notion 貼文又開始有人在按讚(神奇的演算法),為了感謝大家的這一年來的支持,想要在年末的時候教大家一些我常用的小技巧!
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News