什麼是獎章湖屋建築?
獎章架構描述一系列數據層,代表儲存在 Lakehouse 中的數據品質。 Azure Databricks 建議採用多層式方法來建置企業數據產品的單一事實來源。
此架構可保證不可部分完成性、一致性、隔離性和持久性,因為數據會先經過多層驗證和轉換,再儲存在經過優化以有效率分析的配置中。 青銅(未經驗證)、銀(經驗證)和黃金(豐富)等詞彙描述每一層的數據品質。
作為數據設計模式的 Medallion 架構
獎章架構是用來以邏輯方式組織數據的數據設計模式。 其目標是逐步改善數據的結構和質量,因為它流經架構的每一層(從青銅⇒銀⇒金層數據表)。 獎章架構有時也稱為 多躍點架構。
藉由透過這些層級進行數據,組織可以累加改善數據品質和可靠性,使其更適合商業智慧和機器學習應用程式。
遵循獎章架構是建議的最佳做法,但並非需求。
問題 | 青銅卡 | 銀色 | 金卡 |
---|---|---|---|
此層會發生什麼事? | 記錄資料擷取 | 數據清理和驗證 | 維度模型化和匯總 |
誰是預定的使用者? | - 資料工程師 - 資料作業 - 合規性和稽核小組 |
- 資料工程師 - 資料分析師(針對仍保留深入分析所需詳細資訊的更精簡數據集使用銀層) - 資料科學家(建置模型並執行進階分析) |
- 商務分析師和BI開發人員 - 數據科學家和機器學習 (ML) 工程師 - 主管和決策者 - 營運小組 |
範例獎章架構
此獎章架構範例顯示商業營運小組使用的銅級、銀層和金層。 每一層都會儲存在作業目錄的不同架構中。
- 銅層 (
ops.bronze
):從雲端記憶體、Kafka 和 Salesforce 擷取原始數據。 此處不會執行任何資料清除或驗證。 - 銀層 (
ops.silver
): 資料清除和驗證會在這一層中執行。- 客戶和交易的相關數據會藉由卸除 Null 並隔離無效的記錄來清除。 這些數據集會聯結至名為
customer_transactions
的新數據集。 數據科學家可以使用此數據集進行預測性分析。 - 同樣地,Salesforce 中的帳戶和商機數據集會聯結以建立
account_opportunities
,這會使用帳戶信息來增強。 - 數據
leads_raw
會在名為leads_cleaned
的數據集中清除。
- 客戶和交易的相關數據會藉由卸除 Null 並隔離無效的記錄來清除。 這些數據集會聯結至名為
- 黃金層 (
ops.gold
): 此層是專為商務用戶所設計。 它包含的數據集比銀級和金級少。customer_spending
:每位客戶的平均和總支出。account_performance
:每個帳戶的每日效能。sales_pipeline_summary
:端對端銷售管線的相關信息。business_summary
:高匯總主管人員的資訊。
擷取原始數據至銅層
銅層包含未經評估的原始數據。 在銅層中擷取的數據通常具有下列特性:
- 以原始格式包含並維護數據源的原始狀態。
- 會以累加方式附加,並隨著時間成長。
- 適用於擴充銀表數據的工作負載取用,而不是供分析師和數據科學家存取。
- 做為單一事實來源,保留數據的精確度。
- 藉由保留所有歷程記錄數據來啟用重新處理和稽核。
- 可以是來自來源的串流和批次交易的任何組合,包括雲端物件儲存區(例如 S3、GCS、ADLS)、訊息總線(例如 Kafka、Kinesis 等),以及同盟系統(例如 Lakehouse 同盟)。
限制數據清除或驗證
在銅層中執行最少的數據驗證。 為了確保數據遭到捨棄,Azure Databricks 建議將大部分字段儲存為字串、VARIANT 或二進位檔,以防止非預期的架構變更。 可能會新增中繼資料列,例如資料來源或資料來源(例如 )。 _metadata.file_name
驗證和重複數據刪除銀層中的數據
數據清除和驗證會在銀層中執行。
從青銅層建置銀桌
若要建置銀層,請從一或多個銅級或銀表讀取數據,並將數據寫入銀表。
Azure Databricks 不建議直接從擷取寫入銀表。 如果您直接從擷取寫入,您將因為數據源中的架構變更或損毀記錄而造成失敗。 假設所有來源都是僅附加來源,請將大部分的讀取設定為串流讀取。 批次讀取應該保留給小型數據集(例如小型維度數據表)。
銀層代表已驗證、清除和擴充的數據版本。 銀層:
- 應該一律至少包含一個經過驗證的非匯總表示法,每個記錄。 如果匯總表示法驅動許多下游工作負載,這些表示法可能位於銀層中,但通常是在金層中。
- 這是您執行資料清理、重複資料刪除和正規化的位置。
- 藉由更正錯誤和不一致來增強數據品質。
- 將數據結構為更消耗性的格式以供下游處理。
強制執行數據品質
下列作業會在銀表中執行:
- 強制執行結構描述
- 處理 Null 和遺漏值
- 重複資料刪除
- 解決順序錯亂和遲到的數據問題
- 數據品質檢查和強制執行
- 結構描述演進
- 類型轉型
- 聯結
開始模型化數據
在銀層中開始執行數據模型很常見,包括選擇如何代表高度巢狀或半結構化的數據:
- 使用
VARIANT
數據類型。 - 使用
JSON
字串。 - 建立結構、地圖和陣列。
- 扁平化架構或將數據正規化為多個數據表。
使用金層進行電源分析
黃金層代表可驅動下游分析、儀錶板、ML 和應用程式之數據的高度精簡檢視。 黃金層數據通常會高度匯總,並篩選特定時段或地理區域。 其中包含對應至商務功能和需求的語意有意義的數據集。
金層:
- 由針對分析和報告量身打造的匯總數據所組成。
- 符合商業規則和需求。
- 已針對查詢和儀錶板中的效能優化。
符合商業規則和需求
金層是您將藉由建立關聯性及定義量值,以使用維度模型來模型化數據以進行報告和分析的位置。 具有黃金數據存取權的分析師應該能夠找到領域特定數據並回答問題。
由於金層會建立商務領域模型,因此有些客戶會建立多個金層,以滿足不同的業務需求,例如 HR、財務和 IT。
建立針對分析和報告量身打造的匯總
組織通常需要為平均值、計數、最大值和最小值等量值建立聚合函數。 例如,如果您的企業需要回答有關每周總銷售額的問題,您可以建立稱為的具體化檢視來預先匯總此數據,讓分析師和其他人員不需要重新建立常用的具體化檢視 weekly_sales
。
CREATE OR REPLACE MATERIALIZED VIEW weekly_sales AS
SELECT week,
prod_id,
region,
SUM(units) AS total_units,
SUM(units * rate) AS total_sales
FROM orders
GROUP BY week, prod_id, region
優化查詢和儀錶板中的效能
優化金層數據表以達到效能是最佳作法,因為這些數據集經常查詢。 大量的歷史數據通常會在斜體層中存取,而不會在金層中具體化。
藉由調整數據擷取的頻率來控制成本
藉由判斷擷取數據的頻率來控制成本。
數據擷取頻率 | 成本 | 延遲 | 宣告式範例 | 程式範例 |
---|---|---|---|---|
連續累加擷取 | 較高 | Lower | - 使用 spark.readStream 串流數據表從雲端記憶體或訊息總線擷取。- 更新此串流數據表的 Delta Live Tables 管線會持續執行。 - 在筆記本中使用 結構化串流程序代碼 spark.readStream ,從雲端記憶體或訊息總線內嵌至 Delta 數據表。- 筆記本是使用具有連續作業觸發程式的 Azure Databricks 作業進行協調。 |
|
觸發的累加擷取 | 較低 | 較高 | - 使用 spark.readStream 從雲端記憶體或訊息總線串流數據表擷取。- 更新此串流數據表的管線是由作業的排程觸發程式或檔案抵達觸發程式所觸發。 - 具有 Trigger.Available 觸發程式之筆記本中的結構化串流程序代碼。- 此筆記本是由作業的排程觸發程式或檔案抵達觸發程式所觸發。 |
|
使用手動累加擷取進行批次擷取 | 較低 | 最高,因為不常執行。 | - 使用 spark.read 從雲端記憶體串流數據表擷取。- 不使用結構化串流。 請改用分割區覆寫等基本類型,一次更新整個分割區。 - 需要廣泛的上游架構來設定累加處理,這允許成本類似於結構化串流讀取/寫入。 - 也需要依 datetime 欄位分割源數據,然後將該分割區中的所有記錄處理到目標。 |