在資料驅動的時代,確保資料品質對於企業至關重要。資料測試作為第一道防線,能及早發現錯誤和不一致性。然而,面對日益複雜的資料管道,僅靠測試並不足夠。資料可觀測性提供實時監控和追蹤,補足了測試的不足,兩者結合才能確保資料的可靠性。透過工具和技術,如 Apache Griffin、Great Expectations 和 dbt,企業可以更好地實踐資料測試和可觀測性,提升資料品質並提高資料處理效率。

資料測試與可觀測性:確保資料品質的關鍵

在現代資料驅動的商業環境中,資料品質是企業成功的關鍵因素之一。隨著資料量的爆炸性增長和資料管道的日益複雜,確保資料的可靠性和品質變得越來越重要。本文將探討資料測試和資料可觀測性的重要性,以及如何在資料管道中實作這些概念。

資料測試的重要性

資料測試是確保資料品質的第一道防線。它涉及對資料進行一系列檢查,以確保資料符合預期的標準和要求。資料測試可以幫助發現資料中的錯誤、不一致性和缺失值,從而避免這些問題在後續的資料處理和分析中造成更大的影響。

資料測試的實踐

在實踐中,資料測試通常涉及編寫SQL查詢來檢查資料的完整性和正確性。例如,如果你想確保某個資料集只包含特定城市的客戶資料,你可以使用類別似以下的SQL查詢:

SELECT * FROM Customers WHERE City = "Berlin";

同樣地,如果你想檢查資料集中是否存在空值,可以使用:

SELECT * FROM Customers WHERE City IS NULL;

資料測試的挑戰

儘管資料測試非常重要,但它也面臨著一些挑戰。首先,資料測試需要對資料有深入的瞭解,包括資料的來源、格式和預期的內容。其次,資料測試需要編寫和維護大量的測試使用案例,這可能是一項耗時且耗力的任務。

資料可觀測性的五大支柱

為瞭解決資料測試的侷限性,資料可觀測性應運而生。資料可觀測性是指對資料管道中的資料進行實時監控和跟蹤,以確保資料的品質和可靠性。資料可觀測性可以分為五大支柱:

  1. Freshness(時效性):資料是否是最新的?最後一次更新是什麼時候?上游資料是否完整?

  2. Distribution(分佈):資料是否在可接受的範圍內?資料的格式是否正確?資料是否完整?

  3. Volume(數量):所有預期的資料是否都已到達?

  4. Schema(結構):資料的結構是什麼?結構是否發生了變化?誰進行了這些更改?為什麼進行這些更改?

資料可觀測性的實踐

在實踐中,資料可觀測性需要使用各種工具和技術來實時監控資料管道中的資料。例如,可以使用監控工具來跟蹤資料的更新頻率和資料量的變化。同時,也可以使用日誌分析工具來檢查資料中的錯誤和異常。

資料測試與可觀測性的結合

資料測試和資料可觀測性是相輔相成的。資料測試可以幫助發現資料中的錯誤和不一致性,而資料可觀測性可以提供實時監控和跟蹤,以確保資料的品質和可靠性。兩者的結合可以提供全面的資料品質保證。

結合資料測試與可觀測性的好處

  1. 提高資料品質:透過結合資料測試和資料可觀測性,可以更全面地確保資料的品質和可靠性。

  2. 減少資料錯誤:資料測試可以發現資料中的錯誤,而資料可觀測性可以實時監控資料管道,以避免錯誤的發生。

  3. 提高資料處理效率:透過實時監控資料管道,可以及時發現和解決資料處理中的問題,從而提高資料處理的效率。

實作資料測試與可觀測性的工具

有多種工具可以幫助實作資料測試和資料可觀測性。以下是一些常見的工具:

  1. Apache Griffin:一個開源的資料品質解決方案,提供了資料測試和驗證的功能。

  2. Great Expectations:一個開源的資料測試框架,允許使用者定義和執行資料測試。

  3. dbt(Data Build Tool):一個資料轉換工具,提供了資料測試和驗證的功能。

