Delta Live Tables数据质量检查:使用expect能否查询无效记录?
Delta Live Tables
expect 规则的无效记录追踪方案 你完全可以通过expect规则追踪到具体的无效记录,不只是获取统计数字,两种常用实现方法如下:
方法1:通过DLT事件日志查询无效记录详情
DLT会自动把所有数据质量检查事件写入事件日志表,你可以直接查询该日志获取不符合expect规则的具体记录:
- 事件日志默认存储路径为
dbfs:/pipelines/<你的流水线ID>/system/events,可直接在Spark SQL中作为表查询 - 筛选
event_type = 'flow_progress'的事件,展开details字段里的data_quality节点,其中包含每个expect规则的检查结果,包括不符合规则的记录样本(开启样本采集后)及对应行信息 - 示例查询语句:
SELECT details.data_quality.expectations.name AS rule_name, details.data_quality.expectations.failed_records AS failed_count, details.data_quality.expectations.failed_record_samples AS failed_samples FROM delta.`dbfs:/pipelines/xxx/system/events` WHERE event_type = 'flow_progress' AND details.data_quality IS NOT NULL
方法2:在数据表中直接标记无效记录
如果需要在业务数据表里直接区分有效/无效记录,可在定义DLT表时结合expect规则和自定义列:
- 用
when函数生成标记列(比如is_valid),标记每条记录是否符合规则 - 同时保留
expect规则来统计数据质量指标 - 示例代码(Python):
@dlt.table def my_table(): return ( spark.read.table("source_table") .withColumn("is_valid", expr("amount > 0 AND customer_id IS NOT NULL")) .withColumn("invalid_reason", when(~col("is_valid"), concat_ws(",", when(col("amount") <= 0, "金额非法"), when(col("customer_id").isNull(), "客户ID为空") ) ) ) .transform(dlt.expect("valid_amount_and_customer", "is_valid")) )
之后你可以直接查询my_table,通过is_valid = false筛选所有无效记录,同时DLT监控面板也会展示该expect规则的统计数据。
总结:expect规则不仅能提供无效记录的统计数,还能通过事件日志或自定义列的方式追踪到具体的无效记录,完全满足你保留并追踪无效数据的需求。
内容的提问来源于stack exchange,提问作者Ender
相关产品推荐
相关产品推荐

