Skip to content

Commit 6046841

Browse files
Refactor: Cache database and schema entities for performance
Co-authored-by: yourton.ma <yourton.ma@gmail.com>
1 parent 500f848 commit 6046841

File tree

1 file changed

+41
-45
lines changed

1 file changed

+41
-45
lines changed

ingestion/src/metadata/ingestion/source/database/database_service.py

Lines changed: 41 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)