使用工具的注意事項

在使用這些工具時,需要注意以下幾點:

  1. 選擇合適的工具:根據具體的需求和資料環境選擇合適的工具。

  2. 組態和調優:根據具體的需求組態和調優工具,以獲得最佳的效果。

  3. 持續監控和維護:持續監控和維護工具,以確保其正常運作。

未來,隨著資料技術的不斷發展,資料測試和可觀測性將會更加智慧化和自動化。例如,透過使用機器學習技術,可以自動檢測資料中的異常和錯誤。同時,資料測試和可觀測性也將更加整合化和統一化,透過整合多種工具和技術,提供一站式的資料品質保證解決方案。

參考資料

  1. Apache Griffin官方檔案:https://griffin.apache.org/

  2. Great Expectations官方檔案:https://docs.greatexpectations.io/

  3. dbt官方檔案:https://docs.getdbt.com/

內容解密:

這段文字主要介紹了資料測試和資料可觀測性的重要性,以及如何在資料管道中實作這些概念。資料測試是確保資料品質的第一道防線,而資料可觀測性則提供了實時監控和跟蹤,以確保資料的品質和可靠性。兩者的結合可以提供全面的資料品質保證。同時,文中也介紹了一些常見的工具,如Apache Griffin、Great Expectations和dbt,用於實作資料測試和可觀測性。

圖表翻譯:

此圖示展示了資料可觀測性的五大支柱,包括時效性、分佈、數量、結構和 lineage。這些支柱共同構成了資料可觀測性的基礎,幫助企業實時監控和跟蹤資料管道中的資料,以確保資料的品質和可靠性。

  graph LR
    A[資料可觀測性] --> B[時效性]
    A --> C[分佈]
    A --> D[數量]
    A --> E[結構]
    A --> F[lineage]

圖表翻譯:

此圖示展示了資料可觀測性的五大支柱。時效性檢查資料是否最新,分佈檢查資料的格式和範圍,數量檢查資料是否完整,結構檢查資料的 schema 是否正確,lineage 則跟蹤資料的來源和流向。這些支柱共同構成了資料可觀測性的基礎,幫助企業實時監控和跟蹤資料管道中的資料。

資料可觀察性的五大支柱:瞭解資料健康狀態的關鍵

在現代資料驅動的商業環境中,資料的可觀察性(Data Observability)成為確保資料品質和可靠性的重要環節。資料可觀察性的五大支柱為我們提供了一個全新的視角來評估資料在各個生命週期階段的健康狀態。

資料停機時間(Data Downtime)

資料停機時間是指資料遺失、錯誤或不準確的時間段,通常意味著資料管道的中斷。透過測量資料停機時間,可以確定資料的可靠性,並確保使用資料時的信心。與網站可靠性工程(SRE)測量應用程式停機時間類別似,我們也可以測量資料停機時間。

隨著資料越來越與業務成果掛鉤,我們觀察到一個轉變趨勢,即從主觀指標轉向更客觀、可量化的指標。對於許多團隊來說,測量資料的正常執行時間和停機時間是一個良好的起點,可以幫助理解資料的健康狀態。

瞭解下游資料品質

通常,直到資料到達分析層甚至被送回原始應用程式和服務時,我們才會意識到資料是「不良」的。團隊可以利用監控和可觀察性工具來捕捉資料品質問題,或根據對資料的假設定一系列測試。

一旦資料進入分析層,團隊可以透過以下幾種方式來跟蹤、評估和回應資料品質和可靠性:

  • 資料可靠性儀錶板(Data Reliability Dashboard):跟蹤檢測時間(TTD)、解決時間(TTR)和其他資料品質指標。
  • 服務水平協定(SLAs):建立客戶承諾和未達標的懲罰機制。
  • 服務水平指標(SLIs):測量的具體數字,例如Slack的SRE團隊測量其成功率作為伺服器傳送的200回應數量。
  • 服務水平目標(SLOs):為SLIs設定的實際目標值,例如產品功能的成功率達到99%,95%的時間內。

