IntegrationsData WarehousesDatabricks (Zerobus Ingest)

Databricks (Zerobus Ingest)

Datafly Signal streams events directly into a Databricks Delta Lake table via the Zerobus Ingest API — a serverless, real-time ingestion path that bypasses SQL warehouses. Pick this mode for the lowest-latency delivery and to keep SQL warehouses free for analytics workloads.

⚠️

Zerobus Ingest is generally available on Databricks, but the REST interface used by this connector is in Beta — its endpoint and OAuth behaviour may change. For the GA, fully-validated path, use Databricks (SQL Warehouse), which works on every Databricks tier.

Prerequisites

Before configuring this integration you need:

  • A Databricks workspace with Unity Catalog
  • Zerobus Ingest enabled on the workspace (request via your Databricks account team if not enabled)
  • A target Delta Lake table
  • A service principal with OAuth client credentials and MODIFY permission on the table

Enable Zerobus on the Workspace

Zerobus is a serverless ingestion service. If you don’t see it in your workspace, contact your Databricks account team to enable the public preview.

Create the Target Table

In the SQL editor or a notebook, create a Delta Lake table with columns that match the fields produced by the default blueprint:

CREATE CATALOG IF NOT EXISTS datafly;
CREATE SCHEMA IF NOT EXISTS datafly.events;
 
CREATE TABLE IF NOT EXISTS datafly.events.stream (
  event_name STRING,
  event_type STRING,
  message_id STRING,
  user_id STRING,
  anonymous_id STRING,
  event_timestamp TIMESTAMP,
  ip_address STRING,
  user_agent STRING,
  locale STRING,
  timezone STRING,
  page_url STRING,
  page_referrer STRING,
  source_id STRING
)
USING DELTA;

You can add additional columns to match any custom properties produced by your blueprint (e.g. page_title, search_query).

Create a Service Principal and OAuth Credentials

  1. In the Databricks Account Console, go to User management > Service principals.
  2. Click Add service principal and give it a name (e.g. datafly-signal-zerobus).
  3. Add the service principal to your workspace.
  4. In the workspace, generate OAuth client credentials for the service principal:
    • Settings > Identity and access > Service principals > select the SP > OAuth secrets > Generate secret.
    • Copy the Client ID and Client secret — the secret is shown once.

Grant Permissions on the Table

In the SQL editor, grant the service principal access:

GRANT USE CATALOG ON CATALOG datafly TO `<service_principal_application_id>`;
GRANT USE SCHEMA ON SCHEMA datafly.events TO `<service_principal_application_id>`;
GRANT SELECT, MODIFY ON TABLE datafly.events.stream TO `<service_principal_application_id>`;

Configuration

FieldTypeRequiredDescription
zerobus_endpointstringYesThe dedicated Zerobus ingest endpoint — not your workspace URL. Has the form https://<workspace-id>.zerobus.<region>.cloud.databricks.com.
workspace_urlstringYesWorkspace URL (e.g. https://abc-12345.cloud.databricks.com). Used for the OAuth token endpoint.
workspace_idstringYesYour numeric workspace ID. Used to scope the OAuth token to the Zerobus write API.
client_idstringYesOAuth client ID (application ID) for the service principal.
client_secretsecretYesOAuth client secret for the service principal.
catalogstringYesThe Unity Catalog name.
schemastringYesThe schema within the catalog.
tablestringYesThe Delta table receiving events.

Authentication uses OAuth 2.0 client credentials against {{workspace_url}}/oidc/v1/token, scoped to the workspace’s Zerobus write API via a resource parameter. Events are POSTed in batches as a JSON array to {{zerobus_endpoint}}/zerobus/v1/tables/<catalog>.<schema>.<table>/insert.

Signal Setup

Quick Setup

  1. Navigate to Integrations in the sidebar.
  2. Open the Integration Library tab.
  3. Find Databricks (Zerobus Ingest) or filter by Warehouse.
  4. Click Install, select a variant if available, and fill in the required fields.
  5. Click Install Integration to create the integration with the default blueprint.

API Setup

curl -X POST http://localhost:8084/v1/admin/integration-catalog/databricks_zerobus/install \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Databricks (Zerobus Ingest)",
    "variant": "default",
    "config": {
      "zerobus_endpoint": "https://1234567890123456.zerobus.us-west-2.cloud.databricks.com",
      "workspace_url": "https://abc-12345.cloud.databricks.com",
      "workspace_id": "1234567890123456",
      "client_id": "00000000-0000-0000-0000-000000000000",
      "client_secret": "YOUR_CLIENT_SECRET",
      "catalog": "datafly",
      "schema": "events",
      "table": "stream"
    },
    "delivery_mode": "server_side"
  }'

Schema

The default blueprint maps Signal’s canonical event envelope to a column-per-field shape suited to Delta Lake. Every event becomes one row with the columns below:

ColumnSourceNotes
event_nameeventEvent name (snake_case).
event_typetypetrack, page, identify, etc.
message_idmessage_idUnique per event.
user_iduser_idLogged-in user identifier (nullable).
anonymous_idanonymous_idFirst-party visitor identifier.
event_timestamptimestampClient event time.
ip_addresscontext.ipClient IP.
user_agentcontext.user_agentClient user agent.
localecontext.localeBrowser locale.
timezonecontext.timezoneBrowser timezone.
page_urlcontext.page.urlPage URL.
page_referrercontext.page.referrerReferrer URL.
source_idsource_idPipeline source identifier.

Per-event types add their own columns (e.g. page adds page_title; Products Searched adds search_query). You can extend or override mappings in your pipeline blueprint.

Databricks is a first-party destination under your control. The default blueprint forwards all events. Apply consent filtering in pipeline transforms, or via downstream views over the context columns if your governance requires it.

Testing

  1. Enable the integration in Signal and trigger a test event on your website.
  2. In the Databricks SQL editor, query the target table:
SELECT * FROM datafly.events.stream
ORDER BY event_timestamp DESC
LIMIT 10;
  1. Verify rows are appearing — Zerobus typically commits within a few seconds.
  2. In Signal, check the Live Events view to confirm delivery status shows as successful.

Troubleshooting

ProblemSolution
401 Unauthorized from /oidc/v1/tokenClient ID or client secret incorrect, or the OAuth secret has been rotated. Generate a new secret.
403 Forbidden on ingestThe service principal lacks MODIFY on the table. Grant USE CATALOG, USE SCHEMA, and MODIFY.
404 Not Found on ingestVerify the fully-qualified table path catalog.schema.table, and that zerobus_endpoint is the dedicated Zerobus host (<workspace-id>.zerobus.<region>.cloud.databricks.com), not the workspace URL. Check that Zerobus is enabled on the workspace.
Events not appearingConfirm the column names in the table match the blueprint targets exactly. Add missing columns or update the blueprint mappings.
400 schema-mismatch errorsThe blueprint is emitting a column that doesn’t exist on the table (or has a different type). Add the column or remove the mapping.
Connection timeoutEnsure Signal can reach the workspace URL on port 443. Check network policies and IP allowlists.

Visit Databricks Zerobus Ingest documentation for the latest REST API reference and status.

See also