前言
在 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%),用它准没错
;