設定SLAs和SLIs的重要性

在瞭解資料品質時,最關鍵的一步是與利益相關者協調,明確他們打算如何使用資料,以及什麼樣的資料品質是可靠的。選擇和遵守SLI對於資料組織的成功至關重要,因為它是用來評估效能的指標。

資料品質的衡量標準

傳統上,資料品質由資料管理員和資料治理長官者根據幾個定義特徵來衡量。根據資料管理協會英國分會的說法,公司根據六個關鍵維度來衡量資料品質:

  1. 完整性(Completeness):資料是否完整?
  2. 及時性(Timeliness):資料是否準時到達?
  3. 有效性(Validity):資料是否符合語法要求(格式、型別或範圍)?
  4. 準確性(Accuracy):資料是否真實反映其所代表的現實環境?
  5. 一致性(Consistency):資料是否符合公認的定義?
  6. 唯一性(Uniqueness):個別資料點是否被記錄多次?

對於資料工程師來說,衡量資料品質可能歸結為跟蹤以下指標:

  • 資料與無關或錯誤資料的比例。
  • 給定資料集中的空值或缺失值的數量。
  • 資料的及時性。
  • 重複值的百分比。
  • 資料的一致性。
  • 使用資料的功能團隊數量。

建立資料平台

除了在資料管道的所有階段進行監控和警示之外,提供可靠的資料還需要一個周密的資料平台——一種能夠從資料擷取到分析全方位管理資料的技術組合。

資料平台的需求會隨著業務變化而改變。對於一家2000人的電子商務公司來說,「正確」的資料平台與一家20人的金融科技新創公司相比,會有很大不同,但仍有一些核心層是所有資料平台都需要具備的。

我們將資料堆積疊分為六個層:擷取、儲存和處理、分析等。

  graph LR
    A[資料擷取] --> B[資料儲存]
    B --> C[資料處理]
    C --> D[資料分析]
    D --> E[資料視覺化]
    E --> F[資料洞察]

圖表翻譯: 上圖展示了資料從擷取到最終洞察的整個流程,每一步都建立在前一步的基礎上,最終實作資料驅動的決策。

內容解密:

此圖表展示了資料處理的流程,包括資料擷取、儲存、處理、分析、視覺化和最終的洞察。資料從擷取開始,經過儲存和處理,最後到達分析階段,並進一步形成視覺化結果,最終提供有價值的洞察。

資料平台架構的六大基礎層

在建構資料平台時,需要考量六個相互關聯的基礎層,分別是:資料攝取、資料儲存與處理、資料轉換與建模、商業智慧與分析、探索與治理,以及品質與可觀察性,如圖5-4所示。

此圖示呈現了建構資料平台所需的六大層,每一層之間相互關聯並非簡單堆積疊,也無優先順序之分。

圖表翻譯: 圖5-4展示了建構資料平台的六大基礎層,包括資料攝取、資料儲存與處理、資料轉換與建模、商業智慧與分析、探索與治理,以及品質與可觀察性。這些層之間是相互關聯的,而非簡單的堆積疊關係。

資料攝取

現代資料攝取的過程相當複雜,通常涉及從多種來源收集結構化和非結構化的資料,這也被稱為ETL(提取、轉換、載入)和ELT(提取、載入、轉換)過程中的提取和載入階段。

大多數ETL工具從外部來源或內部系統提取資料,在暫存區域內將其轉換為可接受(通常是關係型)格式以進行儲存,然後將其載入到資料函式庫中。然而,隨著現代雲端資料倉儲的出現,可以儲存未轉換的資料,資料團隊可以採用更新的整合架構ELT——從來源提取原始資料,直接將其載入到資料倉儲中,並在過程結束時進行轉換。

-- 示例:使用SQL進行資料提取
SELECT * FROM source_table;

內容解密:

這段SQL陳述式用於從來源表中提取所有資料。SELECT * 表示選擇所有欄位,FROM source_table 指定了資料來源。資料提取是資料攝取的第一步,後續還需要進行轉換和載入。

