MetricSign
Start free
Data Observability7 min·

Monte Carlo Data Observability: How It Works and Where It Stops

Learn how Monte Carlo data observability works — ML anomaly detection, lineage, circuit breakers — and where it stops at

What Monte Carlo Data Actually Does

Monte Carlo data observability is a platform built to answer one question: is the data in your warehouse reliable right now? It sits between your ingestion layer and your transformation layer, monitoring tables, schemas, and data flows for anomalies — without you writing a single test upfront.

The core idea is borrowed from software reliability engineering. Monte Carlo calls it the Data Reliability Platform: a system that continuously observes your data, learns what "normal" looks like, and alerts you when something deviates from that baseline.

In practice, this means Monte Carlo connects to your data warehouse — Snowflake, BigQuery, Databricks, Redshift — and starts profiling your tables automatically. It tracks:

  • Row counts per table, per time window
  • Null rates per column
  • Schema changes (column drops, type changes, renames)
  • Distribution shifts in numeric columns
  • Freshness — when was this table last updated

Within a few days of connecting, Monte Carlo has enough history to build baselines. After roughly one to two weeks, the anomaly detection becomes operationally useful. You start getting alerts like: "Table orders_daily had 3,200 rows yesterday. Today it has 14. This is outside the expected range."

This is genuinely useful. Most data teams spend significant time triaging "the numbers look off" reports from business users. Monte Carlo catches many of these issues before they reach a dashboard.

How the ML-Based Detection Works

Monte Carlo's anomaly detection is not threshold-based in the traditional sense. You do not set IF row_count < 1000 THEN alert. Instead, it uses time-series models that adapt to your data's patterns — seasonality, weekly cycles, growth trends.

For each monitored field, Monte Carlo maintains a dynamic expected range. If your transactions table normally has 50,000–60,000 rows on a Monday but only 20,000–25,000 on a Sunday, the system accounts for that. A Sunday row count of 23,000 does not trigger an alert. A Monday row count of 23,000 does.

The models run on metadata, not on the actual data content. Monte Carlo queries your warehouse's information schema and statistics, not the rows themselves. This is important for two reasons: it keeps query costs manageable, and it avoids data privacy issues.

Lineage is the other core component. Monte Carlo builds a graph of dependencies between tables — which tables feed which other tables. When an anomaly fires on an upstream table, Monte Carlo can show you the downstream impact: which derived tables are affected, which queries depend on them.

The lineage graph is built from query logs. Monte Carlo parses your warehouse's query history to infer SELECT ... FROM table_a JOIN table_b patterns and constructs the dependency graph automatically. No manifest files required, though dbt integration is supported and improves accuracy.

Circuit breakers are a more recent feature. You can define rules that block pipeline runs when anomalies are detected — integrated with tools like Airflow, dbt Cloud, and Fivetran. If Monte Carlo detects a schema change on a source table, it can prevent a downstream dbt job from running and corrupting your mart tables.

A typical circuit breaker configuration looks like this:

# Monte Carlo circuit breaker in dbt Cloud
on-run-start:
  - "{{ mc_run_check(table='raw.orders', check_type='freshness') }}"

If the check fails, the dbt run aborts before transformations execute.

Where Monte Carlo Performs Well

Monte Carlo is a well-engineered product for warehouse-layer observability. Here is where it genuinely solves real problems.

Schema drift detection is probably its strongest use case. Warehouses accumulate upstream source changes that break transformations silently. A source system renames customer_id to cust_id, the dbt model runs, no error is thrown, and suddenly your customer dimension has nulls in the join key. Monte Carlo catches the schema change immediately and can block the pipeline before the damage propagates.

Freshness monitoring without custom SQL is another strong point. Instead of writing:

SELECT MAX(updated_at) FROM raw.events
HAVING MAX(updated_at) < NOW() - INTERVAL '6 hours'

...for every table you care about, Monte Carlo handles this automatically across your entire catalog. For large warehouses with hundreds of source tables, this is a real time saver.

Cross-table volume anomalies are harder to catch with standard dbt tests. If your sessions table drops 40% in volume but every individual column passes its null/unique tests, a static test suite will not catch it. Monte Carlo's ML-based detection will.

dbt integration works well in practice. Monte Carlo ingests your dbt manifest and enriches its lineage graph with model documentation, tags, and test results. You get a unified view of warehouse health without switching between the dbt Cloud UI and a separate observability tool.

