Great Expectations validates data programmatically:
import great_expectations as gx
context = gx.get_context()
batch = context.get_batch({'path': 'orders.csv'})
validator = context.get_validator(batch_request=batch)
validator.expect_column_values_to_not_be_null('order_id')
validator.expect_column_values_to_be_between('amount', 0, 10000)
Expectations are declarative. Run them against any data source: files, databases, Spark DataFrames.
Integrates with Airflow, dbt, and most orchestrators. Generates documentation automatically.