Skip to content

Commit

Permalink
feat(ingestion): powerbi # support platform instance (datahub-project…
Browse files Browse the repository at this point in the history
…#7583)

Co-authored-by: MohdSiddiqueBagwan <mohdsiddique.bagwan@gslab.com>
Co-authored-by: John Joyce <john@acryl.io>
  • Loading branch information
3 people authored and shirshanka committed Mar 22, 2023
1 parent fd7c334 commit 6655c8a
Show file tree
Hide file tree
Showing 5 changed files with 736 additions and 8 deletions.
Expand Up @@ -235,6 +235,11 @@ class PowerBiDashboardSourceConfig(
"be extracted. Admin API access is required if this setting is enabled",
)

platform_instance: Optional[str] = pydantic.Field(
default=None,
description="The instance of the platform that all assets produced by this recipe belong to",
)

@validator("dataset_type_mapping")
@classmethod
def map_data_platform(cls, value):
Expand Down
29 changes: 22 additions & 7 deletions metadata-ingestion/src/datahub/ingestion/source/powerbi/powerbi.py
Expand Up @@ -233,9 +233,10 @@ def to_datahub_dataset(

for table in dataset.tables:
# Create a URN for dataset
ds_urn = builder.make_dataset_urn(
ds_urn = builder.make_dataset_urn_with_platform_instance(
platform=self.__config.platform_name,
name=self.assets_urn_to_lowercase(table.full_name),
platform_instance=self.__config.platform_instance,
env=self.__config.env,
)

Expand Down Expand Up @@ -301,7 +302,9 @@ def to_datahub_chart_mcp(
logger.info(f"Converting tile {tile.title}(id={tile.id}) to chart")
# Create a URN for chart
chart_urn = builder.make_chart_urn(
self.__config.platform_name, tile.get_urn_part()
platform=self.__config.platform_name,
platform_instance=self.__config.platform_instance,
name=tile.get_urn_part(),
)

logger.info(f"{Constant.CHART_URN}={chart_urn}")
Expand Down Expand Up @@ -401,7 +404,9 @@ def to_datahub_dashboard_mcp(
"""

dashboard_urn = builder.make_dashboard_urn(
self.__config.platform_name, dashboard.get_urn_part()
platform=self.__config.platform_name,
platform_instance=self.__config.platform_instance,
name=dashboard.get_urn_part(),
)

chart_urn_list: List[str] = self.to_urn_set(chart_mcps)
Expand Down Expand Up @@ -514,7 +519,10 @@ def append_container_mcp(
entity_urn: str,
) -> None:
if self.__config.extract_workspaces_to_containers:
container_key = workspace.get_workspace_key(self.__config.platform_name)
container_key = workspace.get_workspace_key(
platform_name=self.__config.platform_name,
platform_instance=self.__config.platform_instance,
)
container_urn = builder.make_container_urn(
guid=container_key.guid(),
)
Expand Down Expand Up @@ -672,7 +680,9 @@ def to_chart_mcps(
logger.debug(f"Converting page {page.displayName} to chart")
# Create a URN for chart
chart_urn = builder.make_chart_urn(
self.__config.platform_name, page.get_urn_part()
platform=self.__config.platform_name,
platform_instance=self.__config.platform_instance,
name=page.get_urn_part(),
)

logger.debug(f"{Constant.CHART_URN}={chart_urn}")
Expand Down Expand Up @@ -741,7 +751,9 @@ def report_to_dashboard(
"""

dashboard_urn = builder.make_dashboard_urn(
self.__config.platform_name, report.get_urn_part()
platform=self.__config.platform_name,
platform_instance=self.__config.platform_instance,
name=report.get_urn_part(),
)

chart_urn_list: List[str] = self.to_urn_set(chart_mcps)
Expand Down Expand Up @@ -878,8 +890,11 @@ def report_to_datahub_work_units(
@platform_name("PowerBI")
@config_class(PowerBiDashboardSourceConfig)
@support_status(SupportStatus.CERTIFIED)
@capability(SourceCapability.DESCRIPTIONS, "Enabled by default")
@capability(SourceCapability.PLATFORM_INSTANCE, "Enabled by default")
@capability(
SourceCapability.OWNERSHIP, "On by default but can disabled by configuration"
SourceCapability.OWNERSHIP,
"Disabled by default, configured using `extract_ownership`",
)
class PowerBiDashboardSource(StatefulIngestionSourceBase):
"""
Expand Down
Expand Up @@ -23,10 +23,13 @@ class Workspace:
def get_urn_part(self):
return self.name

def get_workspace_key(self, platform_name: str) -> PlatformKey:
def get_workspace_key(
self, platform_name: str, platform_instance: Optional[str] = None
) -> PlatformKey:
return WorkspaceKey(
workspace=self.get_urn_part(),
platform=platform_name,
instance=platform_instance,
)


Expand Down

0 comments on commit 6655c8a

Please sign in to comment.