#19688·datahub

Tableau: Virtual Connection Tables missing downstream lineage to Embedded Data Sources (field upstream re-fetch overwrites VC data)

Author: rospeCreated Sep 9, 2026Updated Sep 9, 2026
Labelsbug

Describe the bug

Virtual Connection Tables have no downstream lineage edges to the Embedded Data Sources that consume them. In one production instance, 40 of 41 sampled Virtual Connection Tables are lineage dead-ends: they have upstream edges (to Snowflake) but zero downstream edges to the Embedded Data Sources that connect through them.

Root cause

The Tableau connector fetches datasources in two phases:

  1. Initial fetch (embedded_datasource_graphql_query / published_datasource_graphql_query) returns fields with full upstreamColumns data, including table.name and the ... on VirtualConnectionTable { virtualConnection { id, name } } fragment.
  2. Field upstream re-fetch (datasource_upstream_fields_graphql_query via update_datasource_for_field_upstream) re-fetches fields to add upstreamFields for column-level lineage, but only requests table { __typename, id }.

The re-fetch merges back with field_dict.update(), which overwrites the original upstreamColumns and drops table.name and virtualConnection. Later, get_upstream_vc_tables sees __typename == "VirtualConnectionTable" but a null table.name and missing virtualConnection, so its guard silently skips the reference and no VC lineage edge is produced.

To Reproduce

  1. Ingest a Tableau source where Embedded Data Sources connect through Virtual Connection Tables.
  2. Inspect a Virtual Connection Table entity's lineage.
  3. Observe it has upstream edges but no downstream edges to the consuming Embedded Data Sources.

Expected behavior

Virtual Connection Tables should have downstream lineage edges to the Embedded Data Sources that consume them.

Version

DataHub ingestion (Tableau source), current master.