A source table changed upstream. Your model compiled fine. But the output has a new null pattern, a type shift, a missing column. Catch drift in transformed data before it reaches downstream consumers.
Baselines your model schema on first run — every subsequent run is compared automatically for drift.
A source table changes upstream. Your dbt model transforms it successfully — no compilation errors. But the output has a new null pattern, a type change, or a column that disappeared. dbt tests only catch what you wrote rules for.
DataScreenIQ screens the payload before storage. A BLOCK stops the pipeline instantly — bad rows go to a dead-letter queue, not your database.
import datascreeniq as dsiq
import pandas as pd
df = pd.read_sql("SELECT * FROM analytics.fct_orders LIMIT 50000", conn)
report = dsiq.Client().screen_dataframe(df, source="fct_orders")
report.raise_on_block() # raises if data has drifted critically
Install the SDK, drop in the integration, get PASS / WARN / BLOCK on every run.
Add datascreeniq to your dbt project's Python environment.
Export DATASCREENIQ_API_KEY in your environment or add it to your secrets manager.
Create a Python script that reads model output from your warehouse and screens it. Run it after dbt run in your CI or orchestration step.
Use source="model_name" to track baselines per model. Set tighter thresholds for critical models like fct_revenue or dim_customers.
import datascreeniq as dsiq
import pandas as pd
from datascreeniq.exceptions import DataQualityError
# Models to screen after dbt run
MODELS = [
("analytics.fct_orders", "fct_orders"),
("analytics.fct_revenue", "fct_revenue"),
("analytics.dim_customers", "dim_customers"),
]
client = dsiq.Client()
for table, source in MODELS:
df = pd.read_sql(
f"SELECT * FROM {table} LIMIT 50000", conn
)
try:
report = client.screen_dataframe(df, source=source)
print(f"{source}: {report.summary()}")
report.raise_on_block()
except DataQualityError as e:
alert_team(f"dbt model {source} failed quality gate: {e}")
raise # re-raise to fail the CI step
dbt run --select +fct_orders
python scripts/dbt_quality_check.py # runs after dbt
DataScreenIQ runs 18 quality checks in a single pass — null rates, type mismatches, schema drift, outliers, duplicate rates, and more. The result is one of three verdicts.
All checks within thresholds. Pipeline proceeds to load. No action needed.
Quality degraded but above BLOCK threshold. Load proceeds, issue flagged for review.
Critical quality issue detected. Row load prevented. Dead-letter queue or alert triggered.
DataScreenIQ drops into any pipeline that can make an HTTP call.
Quality gate between extract and load.
Block merges when data quality fails.
Quality gate flow with alerting on BLOCK.
Try DataScreenIQ in 60 seconds.
Free tier: 500K rows/month. No credit card. API key in 30 seconds.
Get a free API key →