At the end of the first month in production, finance usually receives one Databricks bill and asks one question: which department and which project does this belong to? If resources were never tagged, there is no answer. Tagging them later does not help with the past either, because a tag only applies to usage from the moment it is set.

This article covers how to organise cost allocation on Databricks: where the cost data lives, how each type of resource gets tagged, how to make tags mandatory, and which costs are hard to allocate.

1. Where the cost data lives

All billable usage is written to the system table system.billing.usage. Each row records the usage date, the workspace, the product (SKU), the quantity in DBUs, the cluster or job involved, and the custom tags on that resource. system.billing.list_prices holds the list price per SKU; multiply the quantity by the price in effect at the time of use to get cost at list price, before any contract discount.

What matters is that custom tags are written onto every usage row. Once tags are complete and correct, a cost report by department is a simple query:

SELECT usage_date,
       custom_tags['cost_center'] AS cost_center,
       sku_name,
       SUM(usage_quantity) AS dbu
FROM system.billing.usage
WHERE usage_date >= date_sub(current_date(), 30)
GROUP BY ALL
ORDER BY usage_date, cost_center;

Rows with an empty cost_center are untagged usage. Their share of the total is the first number to track.

2. A minimal tag set, agreed with finance first

You do not need many tags. Three or four keys with a fixed list of values cover most organisations:

  • cost_center: the cost centre code, matching the one finance already uses in the accounting system.
  • project: the project or use case, so each initiative’s cost can be set against its value.
  • env: development, test or production.
  • owner: the team accountable for the resource.

Have finance confirm the list of values before rollout. If every team picks its own spelling (“Risk”, “risk”, “RiskMgmt”), the report needs manual clean-up every month.

3. Tagging each type of resource

Each resource type takes tags in a different place:

Resource Where to tag
Workspace UI (Azure only) or Account API
Pool Pools UI or Instance Pool API
All-purpose and job compute Compute UI or Clusters API
SQL warehouse SQL Warehouse UI or Warehouses API
Database instance (Lakebase) UI or Database API
Serverless workloads Only through serverless budget policies in the Account Console

Workspace tags apply to every resource in that workspace. With one workspace per department, allocation is almost automatic, but the number of workspaces to administer grows with the number of departments. When departments share a workspace, tags have to be set on each cluster, warehouse and job.

Serverless needs particular care: serverless notebooks, jobs, pipelines and model serving take tags only through budget policies. Budget policies have limits worth knowing up front. Existing assets do not pick up a newly assigned policy; a tag change applies only to usage from then on; a pipeline triggered by a job does not inherit the job’s policy; and a user with several policies who picks none gets the first one alphabetically.

4. Enforce tags with policies, not reminders

A tagging standard only holds if the platform will not create an untagged resource. Databricks provides the means:

  • Compute policies with fixed tags. A policy can fix the value of custom_tags.cost_center, so every cluster created from it carries the right tag. One policy per department, with CAN_USE granted to that department’s group.
  • Remove unrestricted cluster creation. Users with “Allow unrestricted cluster creation” can create clusters outside any policy, so keep that entitlement for administrators.
  • Provision warehouses by group. Users can start the warehouse assigned to their group but cannot create new ones.
  • A default budget policy for serverless, so no serverless usage falls outside allocation.
  • A daily job that lists untagged clusters and warehouses and sends them to the platform administrator.

5. Costs that are hard to allocate

Some costs cannot be assigned wholly to one department. Agree how to handle them at the start rather than debate them every month.

A shared SQL warehouse is the most common case. Sharing saves money but complicates attribution, because usage is recorded against the warehouse, not the person running each query. There are two options: give heavy-using departments their own warehouse, or accept a shared cost line and split it by a ratio agreed with finance.

Cloud provider costs matter too. On classic compute, virtual machines, disks and network appear on the cloud bill, not in system.billing.usage. SQL warehouse tags are attached automatically to the cloud instances. With pools, the pool’s tags go to the cloud instances, while cluster tags appear only in the DBU usage data. Storage can be allocated by giving each business unit its own storage account.

6. Reports and budgets

The Account Console includes a usage dashboard broken down by product, SKU and custom tag, for the whole account or a single workspace. A budget is scoped by workspace or tag and holds up to four monthly thresholds, each a dollar amount that sends an email alert when spending crosses it. Apart from Unity Gateway budgets, which can block further requests, a budget does not stop usage: the month’s bill can still exceed it. For automated monitoring, query system.billing.usage directly.

Alerts should go to the department’s business owner as well as the technical team, because deciding whether to cut back or keep spending is usually a business decision.

What Sancire does here

Sancire’s Lakehouse Foundation package takes 4 to 6 weeks and starts at $25,000. It delivers a cost tagging standard and budget alerts from day one, with policies that enforce tags on clusters, warehouses and serverless. For a platform already in production, Platform Operations reviews cost by tag and by team every month. If you do not yet know who your current usage belongs to, the 90-minute discovery workshop is the place to start.


Sources: Databricks documentation on the billable usage system table, read on 29 September 2026. Databricks documentation on budgets, read on 16 October 2026. Feature names and status change quickly; check the current documentation before designing.

Talk to us

Tell us what you are working on. A named person replies within one business day.

We use these details only to reply to you. No mailing list. Privacy.