CHouseUI
Using CHouse UIData

Datasets & promises

Observed tables with their baselines, drift and usage, and promises — explicit checks evaluated on a schedule with incidents.

In the app
Data › Datasets/data/datasets
Data › Datasets in CHouse UI
Data › Datasets

Data › Datasets has three views: Observed tables (every table CHouse UI watches, with its learned baseline), Promises (the checks you wrote) and Promise health (how those checks are doing). Every table is watched from day one; a promise is how you add an explicit expectation on top — "orders are loaded by 07:00", "no duplicate order ids".

Observed tables

The list shows each table's trust state, criticality, freshness, volume in the last hour against its baseline, its promises and any drift alerts. Filter by trust state and criticality, or search.

Open a table to see:

SectionShows
HeaderEngine, size, ORDER BY, PARTITION BY, and buttons to Explorer, Lineage, Context and New promise
Rows per hour vs learned baseline · 48hWrites against the learned band
Profile & distribution driftPer-column statistics from a small sample, and which ones drifted
Schema historyColumns added, dropped or retyped
Usage · 7 daysWho reads it, and the most-filtered columns
Promises on this tableOr only the learned baseline protects this table

Pin the table's criticality here if the learned one is wrong (needs observe:edit). Trust states and baselines are explained in How data is watched.

Promises

A promise names a dataset, the checks that must stay true, and when to evaluate them.

Checks

CheckPasses when
FreshnessThe newest event time is no older than a maximum age
Row countRows per window are between a minimum and/or maximum
Volume anomalyRows per window stay inside a band learned from recent windows (with optional hard limits)
CompletenessA column is non-null for at least a given share of rows
UniquenessA set of columns has at most a given share of duplicates
ValidityA SQL predicate holds for at least a given share of rows
Schema contractExpected columns exist with the expected types (optionally no new columns)
Custom metricA SQL expression compares to a threshold (>, >=, <, <=, =, between)
DistributionA column's median, p95, null ratio, distinct ratio or top-value share stays within a tolerance of its own recent history

Each check is a warning or critical. Windowed checks need an event-time column; integer or text timestamps need their stored format.

Create a promise

  1. New promise (from Promises, a table's page, or Accept on a suggestion). Needs data_health:edit.
  2. Dataset — a table or view, or a read-only dataset query when you need joins or casts. Set the event-time column and an optional row filter (e.g. one tenant).
  3. Evaluation cadence — Daily, Weekly, Monthly, Custom cron, Manual only, or After a scheduled query succeeds (evaluate right after a materialize job loads the data).
  4. Checks — add them by hand, or let the AI coverage advisor propose an editable draft from the schema and recent evidence (needs ai:optimize). Set Alert after breaches, Recover after passes and a grace period to avoid flapping.
  5. Notify on incident transitions — pick channels configured in Admin › Alerting.
  6. Validate before activation checks access, shows the generated SQL and the next evaluation slots. Then save.

Each promise runs as a scheduled query under the hood, with the same per-job leases, so it is evaluated once however many replicas you run.

Promise states

StateMeaning
healthyAll enabled checks pass
degradedA warning check is breaching
unhealthyA critical check is breaching
unknownNot evaluated yet, or still learning
pausedEvaluation is switched off

A breach that lasts past the thresholds opens an incident, which appears in Data › Incidents next to pipeline and engine incidents. Acknowledge or snooze it there (needs data_health:edit). After fixing the cause, Run the promise to re-evaluate now (needs data_health:run) — or, when a job rewrites the window, its clear-and-rerun re-evaluates the affected windows.

Permissions

ToNeeds
See promises and their incidentsdata_health:view (your own); data_health:view_all for everyone's
Create and editdata_health:edit
Run nowdata_health:run
Deletedata_health:delete

From the CLI: chouse health list|run|timeline|incidents|ack and chouse health dataset db.table for one table's trust state, baseline and incidents. See the CLI reference.

Tip: Start with one freshness check on each critical table. It catches the most common silent failure: the job succeeded but the upstream data never arrived.

Edit this page on GitHub ↗