You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 09:41:20