Home Products Services About Contact

Tableau Cloud vs On-Premise: Metadata Access Comparison

Part 2 of 5: Cloud vs Server

When teams pick between Tableau Server (on-premise) and Tableau Cloud, the conversation usually focuses on hosting, cost, and upgrade cadence. The bigger long-term question is much narrower: how much of the platform’s metadata can you actually access programmatically? Three methods exist — REST API, PostgreSQL repository, and the GraphQL Metadata API — and only two of them work on Cloud.

This post is a side-by-side comparison of those three methods across both platforms, with code examples, the use cases each one unlocks, and a decision framework for picking a platform with your metadata strategy in mind.

TL;DR — what changes between Cloud and Server

If you only remember three things:

  1. REST API is identical on both platforms. Same endpoints, same Python client (tableauserverclient), same automation code. Authentication URLs differ — that is the only meaningful change.
  2. GraphQL Metadata API works on both — same schema, same query patterns. Use it for lineage, impact analysis, and content discovery.
  3. PostgreSQL repository is on-premise only. No equivalent on Cloud. Every workflow that depends on direct SQL against the internal repository — historical event logs, full permission matrices, query timing trends — must be redesigned for Cloud.

Which metadata methods are available on each platform

Compatibility Matrix

Compatibility of REST API, PostgreSQL repository, and GraphQL Metadata API across Tableau Server (on-premise) and Tableau Cloud.
PlatformREST APIPostgreSQL RepositoryGraphQL Metadata API
Tableau Server On-Premise Available Available Available
Tableau Cloud SaaS Available Not available Available

Access Methods

PostgreSQL Repository

Tableau Server only

Direct SQL access to historical events, configurations, and operational data through Tableau’s internal PostgreSQL database. The single biggest analytical capability missing from Tableau Cloud.

Common use cases

  • Permissions auditing — analyze user and group access rights at scale.
  • Historical usage analysis — track event logs, query timings, and server performance over time.
  • Custom admin dashboards — visualize license usage, user activity, workbook adoption, and engagement.

REST API

Server & Cloud

Fully supported on both platforms for programmatic operations: provisioning users, managing content, downloading workbook screenshots, and orchestrating embedded workflows.

Common use cases

  • Automated user management — programmatically create, update, and delete users and groups.
  • Content lifecycle — orchestrate publishing, updating, archiving, and tagging of dashboards.
  • External system integration — sync Tableau with CRM, HRIS, ticketing, and other internal tools.

GraphQL Metadata API

Server & Cloud

A flexible query language for retrieving exactly the metadata fields and relationships you need in a single round-trip — ideal for lineage and impact analysis.

Common use cases

  • Detailed metadata extraction — pull rich information about dashboards, data sources, fields, and calculations.
  • Data lineage & impact — map data sources and fields back to the workbooks that consume them.
  • Metric consistency — compare calculated fields across dashboards to keep them aligned with the metric glossary.

Why the PostgreSQL repository gap matters

The single biggest analytical limitation of Tableau Cloud is the lack of direct access to the PostgreSQL repository. Every deep operational query — full permission matrices, historical event logs, query timing trends, custom usage analytics — depends on it. Cloud customers must rebuild those workflows on top of the REST API and GraphQL, which return the current metadata state but not the historical event stream.

A typical on-premise query — completely impossible on Cloud — looks like this:

-- Top 20 dashboards by view count over the last 90 days,
-- with their owners and the size of the underlying extracts.
SELECT
  w.name              AS workbook,
  s.friendly_name     AS owner,
  COUNT(*)            AS views_90d,
  ROUND(SUM(e.size_bytes) / 1024.0 / 1024.0, 1) AS extract_mb
FROM   historical_events he
JOIN   hist_workbooks w  ON w.id = he.hist_workbook_id
JOIN   hist_users     u  ON u.id = he.hist_actor_user_id
JOIN   system_users   s  ON s.id = u.system_user_id
LEFT JOIN extracts    e  ON e.workbook_id = w.id
WHERE  he.created_at >= NOW() - INTERVAL '90 days'
  AND  he.historical_event_type_id = 80   -- "Access View"
GROUP  BY w.name, s.friendly_name
ORDER  BY views_90d DESC
LIMIT  20;

The closest Cloud-side equivalent is Tableau Cloud Manager — pre-aggregated admin data sources surfaced inside the Cloud admin UI. They give you a slice of repository-equivalent information (logins, view counts, content inventory), but the granularity and retention are not comparable to running SQL directly against the on-premise repository, and there is no programmatic SQL surface.

If your roadmap depends on historical, event-level analytics, the platform decision is effectively forced — either stay on-premise or budget time to capture and persist metadata snapshots into your own warehouse.

For day-to-day automation — user provisioning, content lifecycle, embedding, lineage queries — both platforms are equivalent.

