macros/

On this page

Macros: reusable SQL functions loaded from config/macros/

Phase: Post-catalog | Order: 5 | Required: No

All .sql files in config/macros/ are loaded at startup. Macros are available to all models.

Directory Structure

FileContents
config/macros/helpers.sqlUtility functions (safe_divide, cents_to_dollars)
config/macros/masking.sqlData masking (mask_email, mask_ssn, hash_pii, redact)
config/macros/constraints.sqlConstraint macros for @constraint directives
config/macros/audits.sqlAudit macros for @audit directives
config/macros/warnings.sqlWarning macros for @warning directives

Scalar Macros

CREATE OR REPLACE MACRO safe_divide(a, b) AS
    CASE WHEN b = 0 THEN NULL ELSE a / b END;

CREATE OR REPLACE MACRO cents_to_dollars(cents) AS
    cents / 100.0;

Table Macros

CREATE OR REPLACE MACRO recent_orders(n) AS TABLE
    SELECT * FROM mart.orders ORDER BY order_date DESC LIMIT n;

Validation Macros

Convention: ondatra_{type}_{name}(t, ...).

CREATE OR REPLACE MACRO ondatra_audit_balanced_ledger(t) AS TABLE
  SELECT 'balances do not reconcile'
  WHERE (SELECT SUM(debit) FROM query(printf('SELECT * FROM %s', t)))
     != (SELECT SUM(credit) FROM query(printf('SELECT * FROM %s', t)));
-- @audit: balanced_ledger

For the full list of built-in macros, see Constraints, Audits, Warnings.

For DuckDB macro syntax, see the DuckDB macro documentation.