From 78aeb7febdc022354475e16b9f255a27d2572947 Mon Sep 17 00:00:00 2001 From: Yian Shang Date: Sun, 8 Mar 2026 12:58:32 -0700 Subject: [PATCH] Only load what is actually going to be used by build v3 --- .../construction/build_v3/loaders.py | 32 ++++++++++++++++--- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/datajunction-server/datajunction_server/construction/build_v3/loaders.py b/datajunction-server/datajunction_server/construction/build_v3/loaders.py index bcc4d5eeb..9652e0fa7 100644 --- a/datajunction-server/datajunction_server/construction/build_v3/loaders.py +++ b/datajunction-server/datajunction_server/construction/build_v3/loaders.py @@ -392,19 +392,41 @@ async def load_nodes(ctx: BuildContext) -> None: ), joinedload(NodeRevision.catalog), selectinload(NodeRevision.required_dimensions).options( - # Load the node_revision and node to reconstruct full dimension path + # Only need col.name to reconstruct full dimension path + load_only(Column.name), joinedload(Column.node_revision).options( - noload(NodeRevision.created_by), # Prevent User N+1 queries + load_only(NodeRevision.name), + noload(NodeRevision.created_by), joinedload(NodeRevision.node).options( - noload(Node.created_by), # Prevent User N+1 queries + load_only(Node.name), + noload(Node.created_by), ), ), ), joinedload(NodeRevision.availability), # For materialization support selectinload(NodeRevision.dimension_links).options( - # Load dimension node for link matching in temporal filters + # Restrict to fields actually used during query building + load_only( + DimensionLink.role, + DimensionLink.join_sql, + DimensionLink.join_type, + DimensionLink.join_cardinality, + DimensionLink.default_value, + DimensionLink.dimension_id, + DimensionLink.node_revision_id, + ), joinedload(DimensionLink.dimension).options( - noload(Node.created_by), # Prevent User N+1 queries + load_only(Node.name, Node.current_version), + noload(Node.created_by), + # Load dimension's current revision + columns for temporal partition + # support (measures.py accesses link.dimension.current.columns) + joinedload(Node.current).options( + load_only(NodeRevision.name), + noload(NodeRevision.created_by), + selectinload(NodeRevision.columns).options( + load_only(Column.name, Column.type), + ), + ), ), ), ),