Skip to main content
Geneva uses background jobs to execute long-running operations like backfills and materialized view refreshes. This guide explains how jobs work, their lifecycle states, and how to monitor and manage them.

Overview

Jobs in Geneva are asynchronous operations that process data in the background. There are two primary job types: Both job types share the same lifecycle states and monitoring capabilities.

Job States

Every job progresses through a well-defined state machine:

Monitoring Jobs

The Geneva Console provides a web-based interface for monitoring job status, progress, and history across your database. This is the recommended way to track jobs in collaborative environments. For programmatic access, you can query job status directly via the API:

Querying Job Status

Progress Metrics

Jobs report progress through metrics:
Common metrics include:

Job Events

Jobs log significant events during execution:
Example events:
  • “Job started”
  • “Checkpointing complete for fragment 42”
  • “Partial commit: 64 fragments”
  • “Job completed successfully”

Fault Tolerance

Geneva jobs are designed to be resilient to failures:

Checkpoint-Based Recovery

Jobs save intermediate results to a checkpoint store. If a job fails:
  1. Completed work is preserved - Checkpointed batches are not lost
  2. Resume from checkpoint - Restarted jobs skip already-processed data
  3. No duplicate processing - Each batch is processed exactly once
By default, checkpoints are stored in a _ckp/ subdirectory inside the table’s storage location. At scale, you can redirect checkpoints to a separate bucket to avoid IOPS contention. See Checkpoint Storage configuration for details.

Resuming Failed Jobs

To resume a failed job, simply re-run the same backfill or refresh command. The job will automatically detect existing checkpoints, skip already-processed fragments, and continue from where it left off.

API Reference

  • Tablebackfill(), backfill_async(), refresh(), JobFuture
  • Connectionget_job(), list_jobs()