市場上有許多攝取工具可供選擇,無論是現成的還是開源的,儘管一些資料團隊選擇使用自定義程式碼並構建自定義框架來處理攝取。

資料儲存與處理

儲存層是資料堆積疊的核心部分,新攝取的資料將被儲存在這裡。由於雲原生資料儲存解決方案的發展,資料儲存與處理的方式與十年前相比已經大不相同。這些工具使得公司能夠以更低的成本儲存和處理大量資料。

資料儲存解決方案主要分為三種型別:資料倉儲、資料湖和資料湖倉。資料倉儲是完全託管的解決方案,通常要求資料按照特定的模式進行結構化。資料湖則通常由資料團隊使用開源和現成技術的組合自定義構建,支援原始的、非結構化的資料和解耦的、分散式計算。

# 示例:使用Python進行資料儲存
import pandas as pd
data = {'name': ['Alice', 'Bob'], 'age': [25, 30]}
df = pd.DataFrame(data)
df.to_csv('data.csv', index=False)

內容解密:

這段Python程式碼建立了一個簡單的DataFrame並將其儲存為CSV檔案。pandas 函式庫用於資料操作,to_csv 方法將DataFrame儲存到檔案中。這展示了資料儲存的一種簡單方式。

資料轉換與建模

資料轉換和建模是兩個不同的過程。資料轉換涉及準備原始資料以進行分析和報告。資料建模則是識別資料中的關鍵概念和關係,並將其建模為表格和它們之間的關係。

-- 示例:資料轉換的SQL陳述式
SELECT 
    column1,
    column2,
    CASE 
        WHEN column3 > 100 THEN 'high'
        ELSE 'low'
    END AS category
FROM 
    source_table;

內容解密:

這段SQL陳述式進行了資料轉換,將column3的值根據條件轉換為categoryCASE 陳述式用於根據條件建立新的欄位,這是資料轉換的一種常見操作。

商業智慧與分析

一旦資料被收集、轉換和儲存,就需要使其可供業務使用者使用。商業智慧和分析層使資料變得可操作。分析工具檢索、分析和呈現資料,透過儀錶板和資料視覺化,讓使用者能夠利用資料獲得可行的洞察。

# 示例:使用Python進行資料視覺化
import matplotlib.pyplot as plt
data = {'category': ['A', 'B', 'C'], 'value': [10, 20, 30]}
plt.bar(data['category'], data['value'])
plt.show()

內容解密:

這段Python程式碼使用matplotlib函式庫建立了一個簡單的柱狀圖。資料視覺化使資料更易於理解和解釋,是商業智慧和分析的重要組成部分。

隨著資料量的不斷增長和業務需求的變化,資料平台需要不斷演進以滿足新的挑戰。未來,資料平台的發展將更加註重智慧化、自動化和實時處理能力。同時,資料安全和隱私保護也將成為資料平台建設的重要考量因素。企業需要持續投入資源,不斷最佳化資料平台,以保持競爭優勢。

建構可靠的資料平台:資料探索與可觀察性

在現代資料驅動的商業環境中,資料品質和可靠性對於企業的成功至關重要。為了實作這一點,資料團隊需要具備適當的工具和流程來確保資料的準確性和可信度。本文將探討資料探索(Data Discovery)和資料可觀察性(Data Observability)的重要性,以及如何利用這些概念來建構一個可靠的資料平台。

資料探索:動態理解資料的新方法

傳統的資料目錄(Data Catalogs)長期以來一直是資料治理的核心工具,它們提供了一個後設資料的清單,幫助團隊瞭解資料的可存取性、健康狀況和位置。然而,隨著資料生態系統變得越來越複雜,傳統的資料目錄開始顯現出其侷限性。現代資料團隊面臨著大量非結構化和無模式資料的挑戰,這使得傳統的資料目錄難以跟上資料堆積疊的增長和多樣性。

