DataHub Python Builds

These prebuilt wheel files can be used to install our Python packages as of a specific commit.

Build context

Built at 2026-08-21T10:52:58.912734+00:00.

{
  "timestamp": "2026-08-21T10:52:58.912734+00:00",
  "branch": "feat/powerbi-shared-expressions",
  "commit": {
    "hash": "0428f98044d709fb15814b167db966d5a1bf8ab1",
    "message": "feat(ingest/powerbi): follow references into queries the model does not load\n\nA query with \"Enable load\" switched off is not a table in the model. It has\nno entity of its own, so a loaded table built on one had nothing to point an\nedge at and lost its lineage entirely:\n\n    Combined Actions          load ON  -- the only table\n      = Table.Combine({ #\"Intercom Only\", #\"Intercom Excluded\" })\n            both load OFF, both reading\n              #\"Combined Actions Base\"  load OFF, holds Databricks.Catalogs\n\nThose names are bound nowhere in the table's own expression, so the walk\nstopped at the first one.\n\nThe M for them is already in hand: the scan is asked for datasetExpressions\nand the response was being discarded. Keep it on the dataset and, when no\nenclosing let binds a name, follow it into the query that defines it. Since\nthose queries are not entities, the chain is followed inline and the data\nsource it ends at is attributed to the loaded table.\n\nA parameter is not a query -- following one leads to a literal -- so\nexpressions carrying IsParameterQuery are left alone. Names match the way\nidentifier lookup does elsewhere, case-insensitively.\n\nTwo queries referencing each other stop rather than recurse, and a chain\nlonger than ten references is treated as not a real model shape. A query\nreached by several routes is parsed once, not once per route.\n\nReaching the same upstream by more than one route is legitimate -- two\nqueries filtering a common source, or both branches of a conditional -- but\nthe aspect should name it once, so upstreams are now deduplicated as they\nare collected. That also covers Table.Combine over two identical sources,\nwhich could already duplicate before this change."
  },
  "base": {
    "hash": "0c3d423da30de283fb8d2ad019d4c0169f5aedef",
    "message": "fix(ingest/powerbi): resolve M-Query names against enclosing let scopes\n\nThe walk carried one let at a time. Descending into a nested let replaced\nthe enclosing scope instead of adding to it, so a nested body could not\nreach any step its parents bound:\n\n    Source = Databricks.Catalogs(...),\n    db     = Source{[Name=\"cat\", Kind=\"Database\"]}[Data],\n    sch    = db{[Name=\"sch\", Kind=\"Schema\"]}[Data],\n    out    = let tbl = sch{[Name=\"tbl\", Kind=\"Table\"]}[Data] in tbl\n\n`sch` was unreachable from the inner let, so the table produced no lineage\nat all. Nested lets are common in Power BI-generated M and `Source` is the\ndefault step name, so this is not an unusual shape.\n\nCarry the enclosing scopes as a chain, innermost last, and look a name up\nfrom the inside out so the nearest binding wins.\n\nThe chain is truncated at the scope that binds the name, because a step\nbound by an outer let is evaluated in that let's scope and cannot see names\na nested one introduces. Without that, `a = sch{...}` at the outer level\nresolves against a nested `sch` and invents an upstream from an expression\nPower BI itself would reject -- verified, it produces `cat.inner.tbl`.\n\nThe circular-reference guard now keys on the scope that actually bound the\nname rather than whichever let happened to be current."
  },
  "pr": {
    "number": 19372,
    "title": "feat(ingest/powerbi): follow references into queries the model does not load",
    "url": "https://github.com/datahub-project/datahub/pull/19372"
  }
}

Usage

Current base URL: unknown

Package Size Install command
acryl-datahub 5.020 MB uv pip install 'acryl-datahub @ <base-url>/artifacts/wheels/acryl_datahub-0.0.0.dev1-py3-none-any.whl'
acryl-datahub-actions 0.117 MB uv pip install 'acryl-datahub-actions @ <base-url>/artifacts/wheels/acryl_datahub_actions-0.0.0.dev1-py3-none-any.whl'
acryl-datahub-airflow-plugin 0.072 MB uv pip install 'acryl-datahub-airflow-plugin @ <base-url>/artifacts/wheels/acryl_datahub_airflow_plugin-0.0.0.dev1-py3-none-any.whl'
acryl-datahub-dagster-plugin 0.021 MB uv pip install 'acryl-datahub-dagster-plugin @ <base-url>/artifacts/wheels/acryl_datahub_dagster_plugin-0.0.0.dev1-py3-none-any.whl'
acryl-datahub-gx-plugin 0.019 MB uv pip install 'acryl-datahub-gx-plugin @ <base-url>/artifacts/wheels/acryl_datahub_gx_plugin-0.0.0.dev1-py3-none-any.whl'
prefect-datahub 0.011 MB uv pip install 'prefect-datahub @ <base-url>/artifacts/wheels/prefect_datahub-0.0.0.dev1-py3-none-any.whl'