使用Delta Live Tables管理數據質量
使用期望定義數據集內容上的數據質量約束。期望由描述、不變量和當記錄不符合不變量時所采取的操作組成。您可以使用Python裝飾器或SQL約束子句將期望應用於查詢。
使用預計
,預計或下降
,預計或失敗
期望使用Python或SQL查詢來定義單個數據質量約束。
屬性在Python管道中定義帶有一個或多個數據質量約束的期望@expect_all
,@expect_all_or_drop
,@expect_all_or_fail
修飾符。這些裝飾器接受Python字典作為參數,其中鍵是期望名稱,值是期望約束。
您可以通過查詢Delta Live Tables查看數據質量度量,例如違反預期的記錄數量事件日誌.
保留無效記錄
使用預計
當您想要保留違反期望的記錄時,使用操作符。違反預期的記錄將與有效記錄一起添加到目標數據集:
@dlt.預計(“有效時間戳”,"col(" timestamp ") > '2012-01-01'")
約束valid_timestamp預計(時間戳>“2012-01-01”)
刪除無效記錄
使用預計或下降
操作符防止處理無效記錄。違反期望的記錄將從目標數據集中刪除:
@dlt.expect_or_drop(“valid_current_page”,"current_page_id不是空,current_page_title不是空")
約束valid_current_page預計(current_page_id是不零而且current_page_title是不零)在違反下降行
無效記錄失敗
無效記錄不可接受時,使用預計或失敗
操作符在記錄驗證失敗時立即停止執行。如果操作是表更新,係統自動回滾事務:
@dlt.expect_or_fail(“valid_count”,"count > 0")
約束valid_count預計(數>0)在違反失敗更新
當管道因違反期望而失敗時,必須修複管道代碼以正確處理無效數據,然後才能重新運行管道。
失敗預期修改轉換的Spark查詢計劃,以跟蹤檢測和報告違規所需的信息。對於許多查詢,您可以使用此信息來確定導致違規的輸入記錄。例外示例如下:
預期違反:{“flowName”:“a - b”," verboseInfo ": {“expectationsViolated”:(x1是負的)," inputData ": {"a": {"x1": 1,"y1": "a}," b ": {“x2”:1、“日元”:“aa”}}," outputRecord ": {“x1”:1、“日元”:“一”,“x2”:1、“日元”:“aa”},“missingInputData”:假的}}
多個預期
使用expect_all
當驗證失敗的記錄應包含在目標數據集中時,指定多個數據質量約束:
@dlt.expect_all({“valid_count”:"count > 0",“valid_current_page”:"current_page_id不是空,current_page_title不是空"})
使用expect_all_or_drop
當從目標數據集中刪除驗證失敗的記錄時,指定多個數據質量約束:
@dlt.expect_all_or_drop({“valid_count”:"count > 0",“valid_current_page”:"current_page_id不是空,current_page_title不是空"})
使用expect_all_or_fail
當驗證失敗的記錄應該停止管道執行時,指定多個數據質量約束:
@dlt.expect_all_or_fail({“valid_count”:"count > 0",“valid_current_page”:"current_page_id不是空,current_page_title不是空"})
你也可以將期望集合定義為變量,並將其傳遞給管道中的一個或多個查詢:
valid_pages={“valid_count”:"count > 0",“valid_current_page”:"current_page_id不是空,current_page_title不是空"}@dlt.表格@dlt.expect_all(valid_pages)defraw_data():#創建原始數據集@dlt.表格@dlt.expect_all_or_drop(valid_pages)defprepared_data():#創建清潔和準備好的數據集