Schema Drift Detection, Column Profiling, and the Data Quality Checks Your Team Is Skipping
If you ask a data team what they monitor, most will say freshness and row counts. Maybe null rates on a few critical columns. Those are table stakes — the checks everyone reaches for first because they're easy and they catch the most common failure: a pipeline that stopped running.
But the incidents that actually damage trust aren't stale tables. They're structural changes nobody saw coming. A column gets renamed upstream, and three dashboards silently start returning nulls. A type changes from varchar to integer, and a report that was joining on a string ID suddenly produces zero rows. An engineer adds a column to a staging table and the downstream ETL starts writing it into the wrong position in a fixed-width export.
These are schema-level failures, and they're qualitatively different from volume or freshness problems. They don't trip row count alerts. They don't show up as stale data. They show up as wrong data — the kind where the dashboard still loads, the numbers still look plausible, and it takes three days before someone notices the revenue chart dropped a segment.
Fastero's data quality monitoring is built around three pillars that specifically target this class of problem: schema drift detection, automated column profiling, and cross-source schema inspection. Together they cover the structural blind spots that freshness checks miss entirely.
Pillar 1: Schema drift detection
Schema drift detection watches your database schemas and alerts when something changes structurally — a column added, removed, renamed, or changed type.
Here's the mental model: Fastero maintains a hash of every monitored table's column schema (names, types, ordering). On every check cycle, it re-introspects the live table, computes a new hash, and compares. If the hash differs, that's drift. No ML, no statistical modeling — just a deterministic comparison of what the schema looked like last time versus what it looks like now.
This catches the class of problem that is almost impossible to detect with row-count or freshness checks. Consider a real scenario: an engineer on your product team alters a column in Postgres from varchar(255) to integer because the application code stopped using string IDs six months ago. The migration runs fine, the app works fine, and nobody thinks to mention it to the analytics team. Meanwhile, three dashboards join on that column against a dimension table that still stores it as varchar. The join produces zero matches. The charts don't error — they just show blank or zero for that segment.
With drift detection enabled, Fastero catches the type change on the next check cycle, flags it as a schema drift event, and fires an alert. Instead of discovering the problem from a confused exec three days later, the data team sees it in Slack within minutes.
The drift detection also tracks tables appearing and disappearing at the catalog level — it compares the set of tables discovered from the live database against the registered data assets, surfacing tables that were added or removed since the last scan. This matters for environments where upstream teams create and drop tables without coordinating with downstream consumers.
Pillar 2: Automated column profiling
Knowing that a schema hasn't changed structurally is necessary but not sufficient. A column can keep its name and type while its actual content degrades in ways that break downstream logic. Column profiling catches this second class of failure.
Fastero samples rows from each monitored table and computes per-column statistics: nullability, distinct count, min/max values, inferred data type distribution, and cardinality. These aren't one-time snapshots — they run on a schedule, so you build a profile over time that makes anomalies visible.
The statistics that matter most in practice:
Nullability rate. A column that was 0.1% null last week and is 14% null today almost always means an upstream contract broke — a form validation was removed, an API field became optional, or a join stopped matching. This is not the same as a null rate check you'd write by hand, because the profiler computes it for every column in the table, not just the ones you remembered to write a query for.
Cardinality. A status column with 4 distinct values that suddenly has 47 usually means bad data is leaking through. A country_code column that drops from 180 distinct values to 12 means a filter is silently truncating your pipeline. Cardinality shifts that don't correspond to real business changes are almost always bugs.
Min/max range. An order_total column with a max of $12,000 that suddenly reports $1.2 million might be a real whale customer — or it might be a decimal point error in the source system. The profiler flags the range change; you decide whether it's signal or noise.
The key difference versus writing these checks by hand: profiling runs against every column in every monitored table. You're not choosing which columns to watch based on your current understanding of what might go wrong. You're watching all of them and getting alerted when any column's profile shifts beyond its historical baseline.
Fastero
Connect your database. Ask questions. Get dashboards.
Postgres, BigQuery, Snowflake, and 10+ sources — live-connected, AI-powered, no dashboard builder learning curve.
Try free →Pillar 3: Cross-source schema inspection
The third pillar is less about detecting problems and more about having the context needed to respond to them. Schema inspection gives you full schema awareness across all your connected sources — every table, every column, every type — with cross-referencing.
When Fastero introspects a connection, it doesn't just pull table names. It resolves view definitions back to their base tables, so you can trace a view in your reporting layer back to the physical tables it depends on. It works across Postgres, Redshift, MySQL, and MSSQL, each using the appropriate system catalog or information_schema query.
This matters when drift is detected, because the first question is always "what does this affect?" If you know a column changed type on orders.customer_id, schema inspection tells you which views reference that column, and Fastero's lineage graph can trace the dependency forward to queries, dashboards, and metrics. The impact analysis computes a blast radius — "this change affects 3 dashboards, 2 scheduled reports, and 1 metric definition" — and attaches it to the drift alert so the person reading the Slack notification knows exactly what's at stake without digging through documentation.
Without this layer, every drift alert is just "something changed" and requires manual investigation. With it, the alert tells you what changed, what depends on it, and how severe the downstream impact is likely to be.
How the three work together
The real value isn't any one of these in isolation — it's the loop they create together. Walk through the scenario end to end:
-
Schema inspection catalogs your connected sources — tables, columns, types, view dependencies — and keeps that catalog current on a schedule.
-
A product engineer runs
ALTER TABLE orders ALTER COLUMN customer_id TYPE integerin Postgres. -
Drift detection catches the type change on its next cycle. The column hash for
ordersno longer matches. -
Impact analysis traces the dependency graph from
orders.customer_iddownstream and identifies the three dashboards and one scheduled report that join on that column. -
Column profiling on the next run confirms the practical consequence: the join against
dim_customers(which still storescustomer_idasvarchar) now returns zero matches for that segment, and the null rate in the dashboard's result set spiked from 0% to 100% for the affected dimension. -
A Slack alert fires with the full context: what changed, what's affected, and what the downstream data impact looks like.
The data team responds before anyone sees broken charts. That's the difference between a data quality incident and a data quality non-event.
Why this replaces Monte Carlo and Soda for most teams
Monte Carlo starts at roughly $100k/year. Soda's enterprise tier is in the same range. Both are excellent products — if you have the table count, team size, and compliance requirements to justify them.
But the core data quality checks most teams under 50 people actually need are exactly the three described above, plus the freshness and volume checks covered in how to monitor data quality without a $40k platform. The gap between DIY SQL checks and a $100k observability platform has always been wide, and most of it is structural monitoring — the schema-level awareness that SQL checks are awkward at expressing and tedious to maintain.
Fastero fills that gap: drift detection, column profiling, and schema inspection run automatically across your connected sources, with alerts routed to Slack and impact analysis attached. You're not writing and maintaining individual information_schema queries for every table you care about. You're not paying six figures for a platform designed for 500-table warehouses when you have 40 tables that matter.
If you want to go deeper on the scheduling and alerting layer, the triggers product page covers the full range of trigger types — cron, event-based, Snowflake, Kafka — and monitoring schema drift in BigQuery covers the warehouse-specific patterns for BigQuery users.
Try Fastero free — connect your databases, get automated schema drift detection and column profiling across all your sources. No credit card required.

