Your Tableau dashboards hit a cloud data warehouse. Your data engineering team builds ETL pipelines in Databricks. And somewhere in between, you're paying to move, copy, and sync data across both systems - just so an analyst can refresh a report.
This is the hidden tax of running BI on a separate data warehouse. You maintain duplicate data pipelines. You troubleshoot stale data when a sync job fails at 2 AM. You burn compute on two platforms to answer one question. And when someone asks, "Why don't the Tableau numbers match the notebook?" you already know the answer: because the data lives in two places.
It doesn't have to work this way. Databricks SQL (DBSQL) warehouses are purpose-built for BI workloads - the same concurrency, sub-second caching, and query optimization you expect from a traditional cloud data warehouse, but running directly on your lakehouse. That means Tableau can query the same tables your engineers write to. No sync jobs. No copies. One source of truth.
Lumen Technologies faced this exact problem. Their Call Detail Record Warehouse (CDRW) was running on Cloudera, an on-prem big data platform, with BI dashboards consuming hours of computation just to answer basic operational questions. After migrating to Databricks SQL Serverless, queries that previously took hours now complete in minutes - a 90% improvement - while compute costs dropped by up to 40%. Their engineers, network operators, and finance teams now get answers in real time, from the same platform where the data lives. No separate warehouse. One system.
This post walks you through how to connect Tableau to DBSQL, configure your warehouse for dashboard performance, and adopt data modeling practices that make the whole setup fast and cost-efficient.Figure: Before vs. after - eliminating the separate data warehouse layer
Before you start, confirm you have:
You have two paths. Pick whichever fits your workflow.
Option A: Partner Connect (Fastest)
Option B: Manual Connection
Pro tip: Use Service Principal OAuth for production extract refreshes - it uses the OAuth client credentials flow for machine-to-machine authentication, avoiding token expiry issues tied to individual user accounts.
Launch from Databricks Catalog Explorer
For Tableau Cloud and Tableau Desktop from Databricks: You can also launch directly from your workspace. In Catalog Explorer, select a schema or table, click 'Use with BI tools' or 'Open in a dashboard,' and select 'Explore in Tableau Cloud' or 'Open in Tableau Desktop'.
Connecting Tableau is the easy part. Making it fast under load takes intentional configuration.
Right-Size the Warehouse
Start with a Medium serverless warehouse for live/DirectQuery workloads - the BI workload settings guide recommends starting at Medium and scaling up based on query complexity and data volume. For extract/import workloads, start with Large or X-Large. DBSQL Serverless uses Intelligent Workload Management to automatically provision and scale clusters based on query demand, so you don't need to over-provision. Set the minimum and maximum cluster counts based on your anticipated workload, and monitor the 'Peak Queued Queries' metric to adjust - consistently non-zero values signal a need for more clusters.
Understand the Query Multiplier
One Tableau dashboard with five charts and a quick filter sends a minimum of 10 queries to DBSQL on every filter change. Add more filters and the count climbs fast. Several tactics help:
Leverage Caching - Both Sides of the Connection
Performance isn't just about the warehouse. Tableau and DBSQL each have their own caching layers, and understanding both is key to sub-second dashboard loads.
Tableau's four caching layers
Before a query ever reaches DBSQL, Tableau checks four caches in order:
For Tableau Server, set the cache frequency to 'Refresh Less Often' for dashboards viewed repeatedly (e.g., Monday morning pipeline reports) - this retains cache for up to 12 hours. You can also warm the cache by setting up a dashboard subscription that fires before peak viewing hours. The dashboard must render to generate the subscription email image, which pre-populates the cache.
DBSQL's three caching tiers
Queries that make it past Tableau's cache hit DBSQL's own three-tier stack:
For dashboards viewed repeatedly, these server-side caches (not including UI cache) mean sub-second response times after the first load. In practice, we measured this directly using Tableau Desktop connected to DBSQL via a live connection. The first dashboard load took 1,115ms. The same view reloaded immediately returned in 153ms - an 86% improvement - with zero bytes read from storage. The result cache served the full response from memory. For analysts refreshing the same dashboard throughout the day, this means near-instant response times at no additional compute cost.
Tune Auto-Stop
For live/DirectQuery workloads, set auto-stop aggressively at 15–30 minutes to keep the warehouse warm between analyst sessions while controlling cost. For extract/import workloads that run in sequence, use longer auto-stop times of 1–2 hours so the warehouse stays up between jobs. The remote result cache on Serverless means restarts are less painful than they used to be - results persist across warehouse stops and are shared across all warehouses in the workspace.
A fast warehouse won't save a bad data model. These patterns reduce query complexity at the source.
Model in Star Schema
Organize your gold-layer tables into fact and dimension tables. BI tools like Tableau are built for star schemas - they generate cleaner SQL, push down joins efficiently, and produce more predictable query plans.
Declare primary and foreign keys with the RELY keywords. These constraints are informational - Databricks does not enforce them - but with RELY, the query optimizer can exploit them to rewrite queries (e.g., eliminating redundant joins or simplifying aggregations). It is the user's responsibility to ensure the data satisfies the constraint; violations may produce incorrect query results.
Defining these constraints also benefits Tableau directly: Tableau automatically detects primary and foreign key constraints and uses them to create relationships at the physical layer. If no key constraints are defined, Tableau falls back to matching column names to auto-generate joins. For composite keys, Tableau detects both single-column and multi-column relationships. If auto-detection fails, you can manually configure joins by double-clicking the table at the logical layer to access the physical layer in Tableau's data model.
|
|
|
Use Materialized Views for Heavy Aggregations
If a Tableau dashboard runs the same expensive aggregation on every load, pre-compute it:
|
Materialized views refresh incrementally. The dashboard queries a compact, pre-aggregated table instead of scanning millions of rows.
Apply Liquid Clustering
For large fact tables that analysts filter frequently (by date, region, customer segment), Liquid Clustering improves performance through file skipping:
|
Enable predictive optimization on your Unity Catalog managed tables so DBSQL automatically runs OPTIMIZE, VACUUM, and ANALYZE based on actual query patterns - no manual maintenance scheduling needed.
We measured this directly with Tableau Desktop running live against DBSQL. A dashboard filtering one year of shipment data by return flag - the kind of view analysts build daily - scanned 10 files and 158.1MB of data from the unoptimized table. The same query against a Liquid Clustered table on identical data scanned 1 file and 9.6MB - a 94% reduction in data read. Fewer files scanned means less I/O, lower cost per query, and faster dashboard loads as your data grows.
This is the decision that trips up most teams migrating from a traditional data warehouse.
Start with live connections. DBSQL's caching and Serverless auto-scaling handle interactive workloads well, and you avoid the extract refresh pipeline entirely. Move specific workbooks to extracts only if you hit latency issues on very large scans.
For extract refreshes, use a separate SQL warehouse sized appropriately for your batch workload volume, with auto-stop set to 1–2 hours. This prevents extract jobs from competing with interactive dashboard queries.
Warehouse & workload management
Separate warehouses by workload. Interactive dashboards and scheduled extract refreshes have different concurrency and sizing needs. Don't share a single warehouse across both, this prevents resource contention and enables independent scaling and cost tracking.
Monitor with system tables. Query system.query.history to identify slow Tableau queries (filter by client_application = 'Tableau'), track warehouse utilization, and right-size over time
|
[Tableau Side] Use Performance Recording (available on Desktop and Server) to identify bottlenecks. It distinguishes between query execution latency (data engine / DBSQL) and visual layout latency (VizQL / Tableau rendering). If the bottleneck is query execution, tune the warehouse or optimize the data model. If it's VizQL, aggregate more aggressively or scale up the machine running Tableau.
[Tableau Side] Manage mark volume. Databricks can return one million records quickly, but Tableau may not be able to compute the layout and sort the results. Aggregate queries and enable drill-down into lower levels rather than displaying granular marks - granular marks are often a poor analytical pattern because they don't provide insight.
[Tableau Side] Scale Tableau hardware. Tableau is constrained only by the physical resources of the machine it runs on. If the visual layout is slow, upgrade CPU/RAM before increasing warehouse size.
This is the part that matters most for teams mid-SQL migration. When Tableau reports serve directly from DBSQL, you eliminate:
You're not just swapping one connector for another. You're removing an entire layer of your architecture.
Running Tableau on a separate data warehouse made sense when lakehouses couldn't serve BI workloads. That's no longer the case. DBSQL Serverless warehouses deliver the concurrency, caching, and sub-second performance that Tableau dashboards demand - directly on your lakehouse data.
The data warehouse migration path is straightforward: connect Tableau to a SQL warehouse, model your gold tables for BI consumption, and lean on DBSQL's caching and auto-scaling to handle the load. The payoff is fewer systems, lower cost, and one version of the truth.
Ready to try it? Connect Tableau to your Databricks SQL warehouse using Partner Connect and start with a single dashboard. Once you see the numbers match - and the sync pipeline disappears - you won't want to go back.
Connect Tableau to your Databricks SQL warehouse using Partner Connect and start with a single dashboard.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.