Schema 架構說明

Schema 架構說明

Schema 定義資料的結構與型別,由 Metadater 模組處理。採用三層架構對應實際資料。

三層架構

設定層級對應資料說明
MetadataDatasets管理多個表格的資料集
SchemaTable定義單一表格結構
AttributeField描述單一欄位屬性

Metadata 層級

Metadata 是最上層的結構,用於管理包含多個表格的資料集。

結構定義

class Metadata:
    id: str                      # 資料集識別碼
    name: str                    # 資料集名稱(選填)
    description: str             # 資料集描述(選填)
    schemas: dict[str, Schema]   # 表格結構字典 {table_name: Schema}

使用情境

  • 單表格場景:大多數情況下,一個資料集只包含一個表格
  • 多表格場景:當資料集包含多個相關表格時(如關聯式資料庫)
  • 資料集管理:提供資料集層級的識別和描述資訊

範例

# 單表格資料集
id: user_dataset
name: 使用者資料集
schemas:
  users:              # 單一表格
    id: users
    fields: {...}
# 多表格資料集
id: ecommerce_dataset
name: 電商資料集
schemas:
  users:              # 第一個表格
    id: users
    fields: {...}
  orders:             # 第二個表格
    id: orders
    fields: {...}
  products:           # 第三個表格
    id: products
    fields: {...}

Schema 層級

Schema 是中間層,定義單一表格的結構。

結構定義

class Schema:
    id: str                          # 表格識別碼
    name: str                        # 表格名稱(選填)
    description: str                 # 表格描述(選填)
    attributes: dict[str, Attribute] # 欄位屬性字典 {field_name: Attribute}
    stats: dict                      # 表格統計資料(選填,自動產生)

使用情境

  • 表格定義:描述單一表格的完整結構
  • 欄位管理:包含該表格所有欄位的定義
  • 結構驗證:確保資料符合預期的表格結構

在 YAML 中的表示

# 完整的 Schema 定義
id: users                  # 表格識別碼
name: 使用者表             # 表格顯示名稱
description: 系統使用者資料 # 表格說明

fields:                    # 欄位定義(Attributes)
  user_id:
    type: int64
    nullable: false
  
  username:
    type: object
    nullable: false
  
  email:
    type: object
    nullable: true
    logical_type: email

stats:                     # 表格統計(自動產生)
  row_count: 1000
  column_count: 3

Attribute 層級

Attribute 是最底層,描述單一欄位的屬性。

結構定義

class Attribute:
    name: str           # 欄位名稱
    type: str           # 資料型別
    nullable: bool      # 是否允許空值
    logical_type: str   # 邏輯型別(選填)
    description: str    # 欄位描述(選填)
    na_values: list     # 自訂空值表示(選填)
    stats: dict         # 欄位統計資料(選填,自動產生)

使用情境

  • 欄位定義:描述單一欄位的所有屬性
  • 型別約束:定義欄位的資料型別和空值處理
  • 語意標記:透過 logical_type 提供額外的語意資訊

在 YAML 中的表示

# 單一欄位的完整定義
user_id:                    # 欄位名稱(key)
  type: int64               # 資料型別
  nullable: false           # 不允許空值
  description: 使用者唯一識別碼

email:
  type: object              # 字串型別
  nullable: true            # 允許空值
  logical_type: email       # 標記為電子郵件
  description: 電子郵件地址

age:
  type: int64
  nullable: true
  description: 年齡
  stats:                    # 欄位統計(自動產生)
    count: 950              # 非空值數量
    null_count: 50          # 空值數量
    min: 18                 # 最小值
    max: 95                 # 最大值
    mean: 35.5              # 平均值

架構層級關係

Metadata (資料集)
├── Schema (表格 1)
│   ├── Attribute (欄位 1)
│   ├── Attribute (欄位 2)
│   └── Attribute (欄位 3)
├── Schema (表格 2)
│   ├── Attribute (欄位 1)
│   └── Attribute (欄位 2)
└── Schema (表格 3)
    └── Attribute (...)

實際資料對應

對應關係

Schema 層級實際資料Python 型別範例
MetadataDatasetdict[str, DataFrame]{'users': df1, 'orders': df2}
SchemaTablepd.DataFramepd.DataFrame(...)
AttributeFieldpd.Seriesdf['user_id']

Metadater 模組的角色

Metadater 模組負責處理這三層架構,提供以下功能:

  • 建立 Metadata:從資料自動推斷或從配置檔建立結構定義
  • 結構驗證:比較實際資料與預期結構的差異
  • 資料對齊:根據 metadata 調整資料結構

使用建議

  • 單表格場景:大多數情況下只需定義一個表格的欄位結構
  • 多表格場景:當資料集包含多個相關表格時,在 schemas 下定義各表格
  • 最小定義:只定義關鍵欄位(如主鍵),其餘欄位由系統自動推斷