REST API: identical surface, two flavours of authentication

The REST API surface is the same on both platforms. The only thing you change between Server and Cloud is the sign-in URL and how you authenticate.

On-premise (Tableau Server):

import tableauserverclient as TSC

# Personal Access Token works on both platforms.
auth = TSC.PersonalAccessTokenAuth(
    token_name="bi-automation",
    personal_access_token="ENV_PAT",
    site_id="default",
)
server = TSC.Server("https://tableau.internal.example.com", use_server_version=True)

with server.auth.sign_in(auth):
    workbooks, _ = server.workbooks.get()
    print(f"{len(workbooks)} workbooks on this site")

On Tableau Cloud, only the host changes:

server = TSC.Server("https://10ax.online.tableau.com", use_server_version=True)

Your provisioning scripts, embed-token generation, content sync jobs, and refresh schedules all run unchanged between platforms. That is why I always recommend building automation on REST + GraphQL first — it survives a Cloud migration with zero rewrites.

The full breakdown of REST API automation patterns lives in Part 3 of this series: Mastering Tableau REST API for BI Automation.

GraphQL Metadata API: same schema, different mental model

The GraphQL Metadata API is the modern way to query what content depends on what data across either platform. Same schema, same query language, same JSON shape — just point the client at the right host.

# What dashboards depend on the "Sales Pipeline" extract?
{
  embeddedDatasources(filter: { name: "Sales Pipeline" }) {
    name
    workbook {
      name
      luid
      projectName
      owner { name }
    }
  }
}

Use cases this unlocks on both Cloud and Server:

  • Impact analysis — before deprecating a data source, list every workbook downstream of it.
  • Automated data catalog — walk publishedDatasources → upstreamTables → upstreamDatabases to map the full lineage.
  • Content discovery — find every workbook touching a specific column across all sites.

The GraphQL endpoint and authentication patterns are covered end-to-end in Part 5: GraphQL for Advanced Tableau Metadata Analysis.

What this means in practice

  • Choosing Tableau Cloud? Plan to rebuild any historical analytics or audit dashboards on top of REST + GraphQL plus your own warehouse. Budget time to capture and persist metadata snapshots over time, since you no longer have a queryable event log.
  • Running Tableau Server (on-premise)? You have all three methods at your disposal. Use the repository for historical analysis and admin dashboards, REST for automation, and GraphQL for fine-grained lineage and impact analysis. For the repository deep dive, see Part 4: Deep Dive into Tableau PostgreSQL Repository.
  • Hybrid teams? Build automation on top of REST + GraphQL first — that code will run unchanged on either platform. Treat repository-backed analyses as a separate, on-premise-only layer.

Decision framework: pick a platform with metadata in mind

A simple two-step filter that has held up across the migrations I have run:

  1. Do you need event-level historical analytics? (Per-user view logs, query timing trends, custom audit dashboards beyond what Cloud Manager surfaces.) If yes — on-premise is effectively required, or you must commit to a metadata-warehousing project on day one.
  2. Is your team already operating a data warehouse? If yes, Cloud becomes much more viable — you persist REST + GraphQL snapshots into the warehouse and rebuild the analytics layer there. If no, the on-premise repository is doing that job for free, and giving it up has a real cost.

The platforms are not just hosted-vs-self-hosted equivalents. They diverge meaningfully at the metadata layer, and that divergence shapes what your BI team can do six and twelve months after the migration is complete.

FAQ

Can I query the Tableau Cloud repository directly? No. The PostgreSQL repository is an internal implementation detail of Tableau Server. Tableau Cloud does not expose it, and there is no SQL endpoint that replaces it.

Does the REST API behave identically on Cloud and Server? The surface is the same. Authentication endpoints differ (Cloud uses pod-specific hostnames such as 10ax.online.tableau.com); a few capabilities are version-gated by the platform release cadence; otherwise your tableauserverclient code is portable.

Is the GraphQL Metadata API a paid add-on on Cloud? The API itself is available on both platforms. Always confirm current licensing in the Tableau documentation before scoping work — entitlements have shifted in past releases.

How do I keep historical metadata if I move to Cloud? Run a scheduled job (Airflow, GitHub Actions, n8n) that pulls REST + GraphQL snapshots into your warehouse on a recurring cadence — daily for views and refreshes, hourly if you need finer-grained audit. That recreates the event log Cloud does not provide.

What is Tableau Cloud Manager and how does it compare to the repository? Cloud Manager exposes pre-aggregated admin data sources (logins, view counts, content inventory) inside the Cloud admin UI. It covers the most common admin reporting needs but does not match the granularity, retention, or SQL-level flexibility of the on-premise repository.

Ready to Elevate Your Tableau Experience?

Let's build something extraordinary together.