Warnings

On this page

Warnings run after data is committed. They log results without failing the model. See Validation for how warnings fit into the three-stage model.

-- @warning: name(args)

Available Macros

MacroExampleDescription
freshness(col, duration)freshness(updated_at, 24h)Data staleness
row_count(op, n)row_count(>=, 100)Row count check
row_count_delta(max_pct)row_count_delta(20)Change percentage between runs
sum_delta(col, max_pct)sum_delta(amount, 10)Sum change ratio between runs
mean_delta(col, max_pct)mean_delta(amount, 15)Mean change ratio between runs
approaching_limit(col)approaching_limit(amount)Nearing configured threshold
null_percent(col, max_pct)null_percent(email, 5)NULL percentage
not_null(col)not_null(customer_id)NULL count
unique(col)unique(order_id)Duplicate detection
min(col, op, val)min(amount, >, 0)Minimum value
compare(col, op, val)compare(amount, >=, 0)Value comparison
mean(col, op, val)mean(amount, >=, 100)Average check
low_entropy(col, min)low_entropy(status, 1.0)Data diversity
cardinality(col, op, n)cardinality(region, >=, 3)Distinct value count
in_list(col, 'vals')in_list(status, 'active,inactive')Allowed values

Delta macros (row_count_delta, sum_delta, mean_delta) use DuckLake’s table_changes() to compare against the previous run.

Custom Macros

Defined in config/macros/warnings.sql. Convention: ondatra_warning_{name}(t, ...).

CREATE OR REPLACE MACRO ondatra_warning_high_refund_rate(t, col, max_pct) AS TABLE
  SELECT printf('high refund rate: %.1f%%', 100.0 * SUM(CASE WHEN c < 0 THEN 1 ELSE 0 END) / COUNT(*))
  FROM query(printf('SELECT %s AS c FROM %s', col, t))
  HAVING 100.0 * SUM(CASE WHEN c < 0 THEN 1 ELSE 0 END) / COUNT(*) > max_pct;
-- @warning: high_refund_rate(amount, 5)