資料反正規化

使用 Microsoft Fabric 進行資料轉換與分析

Luis Silva

Solution Architect - Data & AI

什麼是正規化?

  • 組織資料以減少重複並提升完整性
  • 根據 1970 年電腦科學家 Tedd Codd(關聯模型發明者)提出的原則
  • 第三正規化形(3NF):非鍵屬性只依賴主鍵
使用 Microsoft Fabric 進行資料轉換與分析

什麼是正規化?

  • 透過鍵與新表來取代會導致資料重複的屬性,即可達成正規化。

 

說明將一個表拆成三個以降低重複的示意圖

使用 Microsoft Fabric 進行資料轉換與分析

正規化範例

範例表:包含電玩遊戲標題、發行商與遊戲類型。示例列:遊戲 Gran Turismo、發行商 Sony、類型 Racing

  • publishergenre 的文字值大量重複。
使用 Microsoft Fabric 進行資料轉換與分析

正規化範例

範例表:電玩遊戲標題與其發行商、類型。發行商與類型的文字敘述已移至獨立表,遊戲表中的文字改為參照該主表的數字 ID

  • publishergenre 的文字值現在各只出現一次。
  • Games 表以數字鍵取代 publishergenre,可節省空間
使用 Microsoft Fabric 進行資料轉換與分析

反正規化

  • 反正規化以重複來「攤平」資料模型;與正規化相反
  • 反正規化可減少表數量,但會增加重複

將多個表合併為一個的示意圖

使用 Microsoft Fabric 進行資料轉換與分析

什麼時候該用正規化?

  • OLTP 交易系統

    • 最佳化資料寫入(個別 insert、update 與 delete)
    • 確保資料完整性
  • 事實表

    • 數百萬筆列
    • 減少儲存空間
    • 模型更易理解
    • 星型綱要的基礎

 

星型綱要示意圖,著重標示事實表

使用 Microsoft Fabric 進行資料轉換與分析

什麼時候該用反正規化?

  • 維度表
    • 通常比事實表小很多
    • 重複少=少聯結=查詢更快
    • 查詢效能提升勝過多存一點重複資料的成本
    • 星型綱要比雪花綱要更簡單

 

星型綱要示意圖,著重標示維度表

使用 Microsoft Fabric 進行資料轉換與分析

實作反正規化

 

 

三種工具的圖示:SQL、Spark 與 Dataflows

使用 Microsoft Fabric 進行資料轉換與分析

用 SQL 實作反正規化

  • 使用 SELECT + JOIN 敘述
-- [dim_videogames]: Videogames table
-- [dim_genres]: Genres table
-- [dim_publishers]: Publishers table

SELECT game_id, title, gen.genre, pub.publisher
FROM dim_videogames_norm vidg
JOIN dim_genres gen
  ON vidg.genre_id = gen.genre_id
JOIN dim_publishers pub
  ON vidg.publisher_id = pub.publisher_id
使用 Microsoft Fabric 進行資料轉換與分析

用 Spark 實作反正規化

  • 使用 DataFrame 的 join() 與 select()
# [videogamesDF]: Videogames DataFrame
# [genresDF]: Genres DataFrame
# [publishersDF]: Publishers DataFrame

videogames1DF = videogamesDF.join(genresDF, ["genre_id"])
videogamesdenormDF = videogames1DF.join(publishersDF, ["publisher_id"])
videogamesdenormDF.select("game_id", "title", "genre_id", "publisher_id").show()
使用 Microsoft Fabric 進行資料轉換與分析

用 Dataflows 實作反正規化

  • 用查詢載入資料
  • 使用「Merge queries」或「Merge queries as new」轉換來連接查詢

Dataflow 螢幕截圖:使用 Merge queries as new 將 videogames、genres、publishers 三個查詢合併

使用 Microsoft Fabric 進行資料轉換與分析

一起來練習吧!

使用 Microsoft Fabric 進行資料轉換與分析

Preparing Video For Download...