mirror of
				https://github.com/open-metadata/OpenMetadata.git
				synced 2025-11-04 04:29:13 +00:00 
			
		
		
		
	Fix: looker CLL errors (#21493)
* Fix: looker CLL errors * Addressed comments- added exception handling * addressed comments * linting
This commit is contained in:
		
							parent
							
								
									b5f47e3309
								
							
						
					
					
						commit
						1c4500b119
					
				@ -649,13 +649,14 @@ class LookerSource(DashboardServiceSource):
 | 
			
		||||
        Extract column level lineage from a LookML view.
 | 
			
		||||
        Returns a list of tuples containing (source_column, target_column)
 | 
			
		||||
        """
 | 
			
		||||
        logger.debug(f"Extracting column lineage for view: {view.name}")
 | 
			
		||||
        column_lineage = []
 | 
			
		||||
        try:
 | 
			
		||||
            # Build a map: field_name → sql block
 | 
			
		||||
            field_sql_map = {}
 | 
			
		||||
            for field_type in ["dimensions", "measures", "dimension_groups"]:
 | 
			
		||||
                for field in getattr(view, field_type, []):
 | 
			
		||||
                    if hasattr(field, "sql"):
 | 
			
		||||
                    if hasattr(field, "sql") and field.sql is not None:
 | 
			
		||||
                        field_sql_map[field.name] = field.sql
 | 
			
		||||
 | 
			
		||||
            # Regex to extract ${TABLE}.col and ${field}
 | 
			
		||||
@ -682,10 +683,17 @@ class LookerSource(DashboardServiceSource):
 | 
			
		||||
                return source_cols
 | 
			
		||||
 | 
			
		||||
            # Build lineage for each field
 | 
			
		||||
            for field_name, _ in field_sql_map.items():
 | 
			
		||||
            for field_name, sql in field_sql_map.items():
 | 
			
		||||
                try:
 | 
			
		||||
                    if not sql:  # Skip if sql is None or empty
 | 
			
		||||
                        continue
 | 
			
		||||
                    source_cols = resolve(field_name)
 | 
			
		||||
                    for source_col in source_cols:
 | 
			
		||||
                        column_lineage.append((source_col, field_name))
 | 
			
		||||
                except Exception as err:
 | 
			
		||||
                    logger.warning(f"Error processing field {field_name}: {err}")
 | 
			
		||||
                    logger.debug(traceback.format_exc())
 | 
			
		||||
                    continue
 | 
			
		||||
 | 
			
		||||
            return column_lineage
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
@ -707,6 +715,9 @@ class LookerSource(DashboardServiceSource):
 | 
			
		||||
            # TODO: column-level lineage parsing the explore columns with the format `view_name.col`
 | 
			
		||||
            # Now the context has the newly created view
 | 
			
		||||
            if explore_model:
 | 
			
		||||
                logger.debug(
 | 
			
		||||
                    f"Building lineage request for view {self._view_data_model.name} to explore {explore_model.name}"
 | 
			
		||||
                )
 | 
			
		||||
                yield self._get_add_lineage_request(
 | 
			
		||||
                    from_entity=self._view_data_model, to_entity=explore_model
 | 
			
		||||
                )
 | 
			
		||||
@ -1066,6 +1077,8 @@ class LookerSource(DashboardServiceSource):
 | 
			
		||||
            db_service_name: name of the service from the config
 | 
			
		||||
            to_entity: Dashboard Entity being used
 | 
			
		||||
        """
 | 
			
		||||
        # pylint: disable=too-many-locals
 | 
			
		||||
        logger.debug(f"Building lineage request for {source} to {to_entity.name}")
 | 
			
		||||
 | 
			
		||||
        source_elements = fqn.split_table_name(table_name=source)
 | 
			
		||||
 | 
			
		||||
@ -1086,7 +1099,24 @@ class LookerSource(DashboardServiceSource):
 | 
			
		||||
 | 
			
		||||
            if column_lineage:
 | 
			
		||||
                processed_column_lineage = []
 | 
			
		||||
                for source_col, target_col in column_lineage:
 | 
			
		||||
                for column_tuple in column_lineage or []:
 | 
			
		||||
                    try:
 | 
			
		||||
                        if len(column_tuple) < 2:
 | 
			
		||||
                            logger.debug(
 | 
			
		||||
                                f"Skipping invalid column tuple: {column_tuple}"
 | 
			
		||||
                            )
 | 
			
		||||
                            continue
 | 
			
		||||
 | 
			
		||||
                        source_col = column_tuple[0]
 | 
			
		||||
                        target_col = column_tuple[-1]
 | 
			
		||||
 | 
			
		||||
                        if not source_col or not target_col:
 | 
			
		||||
                            logger.debug(
 | 
			
		||||
                                f"Skipping column tuple with empty values: source={source_col}, "
 | 
			
		||||
                                f"target={target_col}, to_entity={to_entity.name}"
 | 
			
		||||
                            )
 | 
			
		||||
                            continue
 | 
			
		||||
 | 
			
		||||
                        from_column = get_column_fqn(
 | 
			
		||||
                            table_entity=from_entity, column=str(target_col)
 | 
			
		||||
                        )
 | 
			
		||||
@ -1096,8 +1126,17 @@ class LookerSource(DashboardServiceSource):
 | 
			
		||||
                        )
 | 
			
		||||
                        if from_column and to_column:
 | 
			
		||||
                            processed_column_lineage.append(
 | 
			
		||||
                            ColumnLineage(fromColumns=[from_column], toColumn=to_column)
 | 
			
		||||
                                ColumnLineage(
 | 
			
		||||
                                    fromColumns=[from_column], toColumn=to_column
 | 
			
		||||
                                )
 | 
			
		||||
                            )
 | 
			
		||||
                    except Exception as err:
 | 
			
		||||
                        logger.warning(
 | 
			
		||||
                            f"Error processing column lineage {column_tuple}: {err}"
 | 
			
		||||
                        )
 | 
			
		||||
                        logger.debug(traceback.format_exc())
 | 
			
		||||
                        continue
 | 
			
		||||
 | 
			
		||||
                column_lineage = processed_column_lineage
 | 
			
		||||
 | 
			
		||||
            if from_entity:
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user