[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並不適合。
2會員
5內容數
留言0
查看全部
發表第一個留言支持創作者!
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
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
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
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
「初體驗瑜伽:深刻而痛苦的啟發」 (瑜伽課沒有拍照,附上拳擊以及跳床的相片) 初次瑜伽的痛苦體驗確實令人難忘。 在全新的瑜伽教室裡,我興奮地回應女教練,成為六位同學中唯一的新生。 教練友善地提醒我,新同學可以慢慢來,不用勉強。我回應說沒問題,但內心卻想著既然來了,就應該全力以