データの非正規化

Microsoft Fabricでデータを変換して分析する

Luis Silva

Solution Architect - Data & AI

正規化とは

  • 冗長性を減らし整合性を高めるようデータを整理
  • 関係モデルの考案者、計算機科学者 Tedd Codd が 1970 年に提唱
  • 第三正規形 (3NF): 非キー属性は主キーのみに従属
Microsoft Fabricでデータを変換して分析する

正規化とは

  • 正規化は、キーと新しいテーブルで冗長な属性を置き換えて実現します。

 

冗長性を減らすために1つの表を3つに分割する概念図

Microsoft Fabricでデータを変換して分析する

正規化の例

ビデオゲームのタイトル、出版社、ジャンルを含むサンプル表。例: ゲーム Gran Turismo、出版社 Sony、ジャンル Racing

  • publishergenre に同一テキストが多数複製。
Microsoft Fabricでデータを変換して分析する

正規化の例

ビデオゲームのタイトル、出版社、ジャンルを含むサンプル表。publisher と genre の説明が別テーブルに移され、ゲーム表のテキストは数値 ID に置換されている

  • publishergenre のテキストは一度だけ出現
  • Games テーブルでは数値キーに置換され、省容量
Microsoft Fabricでデータを変換して分析する

非正規化

  • 非正規化は冗長性を利用してモデルを平坦化(正規化の逆)
  • テーブル数を減らすが、冗長性は増加

複数テーブルを1つに結合する概念図

Microsoft Fabricでデータを変換して分析する

いつ正規化を使うべきか

  • OLTP トランザクション系

    • 書き込み最適化(個別の挿入・更新・削除)
    • データ整合性の確保
  • ファクトテーブル

    • 数百万行
    • ストレージ削減
    • モデルを理解しやすく
    • スター・スキーマの基盤

 

ファクトテーブルを強調したスター・スキーマの図

Microsoft Fabricでデータを変換して分析する

いつ非正規化を使うべきか

  • ディメンションテーブル
    • 一般にファクトより小さい
    • 冗長性 = 結合減 = 高速クエリ
    • 余分な保存コストよりクエリ性能向上が勝る
    • スターはスノーフレークより簡潔

 

ディメンションテーブルを強調したスター・スキーマの図

Microsoft Fabricでデータを変換して分析する

非正規化の実装

 

 

3つのツール(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でデータを変換して分析する

Let's practice!

Microsoft Fabricでデータを変換して分析する

Preparing Video For Download...