@@ -608,6 +608,25 @@ def get_database_owner_ref(
608608 parent_owner = None , # Database is top level
609609 )
610610 if owner_ref :
611+ # After resolving owner, fetch and cache the database entity for schema inheritance
612+ # This avoids API calls when processing schemas
613+ try :
614+ database_fqn = fqn .build (
615+ metadata = self .metadata ,
616+ entity_type = Database ,
617+ service_name = self .context .get ().database_service ,
618+ database_name = database_name ,
619+ )
620+ database_entity = self .metadata .get_by_name (
621+ entity = Database ,
622+ fqn = database_fqn ,
623+ fields = ["owners" ],
624+ )
625+ if database_entity :
626+ self .context .get ().upsert (key = "database_entity" , value = database_entity )
627+ except Exception as cache_exc :
628+ logger .debug (f"Could not cache database entity: { cache_exc } " )
629+
611630 return owner_ref
612631
613632 except Exception as exc :
@@ -634,29 +653,8 @@ def get_schema_owner_ref(self, schema_name: str) -> Optional[EntityReferenceList
634653 try :
635654 parent_owner = None
636655
637- # Try to get database_entity from context
656+ # Get database_entity from context (should be cached by get_database_owner_ref)
638657 database_entity = getattr (self .context .get (), "database_entity" , None )
639-
640- # If not in context, fetch from API and cache it
641- if database_entity is None and self .context .get ().database :
642- try :
643- database_fqn = fqn .build (
644- metadata = self .metadata ,
645- entity_type = Database ,
646- service_name = self .context .get ().database_service ,
647- database_name = self .context .get ().database ,
648- )
649- database_entity = self .metadata .get_by_name (
650- entity = Database ,
651- fqn = database_fqn ,
652- fields = ["owners" ],
653- )
654- if database_entity :
655- # Cache in context for future use
656- self .context .get ().upsert (key = "database_entity" , value = database_entity )
657- except Exception as exc :
658- logger .debug (f"Could not fetch database entity: { exc } " )
659-
660658 if database_entity :
661659 db_owners = database_entity .owners
662660 if db_owners and db_owners .root :
@@ -676,6 +674,26 @@ def get_schema_owner_ref(self, schema_name: str) -> Optional[EntityReferenceList
676674 parent_owner = parent_owner ,
677675 )
678676 if owner_ref :
677+ # After resolving owner, fetch and cache the schema entity for table inheritance
678+ # This avoids API calls when processing tables
679+ try :
680+ schema_fqn_full = fqn .build (
681+ metadata = self .metadata ,
682+ entity_type = DatabaseSchema ,
683+ service_name = self .context .get ().database_service ,
684+ database_name = self .context .get ().database ,
685+ schema_name = schema_name ,
686+ )
687+ schema_entity = self .metadata .get_by_name (
688+ entity = DatabaseSchema ,
689+ fqn = schema_fqn_full ,
690+ fields = ["owners" ],
691+ )
692+ if schema_entity :
693+ self .context .get ().upsert (key = "database_schema_entity" , value = schema_entity )
694+ except Exception as cache_exc :
695+ logger .debug (f"Could not cache schema entity: { cache_exc } " )
696+
679697 return owner_ref
680698
681699 except Exception as exc :
@@ -702,32 +720,10 @@ def get_owner_ref(self, table_name: str) -> Optional[EntityReferenceList]:
702720 try :
703721 parent_owner = None
704722
705- # Try to get database_schema_entity from context
723+ # Get database_schema_entity from context (should be cached by get_schema_owner_ref)
706724 database_schema_entity = getattr (
707725 self .context .get (), "database_schema_entity" , None
708726 )
709-
710- # If not in context, fetch from API and cache it
711- if database_schema_entity is None and self .context .get ().database_schema :
712- try :
713- schema_fqn = fqn .build (
714- metadata = self .metadata ,
715- entity_type = DatabaseSchema ,
716- service_name = self .context .get ().database_service ,
717- database_name = self .context .get ().database ,
718- schema_name = self .context .get ().database_schema ,
719- )
720- database_schema_entity = self .metadata .get_by_name (
721- entity = DatabaseSchema ,
722- fqn = schema_fqn ,
723- fields = ["owners" ],
724- )
725- if database_schema_entity :
726- # Cache in context for future use
727- self .context .get ().upsert (key = "database_schema_entity" , value = database_schema_entity )
728- except Exception as exc :
729- logger .debug (f"Could not fetch schema entity: { exc } " )
730-
731727 if database_schema_entity :
732728 schema_owners = database_schema_entity .owners
733729 if schema_owners and schema_owners .root :
0 commit comments