[ETL] Nifi 初體驗 - Join

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

簡單的說明流程:
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 — 2
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

2. UpdateAttribte for classfing ata : 在流程中有兩段UpdateAttribute的Processes,在這一段主要是區分資料流,各自給予參數與相對的值,此設定是要在流程後利用此參數來區分資料,才能進行Join。
Attribute Description:
  • fragment.index = 0, 1. → 此參數為MergeContent使用。
  • metric = a, b.
UpdateAttribute Setting for classifying

3. UpdateAttribute for Joining style : 流程中的第二段參數設定,主要是要設定Join 的型態。
Attribute Description:
  • fragment.count = 2.
  • fragment.idenifier = X,以上的參數設定,也適用於MergeContent
  • schema.name = metric.
UpdateAttribute for Joining style

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

5. MergeContent : 這個Process是讓我在測試Join時,撞到最多牆的一個地方,在merge時,是利用先前設定的參數進行的,相關的參數可以參考官方文件。
MergeContent description
MergeContent Setting
the view after merging
6. QueryRecord: 使用SQL來將已經做分類的資料流,利用參數設定來進行Join。
Attribute Description:
  • query:
attribute query setting
QueryRecord Setting
以上就是Join"表面"的區塊一設定,細節藏在魔鬼中。

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

區塊二設定:
在第一個出現Record Reader and Write的Process是在UpdateRecord.
  • Record Reader : AvroReader.
AvroReader Setting
  • Record Write : AvroRecordSetWriter.
    Setting Description:
    a. Schema Access Strategy (very IMPORTANT): AvroSchemaRegistry.
    b. Schema Name : ${schema.name}. 這部分一樣式擷取傳入的FileFlow中參數 schema.name的值。
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
  • Record Write : AvroRecordSetWriter-Query.
    Setting Description:
    a. Schema Registry: AvroSchemaRegistry.
    b. Schema Name: metric.
AvroRecordSetWriter-Query Setting

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

最後Join的結果如下:
Result

Nifi的測試就到這裡了,在測試的期間,可以感受到Nifi的功能很廣,但測試目的主要是處理DB的基本功能,例如Join, Group by等等,因此Nifi並不適合。
avatar-img
2會員
5內容數
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
在ETL架構中,許多使用者會將S3 Data Lake與Crawlers及Athena結合使用,然而是否可以用Glue Job取代Crawlers呢?本文探討了S3 Data Lake的運作流程,解釋了Crawler、Data Catalog和Glue Job在數據處理中的角色與功能差異。
Thumbnail
船槳用力插入水中激濺起嘩啦、嘩啦、嘩啦的破水聲!一聲聲地劃破清晨的寧靜,夏季五點多,天早已透亮,連著我十位槳手正在推動龍舟在碧潭的水面高速前進!船首傳來教練聲:手打直、身體要彎、腳要蹬讓船身飛起來,大家加油! 腦中的思敘回到出發前……
Thumbnail
玩具租借服務介紹及心得分享,由公司根據不同階段寄送玩具,讓孩子盡情嘗試後再決定是否續租。透過觀察孩子興趣可減少買錯玩具的機會,也讓孩子擁有的玩具更多樣性,提供瞭解玩具種類的參考。服務便利又貼心,可以有效減少玩具被閒置的情況。期待未來更多人一起加入。
Thumbnail
去了旭山動物園看企鵝、科學教育館,也第一次吃了懷石料理~跟我們一起去旭川逛逛吧~
Thumbnail
我們去北海道玩耍,第一次體驗商務艙與機場貴賓室,再訪我們的愛店~
Thumbnail
ETL是資料倉儲領域中一個重要的概念,全稱為Extract-Transform-Load,中文可譯為"抽取-轉換-載入"。ETL的作用是將來自不同來源的資料抽取出來,經過清理、轉換、整合等處理後,最終將處理好的資料載入到資料倉儲或其他單一的資料存放區
Thumbnail
歌名為玫瑰與盔甲。大家應該都馬上想到小王子的隱喻。但愛玫瑰一定是小王子那樣嗎? Antoine Elie這首歌編曲旋律聽起來滑順偏甜,乍聽只聽出唱的是給玫瑰的絮語。玫瑰原來是有刺的,而愛包容了玫瑰的刺。再仔細唱吧,愛足以包容刺,拯救了玫瑰。真的是這樣嗎?
Thumbnail
「初體驗瑜伽:深刻而痛苦的啟發」 (瑜伽課沒有拍照,附上拳擊以及跳床的相片) 初次瑜伽的痛苦體驗確實令人難忘。 在全新的瑜伽教室裡,我興奮地回應女教練,成為六位同學中唯一的新生。 教練友善地提醒我,新同學可以慢慢來,不用勉強。我回應說沒問題,但內心卻想著既然來了,就應該全力以
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
在ETL架構中,許多使用者會將S3 Data Lake與Crawlers及Athena結合使用,然而是否可以用Glue Job取代Crawlers呢?本文探討了S3 Data Lake的運作流程,解釋了Crawler、Data Catalog和Glue Job在數據處理中的角色與功能差異。
Thumbnail
船槳用力插入水中激濺起嘩啦、嘩啦、嘩啦的破水聲!一聲聲地劃破清晨的寧靜,夏季五點多,天早已透亮,連著我十位槳手正在推動龍舟在碧潭的水面高速前進!船首傳來教練聲:手打直、身體要彎、腳要蹬讓船身飛起來,大家加油! 腦中的思敘回到出發前……
Thumbnail
玩具租借服務介紹及心得分享,由公司根據不同階段寄送玩具,讓孩子盡情嘗試後再決定是否續租。透過觀察孩子興趣可減少買錯玩具的機會,也讓孩子擁有的玩具更多樣性,提供瞭解玩具種類的參考。服務便利又貼心,可以有效減少玩具被閒置的情況。期待未來更多人一起加入。
Thumbnail
去了旭山動物園看企鵝、科學教育館,也第一次吃了懷石料理~跟我們一起去旭川逛逛吧~
Thumbnail
我們去北海道玩耍,第一次體驗商務艙與機場貴賓室,再訪我們的愛店~
Thumbnail
ETL是資料倉儲領域中一個重要的概念,全稱為Extract-Transform-Load,中文可譯為"抽取-轉換-載入"。ETL的作用是將來自不同來源的資料抽取出來,經過清理、轉換、整合等處理後,最終將處理好的資料載入到資料倉儲或其他單一的資料存放區
Thumbnail
歌名為玫瑰與盔甲。大家應該都馬上想到小王子的隱喻。但愛玫瑰一定是小王子那樣嗎? Antoine Elie這首歌編曲旋律聽起來滑順偏甜,乍聽只聽出唱的是給玫瑰的絮語。玫瑰原來是有刺的,而愛包容了玫瑰的刺。再仔細唱吧,愛足以包容刺,拯救了玫瑰。真的是這樣嗎?
Thumbnail
「初體驗瑜伽:深刻而痛苦的啟發」 (瑜伽課沒有拍照,附上拳擊以及跳床的相片) 初次瑜伽的痛苦體驗確實令人難忘。 在全新的瑜伽教室裡,我興奮地回應女教練,成為六位同學中唯一的新生。 教練友善地提醒我,新同學可以慢慢來,不用勉強。我回應說沒問題,但內心卻想著既然來了,就應該全力以