Skip to main content

Output Data Dictionary

Main output table

Table: {OUTPUTS_DATASET}.anomaly_detection_report

Partitioned by date; clustered by case_name and time_series_id.

ColumnTypeDescription
datedateDate of the scored or training point
case_namestringCase identifier (e.g., ga4_events)
time_series_idstringConcatenated dimension value identifying the series
metric_valuefloatActual metric value for the row
lower_boundfloatPredicted lower confidence bound; null for training rows and series that did not meet detection thresholds
upper_boundfloatPredicted upper confidence bound; null under the same conditions
anomalies_pointfloatMetric value when the point is anomalous; null otherwise
is_anomalybooleanSeries-level anomaly flag: true when any point in the series was flagged during the detection window
sourcestringtraining for historical context rows; anomaly_detection for scored rows
is_strong_seriesbooleantrue when the series meets the configured detection quality thresholds (detection_min_series_days and detection_min_series_avg)
in_training_not_in_detectionbooleantrue when a series appeared in the training window but has no data in the detection window. The pipeline synthesizes a placeholder row for these series (metric and bounds are null, date is set to CURRENT_DATE) so they remain visible in the output rather than silently disappearing

Intermediate anomaly table

Table: {TRANSFORMATIONS_DATASET}.int_anomaly_detection_{case}_anomalies

Partitioned by date; clustered by the case's time_series_id_cols.

ColumnTypeDescription
datedateDate for scored point or synthetic missing-series marker
{id columns}string or mixedCase-specific time-series dimension columns
_series_idstringConcatenated ID built from the configured dimensions
{metric column}floatCase metric used for scoring
lower_boundfloatModel lower confidence bound
upper_boundfloatModel upper confidence bound
anomalies_pointfloatMetric value when the point is flagged; null otherwise
is_anomalybooleanPoint-level anomaly flag from ML.DETECT_ANOMALIES
config_namestringCase name used at execution
inserted_attimestampProcessing timestamp
is_strong_seriesbooleanDetection-window strength flag
in_training_not_in_detectionbooleantrue for training-only missing series markers

Intermediate training table

Table: {TRANSFORMATIONS_DATASET}.int_anomaly_detection_{case}_time_series

ColumnTypeDescription
{timestamp col}date or timestampCase timestamp field
{id columns}string or mixedCase dimensions (full series and single-dimension stacked variants)
{metric column}numericAggregated metric. If metric_cap is set, values are capped using LEAST(_y, metric_cap) before the column is written. If metric_cap is null or omitted, the raw aggregated value is used

Notes on interpretation

  • source = 'training' rows provide historical context and do not contain anomaly bounds.
  • source = 'anomaly_detection' rows contain scored bounds and anomaly flags.
  • anomalies_point is null for non-anomaly rows; it only carries a value when the point is flagged.
  • Both lower_bound and upper_bound are clamped to 0. If the model predicts a negative lower bound, it will appear as 0 in the output.
  • When metric_cap is configured, training data is capped at that value. The metric_value column in the report reflects the original uncapped value, but the model's bounds were learned from capped data.
  • For alerting, pair is_anomaly with is_strong_series and a persistence check across consecutive days.