mirror of
https://github.com/datahub-project/datahub.git
synced 2025-08-18 14:16:48 +00:00
feat(powerbi): capture dataset report lineage (#12993)
This commit is contained in:
parent
ebea3b7ca3
commit
c6acce9906
@ -94,7 +94,7 @@ from datahub.metadata.schema_classes import (
|
|||||||
UpstreamLineageClass,
|
UpstreamLineageClass,
|
||||||
ViewPropertiesClass,
|
ViewPropertiesClass,
|
||||||
)
|
)
|
||||||
from datahub.metadata.urns import ChartUrn
|
from datahub.metadata.urns import ChartUrn, DatasetUrn
|
||||||
from datahub.sql_parsing.sqlglot_lineage import ColumnLineageInfo
|
from datahub.sql_parsing.sqlglot_lineage import ColumnLineageInfo
|
||||||
from datahub.utilities.dedup_list import deduplicate_list
|
from datahub.utilities.dedup_list import deduplicate_list
|
||||||
from datahub.utilities.urns.urn_iter import lowercase_dataset_urn
|
from datahub.utilities.urns.urn_iter import lowercase_dataset_urn
|
||||||
@ -1083,6 +1083,7 @@ class Mapper:
|
|||||||
report: powerbi_data_classes.Report,
|
report: powerbi_data_classes.Report,
|
||||||
chart_mcps: List[MetadataChangeProposalWrapper],
|
chart_mcps: List[MetadataChangeProposalWrapper],
|
||||||
user_mcps: List[MetadataChangeProposalWrapper],
|
user_mcps: List[MetadataChangeProposalWrapper],
|
||||||
|
dataset_edges: List[EdgeClass],
|
||||||
) -> List[MetadataChangeProposalWrapper]:
|
) -> List[MetadataChangeProposalWrapper]:
|
||||||
"""
|
"""
|
||||||
Map PowerBi report to Datahub dashboard
|
Map PowerBi report to Datahub dashboard
|
||||||
@ -1104,6 +1105,7 @@ class Mapper:
|
|||||||
charts=chart_urn_list,
|
charts=chart_urn_list,
|
||||||
lastModified=ChangeAuditStamps(),
|
lastModified=ChangeAuditStamps(),
|
||||||
dashboardUrl=report.webUrl,
|
dashboardUrl=report.webUrl,
|
||||||
|
datasetEdges=dataset_edges,
|
||||||
)
|
)
|
||||||
|
|
||||||
info_mcp = self.new_mcp(
|
info_mcp = self.new_mcp(
|
||||||
@ -1197,12 +1199,23 @@ class Mapper:
|
|||||||
ds_mcps = self.to_datahub_dataset(report.dataset, workspace)
|
ds_mcps = self.to_datahub_dataset(report.dataset, workspace)
|
||||||
chart_mcps = self.pages_to_chart(report.pages, workspace, ds_mcps)
|
chart_mcps = self.pages_to_chart(report.pages, workspace, ds_mcps)
|
||||||
|
|
||||||
|
# collect all upstream datasets; using a set to retain unique urns
|
||||||
|
dataset_urns = {
|
||||||
|
dataset.entityUrn
|
||||||
|
for dataset in ds_mcps
|
||||||
|
if dataset.entityType == DatasetUrn.ENTITY_TYPE and dataset.entityUrn
|
||||||
|
}
|
||||||
|
dataset_edges = [
|
||||||
|
EdgeClass(destinationUrn=dataset_urn) for dataset_urn in dataset_urns
|
||||||
|
]
|
||||||
|
|
||||||
# Let's convert report to datahub dashboard
|
# Let's convert report to datahub dashboard
|
||||||
report_mcps = self.report_to_dashboard(
|
report_mcps = self.report_to_dashboard(
|
||||||
workspace=workspace,
|
workspace=workspace,
|
||||||
report=report,
|
report=report,
|
||||||
chart_mcps=chart_mcps,
|
chart_mcps=chart_mcps,
|
||||||
user_mcps=user_mcps,
|
user_mcps=user_mcps,
|
||||||
|
dataset_edges=dataset_edges,
|
||||||
)
|
)
|
||||||
|
|
||||||
# Now add MCPs in sequence
|
# Now add MCPs in sequence
|
||||||
|
@ -2524,6 +2524,48 @@
|
|||||||
"aspectName": "dashboardInfo",
|
"aspectName": "dashboardInfo",
|
||||||
"aspect": {
|
"aspect": {
|
||||||
"json": [
|
"json": [
|
||||||
|
{
|
||||||
|
"op": "add",
|
||||||
|
"path": "/datasetEdges/urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.snowflake_native-query-with-join,DEV)",
|
||||||
|
"value": {
|
||||||
|
"destinationUrn": "urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.snowflake_native-query-with-join,DEV)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"op": "add",
|
||||||
|
"path": "/datasetEdges/urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.public_issue_history,DEV)",
|
||||||
|
"value": {
|
||||||
|
"destinationUrn": "urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.public_issue_history,DEV)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"op": "add",
|
||||||
|
"path": "/datasetEdges/urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.job-history,DEV)",
|
||||||
|
"value": {
|
||||||
|
"destinationUrn": "urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.job-history,DEV)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"op": "add",
|
||||||
|
"path": "/datasetEdges/urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.postgres_test_table,DEV)",
|
||||||
|
"value": {
|
||||||
|
"destinationUrn": "urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.postgres_test_table,DEV)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"op": "add",
|
||||||
|
"path": "/datasetEdges/urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.snowflake_native-query,DEV)",
|
||||||
|
"value": {
|
||||||
|
"destinationUrn": "urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.snowflake_native-query,DEV)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"op": "add",
|
||||||
|
"path": "/datasetEdges/urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.SNOWFLAKE_TESTTABLE,DEV)",
|
||||||
|
"value": {
|
||||||
|
"destinationUrn": "urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.SNOWFLAKE_TESTTABLE,DEV)"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"op": "add",
|
"op": "add",
|
||||||
"path": "/title",
|
"path": "/title",
|
||||||
|
@ -3458,6 +3458,55 @@
|
|||||||
"aspectName": "dashboardInfo",
|
"aspectName": "dashboardInfo",
|
||||||
"aspect": {
|
"aspect": {
|
||||||
"json": [
|
"json": [
|
||||||
|
{
|
||||||
|
"op": "add",
|
||||||
|
"path": "/datasetEdges/urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.snowflake_native-query-with-join,DEV)",
|
||||||
|
"value": {
|
||||||
|
"destinationUrn": "urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.snowflake_native-query-with-join,DEV)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"op": "add",
|
||||||
|
"path": "/datasetEdges/urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.public_issue_history,DEV)",
|
||||||
|
"value": {
|
||||||
|
"destinationUrn": "urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.public_issue_history,DEV)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"op": "add",
|
||||||
|
"path": "/datasetEdges/urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.job-history,DEV)",
|
||||||
|
"value": {
|
||||||
|
"destinationUrn": "urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.job-history,DEV)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"op": "add",
|
||||||
|
"path": "/datasetEdges/urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.postgres_test_table,DEV)",
|
||||||
|
"value": {
|
||||||
|
"destinationUrn": "urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.postgres_test_table,DEV)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"op": "add",
|
||||||
|
"path": "/datasetEdges/urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.snowflake_native-query,DEV)",
|
||||||
|
"value": {
|
||||||
|
"destinationUrn": "urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.snowflake_native-query,DEV)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"op": "add",
|
||||||
|
"path": "/datasetEdges/urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.SNOWFLAKE_TESTTABLE,DEV)",
|
||||||
|
"value": {
|
||||||
|
"destinationUrn": "urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.SNOWFLAKE_TESTTABLE,DEV)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"op": "add",
|
||||||
|
"path": "/datasetEdges/urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.big-query-with-parameter,DEV)",
|
||||||
|
"value": {
|
||||||
|
"destinationUrn": "urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.big-query-with-parameter,DEV)"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"op": "add",
|
"op": "add",
|
||||||
"path": "/title",
|
"path": "/title",
|
||||||
@ -4595,6 +4644,55 @@
|
|||||||
"aspectName": "dashboardInfo",
|
"aspectName": "dashboardInfo",
|
||||||
"aspect": {
|
"aspect": {
|
||||||
"json": [
|
"json": [
|
||||||
|
{
|
||||||
|
"op": "add",
|
||||||
|
"path": "/datasetEdges/urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.snowflake_native-query-with-join,DEV)",
|
||||||
|
"value": {
|
||||||
|
"destinationUrn": "urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.snowflake_native-query-with-join,DEV)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"op": "add",
|
||||||
|
"path": "/datasetEdges/urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.public_issue_history,DEV)",
|
||||||
|
"value": {
|
||||||
|
"destinationUrn": "urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.public_issue_history,DEV)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"op": "add",
|
||||||
|
"path": "/datasetEdges/urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.job-history,DEV)",
|
||||||
|
"value": {
|
||||||
|
"destinationUrn": "urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.job-history,DEV)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"op": "add",
|
||||||
|
"path": "/datasetEdges/urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.postgres_test_table,DEV)",
|
||||||
|
"value": {
|
||||||
|
"destinationUrn": "urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.postgres_test_table,DEV)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"op": "add",
|
||||||
|
"path": "/datasetEdges/urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.snowflake_native-query,DEV)",
|
||||||
|
"value": {
|
||||||
|
"destinationUrn": "urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.snowflake_native-query,DEV)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"op": "add",
|
||||||
|
"path": "/datasetEdges/urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.SNOWFLAKE_TESTTABLE,DEV)",
|
||||||
|
"value": {
|
||||||
|
"destinationUrn": "urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.SNOWFLAKE_TESTTABLE,DEV)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"op": "add",
|
||||||
|
"path": "/datasetEdges/urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.big-query-with-parameter,DEV)",
|
||||||
|
"value": {
|
||||||
|
"destinationUrn": "urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.big-query-with-parameter,DEV)"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"op": "add",
|
"op": "add",
|
||||||
"path": "/title",
|
"path": "/title",
|
||||||
|
@ -2503,6 +2503,55 @@
|
|||||||
"aspectName": "dashboardInfo",
|
"aspectName": "dashboardInfo",
|
||||||
"aspect": {
|
"aspect": {
|
||||||
"json": [
|
"json": [
|
||||||
|
{
|
||||||
|
"op": "add",
|
||||||
|
"path": "/datasetEdges/urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.snowflake_native-query-with-join,DEV)",
|
||||||
|
"value": {
|
||||||
|
"destinationUrn": "urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.snowflake_native-query-with-join,DEV)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"op": "add",
|
||||||
|
"path": "/datasetEdges/urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.public_issue_history,DEV)",
|
||||||
|
"value": {
|
||||||
|
"destinationUrn": "urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.public_issue_history,DEV)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"op": "add",
|
||||||
|
"path": "/datasetEdges/urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.job-history,DEV)",
|
||||||
|
"value": {
|
||||||
|
"destinationUrn": "urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.job-history,DEV)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"op": "add",
|
||||||
|
"path": "/datasetEdges/urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.postgres_test_table,DEV)",
|
||||||
|
"value": {
|
||||||
|
"destinationUrn": "urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.postgres_test_table,DEV)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"op": "add",
|
||||||
|
"path": "/datasetEdges/urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.snowflake_native-query,DEV)",
|
||||||
|
"value": {
|
||||||
|
"destinationUrn": "urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.snowflake_native-query,DEV)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"op": "add",
|
||||||
|
"path": "/datasetEdges/urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.SNOWFLAKE_TESTTABLE,DEV)",
|
||||||
|
"value": {
|
||||||
|
"destinationUrn": "urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.SNOWFLAKE_TESTTABLE,DEV)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"op": "add",
|
||||||
|
"path": "/datasetEdges/urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.big-query-with-parameter,DEV)",
|
||||||
|
"value": {
|
||||||
|
"destinationUrn": "urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.big-query-with-parameter,DEV)"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"op": "add",
|
"op": "add",
|
||||||
"path": "/title",
|
"path": "/title",
|
||||||
@ -3425,6 +3474,55 @@
|
|||||||
"aspectName": "dashboardInfo",
|
"aspectName": "dashboardInfo",
|
||||||
"aspect": {
|
"aspect": {
|
||||||
"json": [
|
"json": [
|
||||||
|
{
|
||||||
|
"op": "add",
|
||||||
|
"path": "/datasetEdges/urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.snowflake_native-query-with-join,DEV)",
|
||||||
|
"value": {
|
||||||
|
"destinationUrn": "urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.snowflake_native-query-with-join,DEV)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"op": "add",
|
||||||
|
"path": "/datasetEdges/urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.public_issue_history,DEV)",
|
||||||
|
"value": {
|
||||||
|
"destinationUrn": "urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.public_issue_history,DEV)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"op": "add",
|
||||||
|
"path": "/datasetEdges/urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.job-history,DEV)",
|
||||||
|
"value": {
|
||||||
|
"destinationUrn": "urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.job-history,DEV)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"op": "add",
|
||||||
|
"path": "/datasetEdges/urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.postgres_test_table,DEV)",
|
||||||
|
"value": {
|
||||||
|
"destinationUrn": "urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.postgres_test_table,DEV)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"op": "add",
|
||||||
|
"path": "/datasetEdges/urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.snowflake_native-query,DEV)",
|
||||||
|
"value": {
|
||||||
|
"destinationUrn": "urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.snowflake_native-query,DEV)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"op": "add",
|
||||||
|
"path": "/datasetEdges/urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.SNOWFLAKE_TESTTABLE,DEV)",
|
||||||
|
"value": {
|
||||||
|
"destinationUrn": "urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.SNOWFLAKE_TESTTABLE,DEV)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"op": "add",
|
||||||
|
"path": "/datasetEdges/urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.big-query-with-parameter,DEV)",
|
||||||
|
"value": {
|
||||||
|
"destinationUrn": "urn:li:dataset:(urn:li:dataPlatform:powerbi,library-dataset.big-query-with-parameter,DEV)"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"op": "add",
|
"op": "add",
|
||||||
"path": "/title",
|
"path": "/title",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user