Validation rules
Row-level and field-level rules written in JavaScript or Python, evaluated per record. Each rule chooses its own failure action, so a null postcode and a corrupt batch are not the same event.
Data quality
Validate, filter, dedupe, enrich, and reshape while the data is moving — then verify what landed with SQL or dbt tests. Not a separate quality tool bolted on after the fact.
Three places to catch a problem, and the cheapest one is first. A row filtered in the source query costs nothing to move, transform, or roll back.
Capabilities
Row-level and field-level rules written in JavaScript or Python, evaluated per record. Each rule chooses its own failure action, so a null postcode and a corrupt batch are not the same event.
Drop rows that fail an expression before they reach the destination. Write it in SQL or JavaScript. Against a relational source, push it into the WHERE clause and the rejected rows never leave the database.
Drop records matching an earlier row on a field set you define. Each incoming row is compared against what the transformation has already processed.
Query CSV, JSON, XML, Excel, Parquet, Avro, APIs, message queues, and NoSQL with real SQL — filtering, aggregation, and joins, including over nested structures.
Look up reference data and derive calculated fields in script. Cache a reference dataset in memory once and reuse it across transformations instead of querying per row.
Flatten hierarchies into tables or nest flat rows back into documents, by dragging. Any shape on either side, across JSON, XML, Avro, and Parquet.
Turn rows into columns grouped by a key, or convert key-value pairs into real columns. Control the leading column, the column cap, and what carries through.
JOIN, UNION, MINUS, INTERSECT, and EXCEPT — on one database through native SQL, or across heterogeneous sources that have no business being joined but need to be.
Run SQL checks ahead of a load and again once it lands, or hand the assertion to dbt tests in the same workflow. A load that passed is not the same as a load that is correct.
Specifications
A validation rule carries its own failure action, per field and per record. The same source can drop a malformed phone number and refuse the entire file for a missing primary key.
FAQ
Start your trial
Point a flow at a source you do not trust and see what the rules catch.