資料探索是一種新的方法,它提供了一個根據資料使用方式的動態理解。透過資料探索,團隊可以實時瞭解資料的當前狀態,而不僅僅是其理想或「目錄登記」的狀態。這種方法使得資料治理標準在不同領域之間保持一致的同時,能夠動態地回答有關資料的各種問題,例如:

  • 哪些資料集是最新的?哪些可以被棄用?
  • 最後一次更新這個表格是什麼時候?
  • 在我的領域中,某個欄位的含義是什麼?
  • 誰有權存取這些資料?最後一次使用這些資料是什麼時候?由誰使用?
  • 這些資料的上游和下游依賴關係是什麼?
  • 這是生產級別的資料嗎?
  • 哪些資料對於我的領域的業務需求至關重要?
  • 我對這些資料的假設是否正在被滿足?

實作範例:使用資料探索工具

import pandas as pd

# 假設我們有一個資料框架 df,包含了我們的資料
df = pd.read_csv('data.csv')

# 使用資料探索工具來瞭解資料的結構和內容
def data_discovery(df):
    # 取得資料的形狀
    print(f"資料形狀:{df.shape}")
    
    # 取得資料的欄位名稱
    print(f"欄位名稱:{df.columns.tolist()}")
    
    # 取得資料的統計摘要
    print(df.describe())

data_discovery(df)

內容解密:

這段程式碼展示瞭如何使用Python的Pandas函式庫來進行基本的資料探索。data_discovery函式首先讀取資料到一個DataFrame中,然後輸出資料的形狀、欄位名稱和統計摘要。這種基本的資料探索有助於團隊快速瞭解資料的結構和內容。

資料可觀察性:建立對資料的信任

資料可觀察性是現代資料堆積疊中的第六層,它是一種貫穿整個資料生命週期的互聯方法。就像DevOps工程師透過可觀察性來確保應用程式的可靠性和穩定性一樣,資料工程師也需要將相同的原則應用於資料。資料可觀察性指的是組織全面瞭解其系統中資料在每個生命週期階段的健康狀況。

資料可觀察性應用了DevOps實踐中的自動化監控、警示和故障排除,涵蓋了五個支柱:新鮮度(Freshness)、分佈(Distribution)、數量(Volume)、架構(Schema)和血統(Lineage)。端對端的資料可觀察性對於確保資料品質至關重要。有效的可觀察性工具將連線到現有的資料堆積疊,提供端對端的血統,使您能夠自動監控靜態資料,而不會從資料儲存中提取資料,從而避免安全或合規風險。

實作範例:使用資料可觀察性工具

import datetime

class DataObservability:
    def __init__(self, data):
        self.data = data
    
    def check_freshness(self):
        # 假設資料中有一個時間戳欄位 'timestamp'
        latest_timestamp = self.data['timestamp'].max()
        if (datetime.datetime.now() - latest_timestamp).total_seconds() > 3600:
            print("資料太舊,請檢查資料來源!")
        else:
            print("資料是新的。")

    def check_distribution(self):
        # 檢查資料的分佈,例如檢查某個欄位的分佈
        print(self.data['column_name'].value_counts())

# 使用資料可觀察性工具
data_obs = DataObservability(df)
data_obs.check_freshness()
data_obs.check_distribution()

內容解密:

這段程式碼定義了一個DataObservability類別,用於檢查資料的新鮮度和分佈。check_freshness方法檢查資料的時間戳是否在最近一小時內,如果不是,則發出警示。check_distribution方法則用於檢查某個欄位的分佈情況。這種資料可觀察性工具有助於團隊及時發現資料問題,確保資料的可靠性和準確性。

圖表翻譯:資料可觀察性的五大支柱

  graph LR
    A[資料可觀察性] --> B[新鮮度]
    A --> C[分佈]
    A --> D[數量]
    A --> E[架構]
    A --> F[血統]

圖表翻譯: 此圖示展示了資料可觀察性的五大支柱,包括新鮮度、分佈、數量、架構和血統。這些支柱共同構成了資料可觀察性的基礎,幫助團隊全面瞭解資料的健康狀況和可靠性。