providers.*; providers_quality holds
measurements about those tables.
Use the latest snapshot across the Workspace or the history for one Provider
table:
Only main Provider tables receive quality sidecars. Identity tables,
artifacts, and
Parable results do not.
Understand the measurements
Quality checks
Quality checks compare a Provider table with thresholds defined by its stream’s quality configuration and schema roles. Each row represents one check on one table.SKIPPED is not a pass. It means the rule could not evaluate.
Promote-time checks read each column with the type it was stored with. A
check whose target column is stored as text is SKIPPED, not failed.
no_future_timestamp needs to know the unit of the column it reads. A
timestamp column carries its own. An integer column is compared only when its
schema field declares x-temporal-format (unix, unix_millis, and so on);
an integer metadata_timestamp with no declared format is SKIPPED with
integer metadata timestamp declares no x-temporal-format, because seconds,
milliseconds and microseconds are all plausible readings.
Checks run when a table is promoted and on its scheduled cadence. Read the
lifecycle column with the result: the two evaluations cover different rows.
On a table that holds current state, the rows carrying a load’s
dt are the
load’s own rows and the rows it newly marked missing, not the whole table
(see Read row state).
A promote PASS can coexist with duplicates across loads. Use the latest
cadence result to assess the whole table, and check captured_at against its
latest load. A missing or older cadence result does not establish current
whole-table uniqueness. A Workspace can have no cadence results. In that
case, a whole-table duplicate measurement needs the SQL check over the table
itself.
dupe_rate counts rows beyond the distinct combinations of the schema’s key
columns, divided by the total rows checked. A PASS means the rate satisfied
maxRate; only an observed rate of zero establishes uniqueness. Before treating
a repeated entity ID as a defect, confirm the table’s record grain: an event or
history table can legitimately hold several records for one entity and needs a
key that identifies each record.
For a query restricted to a date window, a nonzero whole-table duplicate rate
does not locate the duplicates inside that window. Inspect the records in the
same window and with the same key before drawing that conclusion.
Statistical process control
Statistical process control (SPC) uses a Shewhart control chart for platform-owned series such as row count and column null percentage. It complements explicit quality checks; it does not replace them.
Tracked series kinds include
TABLE_ROW_COUNT, COLUMN_NULL_PCT,
COLUMN_VALIDATION_FAILURE_PCT, COLUMN_DISTINCT_COUNT, and COLUMN_AVG.
Shape and health
Shape statistics record measurements such as row count, column count, and bytes. Distinct counts skip engine-owned_parable_*, _raw_*, and
_custom_fields columns — those payloads are not user columns, and a
distinct count of the raw row is the row count. Every other distinct count
is a HyperLogLog approximation (approx_distinct). distinct_counts_exact is false
whenever any column was counted, and true only when none was.
A table that holds more rows than the scan limit (50 million by default) is
read through a deterministic sample of its files that holds about that many
rows. The snapshot records the rows it read as sampled_row_count, which
is null for a whole-table snapshot. In a sampled snapshot:
The same files are sampled on every run against the same table version, so a
series keeps its meaning from run to run.
Health is the catalog annotation for a table, including its state,
reason, and watermark. Health and the quality/SPC rollups are related views,
but they are computed through different paths.
Query the latest Workspace snapshot
These summary tables contain the current result per Provider table:
Each summary row describes one Provider table, so it follows that table’s
Provider Policy: someone the Policy narrows
or hides the table for gets none of its rows here.
Source permissions work
the same way: someone whose source permissions narrow a table gets none of
its rows here.
In every summary table,
connector and table_name are the catalog’s schemaName
and logicalName for the Provider table, the schema and table of its SQL
address: the row for providers.google.users has connector = 'google' and
table_name = 'users'. They follow the rules in
Provider table names,
so a connector slug written with - appears here with _.
table_commits reads each table’s commit history when you query it, at most once a minute
per table. Filter it on connector so only those Providers’ histories are read:
Query one table’s history
History suffixes map to result kinds:
Recent checks for Google Workspace directory users:
result_id, run_id,
evidence_json for checks, and violations_json for SPC when an application
needs the payload behind a status.
History records can hold a status in mixed case, such as
Fail or
OutOfBounds, or in uppercase, such as FAIL and OUT_OF_BOUNDS. Summary
tables return uppercase values. If a history query unexpectedly returns no rows,
inspect the available values before choosing a casing-sensitive filter.