assert_true断言函数

前言

在 Spark SQL 和 Hive 中,assert_true 是一个非常实用的内置断言函数。它主要用于数据质量校验(Data Quality Check)和ETL 任务的熔断机制。

简单来说,它的作用就像是代码里的"安检员":如果数据符合预期,就放行;如果数据出现异常,就直接报错并中断整个任务。

语法与返回值

sql 复制代码
assert_true(condition) 

参数:condition 是一个返回布尔值(TRUE 或 FALSE)的表达式。

返回值:

如果 condition 为 TRUE:返回 NULL(静默放行,不影响数据处理)。

如果 condition 为 FALSE 或 NULL:抛出 RuntimeException 异常,直接导致当前的 SQL 任务失败报错。

sql 复制代码
SELECT 
    add_table_day,
    interval_day,
    -- 如果 total_income < 0,任务会直接报错挂掉,防止脏数据入库
    assert_true(total_income >= 0), 
    total_income
FROM 增量表;


SELECT 
    add_table_day,
    -- 利用 IF 或 COALESCE 结合 assert_true
    -- 如果收入>=0,返回收入;如果<0,触发断言报错任务挂掉
    IF(total_income >= 0, total_income, cast(assert_true(false) as double)) as total_income
FROM 增量表;

总结

功能:条件为真返回 NULL,条件为假/空则报错中断任务。

定位:ETL 管道中的"熔断器"。

好处:宁可任务报错(Fail Fast),也不让脏数据污染下游。当你对某些字段有绝对的业务底线要求时(如:主键不为空、金额不为负、留存率不能大于100%),用它准没错