Incident management is built in. When an anomaly fires, Monte Carlo creates an incident, tracks acknowledgment and resolution, and logs root cause notes. For teams running data SLAs this is useful for post-mortems.

The platform is mature, well-documented, and has enterprise-grade features: SSO, role-based access, SOC 2 Type II compliance. For a Snowflake- or BigQuery-heavy stack with a large dbt project, it covers a lot of ground.

Where Monte Carlo Stops: The BI Layer Gap

Monte Carlo's scope ends at the warehouse boundary. This is by design — it is a warehouse observability tool. But this creates a gap that matters for most data teams in practice.

Power BI and Tableau are invisible to Monte Carlo. When a Power BI dataset fails to refresh, Monte Carlo does not know. When a Tableau extract times out, Monte Carlo does not know. When an ADF pipeline stalls halfway through loading data into a Power BI Premium workspace, Monte Carlo sees the source side of the pipeline but not the report-side outcome.

The downstream visibility stops at the warehouse table. Consider this chain:

Source DB → ADF Pipeline → Snowflake table → dbt model → Power BI dataset → Dashboard

Monte Carlo monitors everything up to and including the dbt model output. Whether the Power BI dataset actually refreshed, whether the scheduled refresh ran on time, whether the dataset is in an error state — that is outside Monte Carlo's scope.

Report-level correlation is missing. Even if Monte Carlo alerts you that an upstream table had a volume anomaly, it cannot tell you which specific Power BI reports or Tableau workbooks are currently showing stale or incorrect data. You need to manually trace the impact through your BI layer.

BI-specific failures do not surface. Power BI refresh errors like DataSource.Error: OLE DB or ODBC error, gateway timeouts, incremental refresh boundary issues, or Premium capacity throttling — none of these generate signals in Monte Carlo because Monte Carlo does not query the Power BI REST API.

Fabric and ADF pipeline status are similarly out of scope. An ADF pipeline run that ends in Partially Succeeded status, or a Fabric Dataflow Gen2 that fails silently — Monte Carlo does not monitor these.

This is not a criticism of Monte Carlo's design. It is a warehouse tool, and it does that job well. But for teams that run Power BI, Tableau, ADF, or Fabric as primary delivery layers, there is a monitoring gap between the warehouse and the end user.

Stack Fit: When Monte Carlo Is Enough

Monte Carlo is a strong standalone choice in specific stack configurations. Understanding these helps you decide where it covers your needs fully and where you need additional tooling.

Monte Carlo fits well when:

  • Your primary delivery layer is a data warehouse exposed via SQL — analysts query Snowflake or BigQuery directly, or through a semantic layer like dbt Semantic Layer or Looker LookML
  • Your BI tool is Looker or Sigma, which connect live to the warehouse. If the warehouse table is correct, the BI report is correct. Monte Carlo's warehouse coverage translates directly to report reliability
  • Your team runs large dbt projects (50+ models) with complex dependency chains where upstream failures have wide blast radii
  • You need data catalog + observability in one product — Monte Carlo's field-level lineage doubles as documentation
  • You have enterprise compliance requirements (SOC 2, HIPAA) that require an auditable observability record

Monte Carlo is less sufficient when:

  • Your BI delivery runs through Power BI scheduled refresh, Power BI Premium/Fabric datasets, or Tableau Server/Cloud extract refreshes. These have their own refresh orchestration that operates independently of your warehouse pipeline
  • You use Azure Data Factory or Fabric Data Pipelines as your orchestration layer and need pipeline-run-level observability (not just table-level outcomes)
  • Your users report issues at the report level — "this dashboard shows last week's data" — and you need to trace that back through the BI refresh layer, not just the warehouse
  • You run a Databricks + Power BI stack where data flows through Delta tables into Power BI DirectQuery or import mode — the refresh chain is not visible to warehouse-side tooling alone

In short: if your data ends in the warehouse and BI tools are thin read layers on top of it, Monte Carlo covers you well. If BI tools have their own extract, refresh, and scheduling logic, you have a monitoring gap.

Using Monte Carlo and MetricSign Together

For teams running warehouse-layer observability alongside Power BI, Tableau, ADF, or Fabric, Monte Carlo and MetricSign cover different parts of the stack. They are not competing for the same monitoring surface.

