metadata-ingestion/docs/sources/tableau/tableau_post.md
Use the Important Capabilities table above as the source of truth for supported features and whether additional configuration is required.
Tableau Virtual Connections are shared data sources that provide a centralised, governed view of underlying tables. DataHub ingests them as datasets and creates lineage back to the physical tables they reference, including column-level lineage where available.
Virtual connection ingestion is enabled by default. To disable it, set ingest_virtual_connections: false in your recipe.
Lineage is emitted as received from Tableau's metadata API for
Some Tableau data sources are configured with an "Initial SQL" statement — SQL that Tableau runs when first opening a connection. DataHub can extract this SQL and use it to enrich the data source's metadata.
This feature is experimental. Enable it by setting ingest_initial_sql: true in your recipe. Because it requires downloading each published data source, and each workbook that contains embedded data sources, via separate REST API calls, it is disabled by default to avoid performance overhead on large Tableau sites.
When enabled, two output modes are available (both on by default):
initial_sql_as_lineage (default true): parses the Initial SQL and emits any referenced tables as upstream lineage of the data source. Statements that do not produce lineage (e.g. session-level SET commands) are silently skipped.initial_sql_as_custom_property (default true): stores the raw Initial SQL text as the initialSql custom property on the data source dataset.Both published and embedded (workbook) data sources are supported. Published data sources are read from their downloaded definition; embedded data sources have no standalone download, so their Initial SQL is read from the parent workbook's downloaded definition and matched to the data source by name. An embedded data source whose name cannot be unambiguously matched in its workbook is skipped and counted in the num_initial_sql_embedded_datasources_unmatched report metric.
In some cases, the Tableau Metadata API may not return column information for upstream tables (i.e., columnsConnection.totalCount is null or 0). This can occur due to:
DataHub will still create table-level lineage for these tables, even though column-level lineage cannot be generated. This ensures that upstream table relationships remain visible in lineage graphs.
Observability: The ingestion report tracks these tables using the counter num_upstream_table_processed_without_columns.
Module behavior is constrained by source APIs, permissions, and metadata exposed by the platform. Refer to capability notes for unsupported or conditional features.
Initial SQL ingestion (ingest_initial_sql) supports both published and embedded (workbook) data sources. It is disabled by default because it issues a download request per published data source and per workbook, which can be slow on sites with many data sources or workbooks.
Tableau metadata API might return incorrect schema name for tables for some databases, leading to incorrect metadata in DataHub. This source attempts to extract correct schema from databaseTable's fully qualified name, wherever possible. Read Using the databaseTable object in query for caveats in using schema attribute.
This may happen when the Tableau API returns NODE_LIMIT_EXCEEDED error in response to metadata query and returns partial results with message "Showing partial results. , The request exceeded the ‘n’ node limit. Use pagination, additional filtering, or both in the query to adjust results." To resolve this, consider
page_size config param in datahub recipe (Defaults to 10).PERMISSIONS_MODE_SWITCHED error in ingestion reportThis error occurs if the Tableau site is using external assets. For more detail, refer to the Tableau documentation Manage Permissions for External Assets.
Follow the below steps to enable the derived permissions:
Automatically grant authorized users access to metadata about databases and tables check box.If ingestion fails, validate credentials, permissions, connectivity, and scope filters first. Then review ingestion logs for source-specific errors and adjust configuration accordingly.