Skip to main content

Where Your Data Lives

Everything the Databricks App stores stays inside your Databricks account, split across two governed stores:

  • Unity Catalog (Delta) — trace and observation data (the high-volume, query-anywhere telemetry)
  • Lakebase PostgreSQL — application metadata (policies, entities, config, secrets-backed settings)

Both are provisioned automatically during installation.

Unity Catalog (Delta)

LangGuard creates a catalog — langguard_app by default (the name is stored in the databricks-catalog secret) — with two schemas:

SchemaHolds
langguard_otelRaw OTEL ingestion tables (external storage)
langguardViews over the raw data + annotations and discovery state

Tables

ObjectSchemaTypeContents
langguard_otel_spanslangguard_otelDelta tableRaw OTEL spans (the native OTLP ingestion target)
langguard_otel_logslangguard_otelDelta tableRaw OTEL logs
trace_annotationslangguardDelta tableUser tags/notes, policy results, entity mappings (merged into trace views)
discovery_statuslangguardDelta tableOpenCITE discovery high-water marks

Views (the read path)

The app reads traces through views that map the raw OTEL spans into LangGuard's schema:

ViewMaps
langguard_tracesThe combined read path — UNIONs the two views below
langguard_traces_otelRoot spans → trace schema (with cost computed inline)
langguard_inference_tracesAI Gateway inference (*_payload) tables, regenerated at runtime
langguard_observationsChild spans → observations
langguard_trace_statsPre-aggregated hourly stats for dashboards
External storage required

The langguard_otel schema must be backed by customer-managed external storage (S3 / ADLS / GCS), and the ingestion tables carry TBLPROPERTIES ('otel.schemaVersion' = 'v1'). Databricks' native OTLP endpoint rejects metastore-managed storage. The installer enforces this when it sets up the schema.

Lakebase PostgreSQL

Application metadata lives in a Databricks Lakebase PostgreSQL database, under a schema named catalog:

Table (in catalog schema)Contents
users, user_tenants, tenantsIdentities and the single tenant
integration_connectionsConnected integrations
policies, policy_violations, policy_statsGovernance policies and results
entities, entity_usage_stats, entity_lineageDiscovered AI assets and lineage
api_keysHashed API keys
arbiter_guarded_endpointsGuarded Endpoint wrapper configs
endpoint_enforcement_settingsPer-endpoint enforce/observe toggle
model_pricingPer-model token pricing (drives cost computation)
app_config, sessionInternal config (poller checkpoints) and web sessions

How cost is computed

Trace cost isn't stored — it's computed on read. The langguard_traces view LEFT JOINs the Lakebase model_pricing table (registered into Unity Catalog as a federated catalog — langguard_lb — via databricks postgres create-catalog) and applies per-million-token input/output pricing. Update pricing in LangGuard's Cost Estimates settings and every trace's cost reflects it immediately.

Data residency

Nothing leaves your workspace. Traces are ingested into your Unity Catalog tables on your external storage, metadata lives in your Lakebase database, and the app runs on your Databricks compute. You can apply your own Unity Catalog grants, lineage, and auditing to every LangGuard table.

Unity Catalog Explorer showing the langguard_app catalog and OTEL tables

Next steps