Monte Carlo answers: Is the data in my warehouse correct and fresh?

MetricSign answers: Did the data make it to the report, on time, without errors?

A concrete example: your dbt model fct_revenue runs cleanly. Monte Carlo sees correct row counts and no anomalies. But the ADF pipeline that loads fct_revenue into a Power BI Premium dataset ran into a gateway timeout. The dashboard is showing yesterday's numbers. Monte Carlo has no signal for this. MetricSign monitors the Power BI refresh status via the Power BI REST API and fires an alert when the dataset refresh fails or runs more than 30 minutes late.

The integration point is the handoff layer. Monte Carlo's circuit breakers can block dbt runs when upstream data is bad. MetricSign picks up from where the warehouse output enters the BI delivery layer — dataset refreshes, report publish events, ADF pipeline run status, Fabric workspace health.

For a Snowflake + dbt + Power BI stack, a complete observability setup looks like this:

LayerToolWhat it monitors
Source freshnessMonte CarloRaw table row counts, nulls, schema
TransformationMonte Carlo + dbt testsModel correctness, circuit breakers
BI refreshMetricSignDataset refresh status, refresh duration
Report availabilityMetricSignReport-level access, stale data detection
ADF pipelinesMetricSignPipeline run status, failure correlation

Neither tool alone covers the full chain. Together, they close the gap between "data left the warehouse" and "users see correct numbers in reports."

Frequently asked questions

What does Monte Carlo data observability actually monitor?+
Monte Carlo monitors tables and schemas in your data warehouse — Snowflake, BigQuery, Databricks, Redshift. It tracks row counts, null rates, schema changes, value distribution shifts, and freshness. It uses ML-based time-series models to detect anomalies without requiring you to write threshold rules manually. It also builds a lineage graph of table dependencies from your warehouse query logs.
Does Monte Carlo monitor Power BI or Tableau?+
No. Monte Carlo's scope ends at the warehouse layer. It does not connect to the Power BI REST API, Tableau Server/Cloud API, or ADF pipeline runs. If a Power BI dataset refresh fails, a Tableau extract times out, or an ADF pipeline stalls after writing to the warehouse, Monte Carlo has no visibility into those events. For BI-layer and pipeline-level monitoring, you need a separate tool like MetricSign.
How long does Monte Carlo take to set up useful alerts?+
Monte Carlo typically needs one to two weeks of data history to build accurate baselines for its ML models. During the first few days after connecting to your warehouse, you will see alerts but with a higher false-positive rate as the models calibrate. Most teams find the anomaly detection becomes operationally reliable after about 10–14 days of observed traffic patterns. Schema-change and freshness alerts are accurate from day one since they do not require historical baselining.
How does Monte Carlo compare to writing dbt tests?+
They are complementary, not substitutes. dbt tests are assertion-based: you define exactly what should be true (`not_null`, `unique`, `accepted_values`). They catch known failure modes. Monte Carlo is behavior-based: it learns what normal looks like and alerts on deviations you did not anticipate. A row-count drop of 40% will not fail a standard dbt test unless you specifically wrote a test for it. Monte Carlo catches it automatically. Best practice is to use both: dbt tests for business-rule assertions, Monte Carlo for volume and distribution anomalies.
What stacks is Monte Carlo best suited for?+
Monte Carlo works best on warehouse-centric stacks where Snowflake, BigQuery, or Databricks is the primary data store and BI tools connect live to the warehouse (Looker, Sigma, Tableau live connections). It is particularly strong for large dbt projects with complex dependency graphs. It is less suitable as a complete solution for teams whose primary BI delivery relies on Power BI scheduled refresh, Fabric datasets, or ADF-orchestrated pipelines, since those layers are outside Monte Carlo's monitoring scope.
Can Monte Carlo block pipeline runs when data quality issues are detected?+
Yes, through circuit breakers. Monte Carlo integrates with Airflow, dbt Cloud, and Fivetran to block pipeline runs when anomalies are detected on upstream tables. For example, if a source table's schema changes unexpectedly, a Monte Carlo circuit breaker can abort a dbt Cloud job before it runs transformations against the changed schema. This prevents bad data from propagating further downstream. Configuration is done via Monte Carlo's API or native integrations with each orchestration tool.

How we compare