Data warehouses

Send events to BigQuery

Stream events directly into a customer's BigQuery dataset, table per event type or single wide table.

What is BigQuery?

BigQuery is Google Cloud's serverless data warehouse. As a destination, it lets your customers analyze your product events in seconds without operating a pipeline, events arrive in their dataset, queryable from any SQL tool, BI dashboard, or notebook they already use. Pushrail's BigQuery adapter streams events row-by-row using the Storage Write API so latency stays low and dedup is exactly-once.

Why deliver events to BigQuery

  • Query in seconds, analysts run SQL against your events the same day the integration goes live.
  • Customer owns the warehouse, billed to their GCP project, governed by their IAM.
  • Pairs with Looker, Looker Studio, Mode, Hex, and every other BI tool that talks BigQuery.
  • Schema-aware, Pushrail can fan out one table per event type or write to a single wide table with the payload as JSON, whichever the customer prefers.

How Pushrail delivers events to BigQuery

The BigQuery adapter uses the Storage Write API in committed mode for exactly-once inserts. By default Pushrail creates one table per `eventType` with columns for the canonical envelope (`event_id`, `event_type`, `occurred_at`, `customer_external_id`, `source`, `payload` as JSON, `metadata` as JSON, `received_at`). Customers can also choose a single-table mode where every event lands in one `events` table with the same envelope columns. Schema migrations are append-only, if a new event type appears, Pushrail creates its table; if a payload field is added it lives inside the JSON column.

Auth and credentials

Customers grant Pushrail BigQuery write access via Workload Identity Federation (preferred) or a service-account JSON key. Required IAM roles are `roles/bigquery.dataEditor` on the destination dataset and `roles/bigquery.jobUser` on the project. Service-account keys are stored encrypted at rest; Workload Identity binds Pushrail's GCP identity to a customer-side service account with no exchanged secret. Rotations happen in-place from the dashboard.

Batching, retries, and replay

Streaming Storage Writes are real-time at the row level (no batching window). Transient errors retry with exponential backoff. Permanent errors (schema mismatch, dataset-not-found) move to the DLQ for inspection. Replay re-streams the same rows; the adapter dedupes by `idempotencyKey + eventType` so a re-run of a window does not duplicate rows.

Example payload

Pushrail accepts the canonical event shape on POST /v1/events. Below is the ingestion request your service makes.

{
  "eventType": "order.completed",
  "occurredAt": "2026-05-26T14:21:08.493Z",
  "source": "billing-service",
  "customerExternalId": "acct_8K2zRq",
  "idempotencyKey": "order_38a91f-completed",
  "correlationId": "req_4f30b2",
  "payload": {
    "orderId": "ord_38a91f",
    "amount": 12900,
    "currency": "USD",
    "items": [
      { "sku": "PR-PRO-MONTHLY", "qty": 1, "price": 12900 }
    ]
  },
  "metadata": {
    "tier": "pro",
    "region": "us-east-1"
  }
}

Example configuration

The fields your customer fills in to point Pushrail at their BigQuery setup.

{
  "type": "BIGQUERY",
  "name": "Customer BigQuery warehouse",
  "projectId": "acme-analytics-prod",
  "datasetId": "pushrail_events",
  "tableStrategy": "TABLE_PER_EVENT_TYPE",
  "auth": {
    "mode": "WORKLOAD_IDENTITY",
    "serviceAccountEmail": "pushrail-writer@acme-prod.iam.gserviceaccount.com"
  }
}

Common use cases

  • Productize 'we'll deliver your events to your BigQuery' as an enterprise data-export feature.
  • Replace ad-hoc CSV exports, customers run SQL on the data directly instead of waiting for a file.
  • Feed a customer's BI tool (Looker, Mode, Hex) with live product event data.
  • Power customer-built analytics on top of your raw events.

Frequently asked questions

Do I need to build a BigQuery integration to use this?

No. Pushrail delivers events into your customer's BigQuery dataset for you, you send one canonical event to Pushrail's ingest API, and the BigQuery adapter handles the Storage Write API, table creation, and schema mapping.

Whose credentials are used to write to BigQuery?

The customer's. They grant write access via Workload Identity Federation or a service-account JSON key, scoped to roles/bigquery.dataEditor on the dataset and roles/bigquery.jobUser on the project. Keys are stored encrypted at rest and rotated in-place from the dashboard.

One table per event type or a single table?

Either. By default Pushrail creates one table per eventType with columns for the canonical envelope, but the customer can choose a single-table mode where every event lands in one events table with the payload as JSON.

What happens if a BigQuery write fails?

Transient errors retry with exponential backoff; permanent errors like a schema mismatch or missing dataset move to the dead-letter queue for inspection. Every attempt is recorded in the delivery logs. Replay re-streams the same rows and dedupes by idempotency key plus event type, so re-running a window does not duplicate data.

Send events to BigQuery

Sandbox is open. No credit card.