ISSUE-17045: Modified to create column linage even when upstream columns and data source columns are one-to-many (#17112)

Co-authored-by: Pere Miquel Brull <peremiquelbrull@gmail.com>
This commit is contained in:
kwgdaig 2024-08-22 16:07:05 +09:00 committed by GitHub
parent 3d8d8566cc
commit 43a244fbf1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -313,17 +313,18 @@ class TableauSource(DashboardServiceSource):
@staticmethod
def _get_data_model_column_fqn(
data_model_entity: DashboardDataModel, column: str
) -> Optional[str]:
) -> Optional[List[str]]:
"""
Get fqn of column if exist in table entity
"""
if not data_model_entity:
return None
columns = []
for tbl_column in data_model_entity.columns:
for child_column in tbl_column.children or []:
if column.lower() == child_column.name.root.lower():
return child_column.fullyQualifiedName.root
return None
columns.append(child_column.fullyQualifiedName.root)
return columns
def _get_column_lineage( # pylint: disable=arguments-differ
self,
@ -342,13 +343,15 @@ class TableauSource(DashboardServiceSource):
from_column = get_column_fqn(
table_entity=table_entity, column=column.name
)
to_column = self._get_data_model_column_fqn(
to_columns = self._get_data_model_column_fqn(
data_model_entity=data_model_entity,
column=column.id,
)
column_lineage.append(
ColumnLineage(fromColumns=[from_column], toColumn=to_column)
)
for to_column in to_columns:
column_lineage.append(
ColumnLineage(fromColumns=[from_column], toColumn=to_column)
)
return column_lineage
except Exception as exc:
logger.debug(f"Error to get column lineage: {exc}")
logger.debug(traceback.format_exc())