From 6b3eb869484f97f383642ecf5672a8dbfb12bf0f Mon Sep 17 00:00:00 2001 From: Harshal Sheth Date: Wed, 8 May 2024 14:07:44 -0700 Subject: [PATCH 1/6] perf(ingest): speed up urn encode happy path (#10451) --- metadata-ingestion/src/datahub/utilities/urn_encoder.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/metadata-ingestion/src/datahub/utilities/urn_encoder.py b/metadata-ingestion/src/datahub/utilities/urn_encoder.py index b39dd04370682..88c0a128b8e46 100644 --- a/metadata-ingestion/src/datahub/utilities/urn_encoder.py +++ b/metadata-ingestion/src/datahub/utilities/urn_encoder.py @@ -15,7 +15,10 @@ def encode_string_array(arr: List[str]) -> List[str]: @staticmethod def encode_string(s: str) -> str: - return "".join([UrnEncoder.encode_char(c) for c in s]) + if not UrnEncoder.contains_reserved_char(s): + # Fast path for the common case, where no encoding is needed. + return s + return "".join(UrnEncoder.encode_char(c) for c in s) @staticmethod def encode_char(c: str) -> str: From b1b7cedd8d1b50f5b2932b519fd275deec49282e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Egemen=20Berk=20Galatal=C4=B1?= Date: Thu, 9 May 2024 00:21:07 +0300 Subject: [PATCH 2/6] feat(ingest/tableau): Fetch Upstreams From Columns (#9874) --- .../src/datahub/ingestion/source/tableau.py | 24 ++ .../embeddedDatasourcesConnection_all.json | 70 +++++ .../tableau/tableau_cll_mces_golden.json | 269 +++++++++++++++++ ...bleau_extract_all_project_mces_golden.json | 269 +++++++++++++++++ .../tableau/tableau_mces_golden.json | 269 +++++++++++++++++ .../tableau_mces_golden_deleted_stateful.json | 16 + .../tableau_nested_project_mces_golden.json | 269 +++++++++++++++++ .../tableau_signout_timeout_mces_golden.json | 269 +++++++++++++++++ ...au_with_platform_instance_mces_golden.json | 282 +++++++++++++++++- .../tableau/test_tableau_ingest.py | 3 +- 10 files changed, 1737 insertions(+), 3 deletions(-) diff --git a/metadata-ingestion/src/datahub/ingestion/source/tableau.py b/metadata-ingestion/src/datahub/ingestion/source/tableau.py index d6f63ab385f52..6fbc56c57d4f1 100644 --- a/metadata-ingestion/src/datahub/ingestion/source/tableau.py +++ b/metadata-ingestion/src/datahub/ingestion/source/tableau.py @@ -1004,6 +1004,30 @@ def _create_upstream_table_lineage( env=self.config.env, ) + if not upstream_tables: + # Tableau's metadata graphql API sometimes returns an empty list for upstreamTables + # for embedded datasources. However, the upstreamColumns field often includes information. + # This attempts to populate upstream table information from the upstreamColumns field. + table_id_to_urn = { + column[c.TABLE][c.ID]: builder.make_dataset_urn_with_platform_instance( + self.platform, + column[c.TABLE][c.ID], + self.config.platform_instance, + self.config.env, + ) + for field in datasource.get(c.FIELDS, []) + for column in field.get(c.UPSTREAM_COLUMNS, []) + if column.get(c.TABLE, {}).get(c.TYPE_NAME) == c.CUSTOM_SQL_TABLE + and column.get(c.TABLE, {}).get(c.ID) + } + fine_grained_lineages = self.get_upstream_columns_of_fields_in_datasource( + datasource, datasource_urn, table_id_to_urn + ) + upstream_tables = [ + Upstream(dataset=table_urn, type=DatasetLineageType.TRANSFORMED) + for table_urn in table_id_to_urn.values() + ] + if datasource.get(c.FIELDS): if self.config.extract_column_level_lineage: # Find fine grained lineage for datasource column to datasource column edge, diff --git a/metadata-ingestion/tests/integration/tableau/setup/embeddedDatasourcesConnection_all.json b/metadata-ingestion/tests/integration/tableau/setup/embeddedDatasourcesConnection_all.json index bdb5013c2ea48..a558eea2e8dd8 100644 --- a/metadata-ingestion/tests/integration/tableau/setup/embeddedDatasourcesConnection_all.json +++ b/metadata-ingestion/tests/integration/tableau/setup/embeddedDatasourcesConnection_all.json @@ -12889,6 +12889,76 @@ "username": "jawadqu@gmail.com" } } + }, + { + "__typename": "EmbeddedDatasource", + "id": "5449c627-7462-4ef7-b492-bda46be068e3", + "name": "New DataSource", + "hasExtracts": true, + "extractLastRefreshTime": "2018-02-09T00:05:25Z", + "extractLastIncrementalUpdateTime": null, + "extractLastUpdateTime": "2018-02-09T00:05:25Z", + "upstreamDatabases": [], + "upstreamTables": [], + "downstreamSheets": [], + "fields": [ + { + "__typename": "ColumnField", + "id": "55a70afe-3e54-492d-80c8-744601ae78cc", + "name": "Program ID", + "description": null, + "isHidden": false, + "folderName": null, + "dataCategory": "NOMINAL", + "role": "DIMENSION", + "dataType": "STRING", + "defaultFormat": null, + "aggregation": null, + "upstreamFields": [], + "upstreamColumns": [ + { + "name": "id", + "table": { + "__typename": "CustomSQLTable", + "id": "c7dd65fb-6e7e-4091-bbde-8c78b34a40f8" + } + } + ] + }, + { + "__typename": "ColumnField", + "id": "636b9454-8786-4773-b94b-8e8f2db7e1a3", + "name": "Name", + "description": null, + "isHidden": false, + "folderName": null, + "dataCategory": "NOMINAL", + "role": "DIMENSION", + "dataType": "STRING", + "defaultFormat": null, + "aggregation": null, + "upstreamFields": [], + "upstreamColumns": [ + { + "name": "name", + "table": { + "__typename": "CustomSQLTable", + "id": "c7dd65fb-6e7e-4091-bbde-8c78b34a40f8" + } + } + ] + } + ], + "upstreamDatasources": [], + "workbook": { + "id": "bd040833-8f66-22c0-1b51-bd4ccf5eef7c", + "name": "Workbook published ds", + "projectName": "default", + "luid": "a059a443-7634-4abf-9e46-d147b99168be", + "owner": { + "username": "jawadqu@gmail.com" + } + } } ], "pageInfo": { diff --git a/metadata-ingestion/tests/integration/tableau/tableau_cll_mces_golden.json b/metadata-ingestion/tests/integration/tableau/tableau_cll_mces_golden.json index 3f481207a03ea..d8c27057872c8 100644 --- a/metadata-ingestion/tests/integration/tableau/tableau_cll_mces_golden.json +++ b/metadata-ingestion/tests/integration/tableau/tableau_cll_mces_golden.json @@ -31608,6 +31608,234 @@ "lastRunId": "no-run-id-provided" } }, +{ + "entityType": "dataset", + "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD)", + "changeType": "UPSERT", + "aspectName": "upstreamLineage", + "aspect": { + "json": { + "upstreams": [ + { + "auditStamp": { + "time": 0, + "actor": "urn:li:corpuser:unknown" + }, + "dataset": "urn:li:dataset:(urn:li:dataPlatform:tableau,c7dd65fb-6e7e-4091-bbde-8c78b34a40f8,PROD)", + "type": "TRANSFORMED" + } + ], + "fineGrainedLineages": [ + { + "upstreamType": "FIELD_SET", + "upstreams": [ + "urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:tableau,c7dd65fb-6e7e-4091-bbde-8c78b34a40f8,PROD),name)" + ], + "downstreamType": "FIELD", + "downstreams": [ + "urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD),Name)" + ], + "confidenceScore": 1.0 + }, + { + "upstreamType": "FIELD_SET", + "upstreams": [ + "urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:tableau,c7dd65fb-6e7e-4091-bbde-8c78b34a40f8,PROD),id)" + ], + "downstreamType": "FIELD", + "downstreams": [ + "urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD),Program ID)" + ], + "confidenceScore": 1.0 + } + ] + } + }, + "systemMetadata": { + "lastObserved": 1638860400000, + "runId": "tableau-test", + "lastRunId": "no-run-id-provided" + } +}, +{ + "proposedSnapshot": { + "com.linkedin.pegasus2avro.metadata.snapshot.DatasetSnapshot": { + "urn": "urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD)", + "aspects": [ + { + "com.linkedin.pegasus2avro.common.DataPlatformInstance": { + "platform": "urn:li:dataPlatform:tableau" + } + }, + { + "com.linkedin.pegasus2avro.common.BrowsePaths": { + "paths": [ + "/prod/tableau/default/Workbook published ds" + ] + } + }, + { + "com.linkedin.pegasus2avro.common.Ownership": { + "owners": [ + { + "owner": "urn:li:corpuser:jawadqu@gmail.com", + "type": "DATAOWNER" + } + ], + "lastModified": { + "time": 0, + "actor": "urn:li:corpuser:unknown" + } + } + }, + { + "com.linkedin.pegasus2avro.dataset.DatasetProperties": { + "customProperties": { + "hasExtracts": "True", + "extractLastRefreshTime": "2018-02-09T00:05:25Z", + "extractLastUpdateTime": "2018-02-09T00:05:25Z" + }, + "name": "New DataSource", + "tags": [] + } + }, + { + "com.linkedin.pegasus2avro.schema.SchemaMetadata": { + "schemaName": "test", + "platform": "urn:li:dataPlatform:tableau", + "version": 0, + "created": { + "time": 0, + "actor": "urn:li:corpuser:unknown" + }, + "lastModified": { + "time": 0, + "actor": "urn:li:corpuser:unknown" + }, + "hash": "", + "platformSchema": { + "com.linkedin.pegasus2avro.schema.OtherSchema": { + "rawSchema": "" + } + }, + "fields": [ + { + "fieldPath": "Program ID", + "nullable": false, + "description": "", + "type": { + "type": { + "com.linkedin.pegasus2avro.schema.StringType": {} + } + }, + "nativeDataType": "STRING", + "recursive": false, + "globalTags": { + "tags": [ + { + "tag": "urn:li:tag:DIMENSION" + }, + { + "tag": "urn:li:tag:COLUMNFIELD" + } + ] + }, + "isPartOfKey": false + }, + { + "fieldPath": "Name", + "nullable": false, + "description": "", + "type": { + "type": { + "com.linkedin.pegasus2avro.schema.StringType": {} + } + }, + "nativeDataType": "STRING", + "recursive": false, + "globalTags": { + "tags": [ + { + "tag": "urn:li:tag:DIMENSION" + }, + { + "tag": "urn:li:tag:COLUMNFIELD" + } + ] + }, + "isPartOfKey": false + } + ] + } + } + ] + } + }, + "systemMetadata": { + "lastObserved": 1638860400000, + "runId": "tableau-test", + "lastRunId": "no-run-id-provided" + } +}, +{ + "entityType": "dataset", + "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD)", + "changeType": "UPSERT", + "aspectName": "subTypes", + "aspect": { + "json": { + "typeNames": [ + "Embedded Data Source" + ] + } + }, + "systemMetadata": { + "lastObserved": 1638860400000, + "runId": "tableau-test", + "lastRunId": "no-run-id-provided" + } +}, +{ + "entityType": "dataset", + "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD)", + "changeType": "UPSERT", + "aspectName": "container", + "aspect": { + "json": { + "container": "urn:li:container:94e6e84b66f9ee8c70c22f06cfbad6a9" + } + }, + "systemMetadata": { + "lastObserved": 1638860400000, + "runId": "tableau-test", + "lastRunId": "no-run-id-provided" + } +}, +{ + "entityType": "dataset", + "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD)", + "changeType": "UPSERT", + "aspectName": "browsePathsV2", + "aspect": { + "json": { + "path": [ + { + "id": "urn:li:container:5ec314b9630974ec084f5dfd3849f87b", + "urn": "urn:li:container:5ec314b9630974ec084f5dfd3849f87b" + }, + { + "id": "urn:li:container:94e6e84b66f9ee8c70c22f06cfbad6a9", + "urn": "urn:li:container:94e6e84b66f9ee8c70c22f06cfbad6a9" + } + ] + } + }, + "systemMetadata": { + "lastObserved": 1638860400000, + "runId": "tableau-test", + "lastRunId": "no-run-id-provided" + } +}, { "entityType": "dataset", "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,00cce29f-b561-bb41-3557-8e19660bb5dd,PROD)", @@ -43142,6 +43370,22 @@ "lastRunId": "no-run-id-provided" } }, +{ + "entityType": "dataset", + "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD)", + "changeType": "UPSERT", + "aspectName": "status", + "aspect": { + "json": { + "removed": false + } + }, + "systemMetadata": { + "lastObserved": 1638860400000, + "runId": "tableau-test", + "lastRunId": "no-run-id-provided" + } +}, { "entityType": "dataset", "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,618c87db-5959-338b-bcc7-6f5f4cc0b6c6,PROD)", @@ -44718,6 +44962,31 @@ "lastRunId": "no-run-id-provided" } }, +{ + "entityType": "dataset", + "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD)", + "changeType": "UPSERT", + "aspectName": "browsePathsV2", + "aspect": { + "json": { + "path": [ + { + "id": "urn:li:container:5ec314b9630974ec084f5dfd3849f87b", + "urn": "urn:li:container:5ec314b9630974ec084f5dfd3849f87b" + }, + { + "id": "urn:li:container:94e6e84b66f9ee8c70c22f06cfbad6a9", + "urn": "urn:li:container:94e6e84b66f9ee8c70c22f06cfbad6a9" + } + ] + } + }, + "systemMetadata": { + "lastObserved": 1638860400000, + "runId": "tableau-test", + "lastRunId": "no-run-id-provided" + } +}, { "entityType": "dataset", "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,00cce29f-b561-bb41-3557-8e19660bb5dd,PROD)", diff --git a/metadata-ingestion/tests/integration/tableau/tableau_extract_all_project_mces_golden.json b/metadata-ingestion/tests/integration/tableau/tableau_extract_all_project_mces_golden.json index 63796970b27c1..250c43b7fc2da 100644 --- a/metadata-ingestion/tests/integration/tableau/tableau_extract_all_project_mces_golden.json +++ b/metadata-ingestion/tests/integration/tableau/tableau_extract_all_project_mces_golden.json @@ -31853,6 +31853,234 @@ "lastRunId": "no-run-id-provided" } }, +{ + "entityType": "dataset", + "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD)", + "changeType": "UPSERT", + "aspectName": "upstreamLineage", + "aspect": { + "json": { + "upstreams": [ + { + "auditStamp": { + "time": 0, + "actor": "urn:li:corpuser:unknown" + }, + "dataset": "urn:li:dataset:(urn:li:dataPlatform:tableau,c7dd65fb-6e7e-4091-bbde-8c78b34a40f8,PROD)", + "type": "TRANSFORMED" + } + ], + "fineGrainedLineages": [ + { + "upstreamType": "FIELD_SET", + "upstreams": [ + "urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:tableau,c7dd65fb-6e7e-4091-bbde-8c78b34a40f8,PROD),name)" + ], + "downstreamType": "FIELD", + "downstreams": [ + "urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD),Name)" + ], + "confidenceScore": 1.0 + }, + { + "upstreamType": "FIELD_SET", + "upstreams": [ + "urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:tableau,c7dd65fb-6e7e-4091-bbde-8c78b34a40f8,PROD),id)" + ], + "downstreamType": "FIELD", + "downstreams": [ + "urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD),Program ID)" + ], + "confidenceScore": 1.0 + } + ] + } + }, + "systemMetadata": { + "lastObserved": 1638860400000, + "runId": "tableau-test", + "lastRunId": "no-run-id-provided" + } +}, +{ + "proposedSnapshot": { + "com.linkedin.pegasus2avro.metadata.snapshot.DatasetSnapshot": { + "urn": "urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD)", + "aspects": [ + { + "com.linkedin.pegasus2avro.common.DataPlatformInstance": { + "platform": "urn:li:dataPlatform:tableau" + } + }, + { + "com.linkedin.pegasus2avro.common.BrowsePaths": { + "paths": [ + "/prod/tableau/default/Workbook published ds" + ] + } + }, + { + "com.linkedin.pegasus2avro.common.Ownership": { + "owners": [ + { + "owner": "urn:li:corpuser:jawadqu@gmail.com", + "type": "DATAOWNER" + } + ], + "lastModified": { + "time": 0, + "actor": "urn:li:corpuser:unknown" + } + } + }, + { + "com.linkedin.pegasus2avro.dataset.DatasetProperties": { + "customProperties": { + "hasExtracts": "True", + "extractLastRefreshTime": "2018-02-09T00:05:25Z", + "extractLastUpdateTime": "2018-02-09T00:05:25Z" + }, + "name": "New DataSource", + "tags": [] + } + }, + { + "com.linkedin.pegasus2avro.schema.SchemaMetadata": { + "schemaName": "test", + "platform": "urn:li:dataPlatform:tableau", + "version": 0, + "created": { + "time": 0, + "actor": "urn:li:corpuser:unknown" + }, + "lastModified": { + "time": 0, + "actor": "urn:li:corpuser:unknown" + }, + "hash": "", + "platformSchema": { + "com.linkedin.pegasus2avro.schema.OtherSchema": { + "rawSchema": "" + } + }, + "fields": [ + { + "fieldPath": "Program ID", + "nullable": false, + "description": "", + "type": { + "type": { + "com.linkedin.pegasus2avro.schema.StringType": {} + } + }, + "nativeDataType": "STRING", + "recursive": false, + "globalTags": { + "tags": [ + { + "tag": "urn:li:tag:DIMENSION" + }, + { + "tag": "urn:li:tag:COLUMNFIELD" + } + ] + }, + "isPartOfKey": false + }, + { + "fieldPath": "Name", + "nullable": false, + "description": "", + "type": { + "type": { + "com.linkedin.pegasus2avro.schema.StringType": {} + } + }, + "nativeDataType": "STRING", + "recursive": false, + "globalTags": { + "tags": [ + { + "tag": "urn:li:tag:DIMENSION" + }, + { + "tag": "urn:li:tag:COLUMNFIELD" + } + ] + }, + "isPartOfKey": false + } + ] + } + } + ] + } + }, + "systemMetadata": { + "lastObserved": 1638860400000, + "runId": "tableau-test", + "lastRunId": "no-run-id-provided" + } +}, +{ + "entityType": "dataset", + "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD)", + "changeType": "UPSERT", + "aspectName": "subTypes", + "aspect": { + "json": { + "typeNames": [ + "Embedded Data Source" + ] + } + }, + "systemMetadata": { + "lastObserved": 1638860400000, + "runId": "tableau-test", + "lastRunId": "no-run-id-provided" + } +}, +{ + "entityType": "dataset", + "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD)", + "changeType": "UPSERT", + "aspectName": "container", + "aspect": { + "json": { + "container": "urn:li:container:94e6e84b66f9ee8c70c22f06cfbad6a9" + } + }, + "systemMetadata": { + "lastObserved": 1638860400000, + "runId": "tableau-test", + "lastRunId": "no-run-id-provided" + } +}, +{ + "entityType": "dataset", + "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD)", + "changeType": "UPSERT", + "aspectName": "browsePathsV2", + "aspect": { + "json": { + "path": [ + { + "id": "urn:li:container:5ec314b9630974ec084f5dfd3849f87b", + "urn": "urn:li:container:5ec314b9630974ec084f5dfd3849f87b" + }, + { + "id": "urn:li:container:94e6e84b66f9ee8c70c22f06cfbad6a9", + "urn": "urn:li:container:94e6e84b66f9ee8c70c22f06cfbad6a9" + } + ] + } + }, + "systemMetadata": { + "lastObserved": 1638860400000, + "runId": "tableau-test", + "lastRunId": "no-run-id-provided" + } +}, { "entityType": "dataset", "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,00cce29f-b561-bb41-3557-8e19660bb5dd,PROD)", @@ -43302,6 +43530,22 @@ "lastRunId": "no-run-id-provided" } }, +{ + "entityType": "dataset", + "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD)", + "changeType": "UPSERT", + "aspectName": "status", + "aspect": { + "json": { + "removed": false + } + }, + "systemMetadata": { + "lastObserved": 1638860400000, + "runId": "tableau-test", + "lastRunId": "no-run-id-provided" + } +}, { "entityType": "dataset", "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,618c87db-5959-338b-bcc7-6f5f4cc0b6c6,PROD)", @@ -44924,6 +45168,31 @@ "lastRunId": "no-run-id-provided" } }, +{ + "entityType": "dataset", + "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD)", + "changeType": "UPSERT", + "aspectName": "browsePathsV2", + "aspect": { + "json": { + "path": [ + { + "id": "urn:li:container:5ec314b9630974ec084f5dfd3849f87b", + "urn": "urn:li:container:5ec314b9630974ec084f5dfd3849f87b" + }, + { + "id": "urn:li:container:94e6e84b66f9ee8c70c22f06cfbad6a9", + "urn": "urn:li:container:94e6e84b66f9ee8c70c22f06cfbad6a9" + } + ] + } + }, + "systemMetadata": { + "lastObserved": 1638860400000, + "runId": "tableau-test", + "lastRunId": "no-run-id-provided" + } +}, { "entityType": "dataset", "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,00cce29f-b561-bb41-3557-8e19660bb5dd,PROD)", diff --git a/metadata-ingestion/tests/integration/tableau/tableau_mces_golden.json b/metadata-ingestion/tests/integration/tableau/tableau_mces_golden.json index 5308f5daebea6..c5417a8d212bc 100644 --- a/metadata-ingestion/tests/integration/tableau/tableau_mces_golden.json +++ b/metadata-ingestion/tests/integration/tableau/tableau_mces_golden.json @@ -31608,6 +31608,234 @@ "lastRunId": "no-run-id-provided" } }, +{ + "entityType": "dataset", + "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD)", + "changeType": "UPSERT", + "aspectName": "upstreamLineage", + "aspect": { + "json": { + "upstreams": [ + { + "auditStamp": { + "time": 0, + "actor": "urn:li:corpuser:unknown" + }, + "dataset": "urn:li:dataset:(urn:li:dataPlatform:tableau,c7dd65fb-6e7e-4091-bbde-8c78b34a40f8,PROD)", + "type": "TRANSFORMED" + } + ], + "fineGrainedLineages": [ + { + "upstreamType": "FIELD_SET", + "upstreams": [ + "urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:tableau,c7dd65fb-6e7e-4091-bbde-8c78b34a40f8,PROD),name)" + ], + "downstreamType": "FIELD", + "downstreams": [ + "urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD),Name)" + ], + "confidenceScore": 1.0 + }, + { + "upstreamType": "FIELD_SET", + "upstreams": [ + "urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:tableau,c7dd65fb-6e7e-4091-bbde-8c78b34a40f8,PROD),id)" + ], + "downstreamType": "FIELD", + "downstreams": [ + "urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD),Program ID)" + ], + "confidenceScore": 1.0 + } + ] + } + }, + "systemMetadata": { + "lastObserved": 1638860400000, + "runId": "tableau-test", + "lastRunId": "no-run-id-provided" + } +}, +{ + "proposedSnapshot": { + "com.linkedin.pegasus2avro.metadata.snapshot.DatasetSnapshot": { + "urn": "urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD)", + "aspects": [ + { + "com.linkedin.pegasus2avro.common.DataPlatformInstance": { + "platform": "urn:li:dataPlatform:tableau" + } + }, + { + "com.linkedin.pegasus2avro.common.BrowsePaths": { + "paths": [ + "/prod/tableau/default/Workbook published ds" + ] + } + }, + { + "com.linkedin.pegasus2avro.common.Ownership": { + "owners": [ + { + "owner": "urn:li:corpuser:jawadqu@gmail.com", + "type": "DATAOWNER" + } + ], + "lastModified": { + "time": 0, + "actor": "urn:li:corpuser:unknown" + } + } + }, + { + "com.linkedin.pegasus2avro.dataset.DatasetProperties": { + "customProperties": { + "hasExtracts": "True", + "extractLastRefreshTime": "2018-02-09T00:05:25Z", + "extractLastUpdateTime": "2018-02-09T00:05:25Z" + }, + "name": "New DataSource", + "tags": [] + } + }, + { + "com.linkedin.pegasus2avro.schema.SchemaMetadata": { + "schemaName": "test", + "platform": "urn:li:dataPlatform:tableau", + "version": 0, + "created": { + "time": 0, + "actor": "urn:li:corpuser:unknown" + }, + "lastModified": { + "time": 0, + "actor": "urn:li:corpuser:unknown" + }, + "hash": "", + "platformSchema": { + "com.linkedin.pegasus2avro.schema.OtherSchema": { + "rawSchema": "" + } + }, + "fields": [ + { + "fieldPath": "Program ID", + "nullable": false, + "description": "", + "type": { + "type": { + "com.linkedin.pegasus2avro.schema.StringType": {} + } + }, + "nativeDataType": "STRING", + "recursive": false, + "globalTags": { + "tags": [ + { + "tag": "urn:li:tag:DIMENSION" + }, + { + "tag": "urn:li:tag:COLUMNFIELD" + } + ] + }, + "isPartOfKey": false + }, + { + "fieldPath": "Name", + "nullable": false, + "description": "", + "type": { + "type": { + "com.linkedin.pegasus2avro.schema.StringType": {} + } + }, + "nativeDataType": "STRING", + "recursive": false, + "globalTags": { + "tags": [ + { + "tag": "urn:li:tag:DIMENSION" + }, + { + "tag": "urn:li:tag:COLUMNFIELD" + } + ] + }, + "isPartOfKey": false + } + ] + } + } + ] + } + }, + "systemMetadata": { + "lastObserved": 1638860400000, + "runId": "tableau-test", + "lastRunId": "no-run-id-provided" + } +}, +{ + "entityType": "dataset", + "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD)", + "changeType": "UPSERT", + "aspectName": "subTypes", + "aspect": { + "json": { + "typeNames": [ + "Embedded Data Source" + ] + } + }, + "systemMetadata": { + "lastObserved": 1638860400000, + "runId": "tableau-test", + "lastRunId": "no-run-id-provided" + } +}, +{ + "entityType": "dataset", + "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD)", + "changeType": "UPSERT", + "aspectName": "container", + "aspect": { + "json": { + "container": "urn:li:container:94e6e84b66f9ee8c70c22f06cfbad6a9" + } + }, + "systemMetadata": { + "lastObserved": 1638860400000, + "runId": "tableau-test", + "lastRunId": "no-run-id-provided" + } +}, +{ + "entityType": "dataset", + "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD)", + "changeType": "UPSERT", + "aspectName": "browsePathsV2", + "aspect": { + "json": { + "path": [ + { + "id": "urn:li:container:5ec314b9630974ec084f5dfd3849f87b", + "urn": "urn:li:container:5ec314b9630974ec084f5dfd3849f87b" + }, + { + "id": "urn:li:container:94e6e84b66f9ee8c70c22f06cfbad6a9", + "urn": "urn:li:container:94e6e84b66f9ee8c70c22f06cfbad6a9" + } + ] + } + }, + "systemMetadata": { + "lastObserved": 1638860400000, + "runId": "tableau-test", + "lastRunId": "no-run-id-provided" + } +}, { "entityType": "dataset", "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,00cce29f-b561-bb41-3557-8e19660bb5dd,PROD)", @@ -43057,6 +43285,22 @@ "lastRunId": "no-run-id-provided" } }, +{ + "entityType": "dataset", + "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD)", + "changeType": "UPSERT", + "aspectName": "status", + "aspect": { + "json": { + "removed": false + } + }, + "systemMetadata": { + "lastObserved": 1638860400000, + "runId": "tableau-test", + "lastRunId": "no-run-id-provided" + } +}, { "entityType": "dataset", "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,618c87db-5959-338b-bcc7-6f5f4cc0b6c6,PROD)", @@ -44633,6 +44877,31 @@ "lastRunId": "no-run-id-provided" } }, +{ + "entityType": "dataset", + "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD)", + "changeType": "UPSERT", + "aspectName": "browsePathsV2", + "aspect": { + "json": { + "path": [ + { + "id": "urn:li:container:5ec314b9630974ec084f5dfd3849f87b", + "urn": "urn:li:container:5ec314b9630974ec084f5dfd3849f87b" + }, + { + "id": "urn:li:container:94e6e84b66f9ee8c70c22f06cfbad6a9", + "urn": "urn:li:container:94e6e84b66f9ee8c70c22f06cfbad6a9" + } + ] + } + }, + "systemMetadata": { + "lastObserved": 1638860400000, + "runId": "tableau-test", + "lastRunId": "no-run-id-provided" + } +}, { "entityType": "dataset", "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,00cce29f-b561-bb41-3557-8e19660bb5dd,PROD)", diff --git a/metadata-ingestion/tests/integration/tableau/tableau_mces_golden_deleted_stateful.json b/metadata-ingestion/tests/integration/tableau/tableau_mces_golden_deleted_stateful.json index b39f7a181f01b..8d7be1c4d0033 100644 --- a/metadata-ingestion/tests/integration/tableau/tableau_mces_golden_deleted_stateful.json +++ b/metadata-ingestion/tests/integration/tableau/tableau_mces_golden_deleted_stateful.json @@ -577,6 +577,22 @@ "lastRunId": "no-run-id-provided" } }, +{ + "entityType": "dataset", + "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD)", + "changeType": "UPSERT", + "aspectName": "status", + "aspect": { + "json": { + "removed": true + } + }, + "systemMetadata": { + "lastObserved": 1638860400000, + "runId": "tableau-test", + "lastRunId": "no-run-id-provided" + } +}, { "entityType": "dataset", "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:postgres,demo_postgres_instance.dvdrental.public.actor,PROD)", diff --git a/metadata-ingestion/tests/integration/tableau/tableau_nested_project_mces_golden.json b/metadata-ingestion/tests/integration/tableau/tableau_nested_project_mces_golden.json index 17a7ed91ff36e..5e46b91c207a7 100644 --- a/metadata-ingestion/tests/integration/tableau/tableau_nested_project_mces_golden.json +++ b/metadata-ingestion/tests/integration/tableau/tableau_nested_project_mces_golden.json @@ -31853,6 +31853,234 @@ "lastRunId": "no-run-id-provided" } }, +{ + "entityType": "dataset", + "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD)", + "changeType": "UPSERT", + "aspectName": "upstreamLineage", + "aspect": { + "json": { + "upstreams": [ + { + "auditStamp": { + "time": 0, + "actor": "urn:li:corpuser:unknown" + }, + "dataset": "urn:li:dataset:(urn:li:dataPlatform:tableau,c7dd65fb-6e7e-4091-bbde-8c78b34a40f8,PROD)", + "type": "TRANSFORMED" + } + ], + "fineGrainedLineages": [ + { + "upstreamType": "FIELD_SET", + "upstreams": [ + "urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:tableau,c7dd65fb-6e7e-4091-bbde-8c78b34a40f8,PROD),name)" + ], + "downstreamType": "FIELD", + "downstreams": [ + "urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD),Name)" + ], + "confidenceScore": 1.0 + }, + { + "upstreamType": "FIELD_SET", + "upstreams": [ + "urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:tableau,c7dd65fb-6e7e-4091-bbde-8c78b34a40f8,PROD),id)" + ], + "downstreamType": "FIELD", + "downstreams": [ + "urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD),Program ID)" + ], + "confidenceScore": 1.0 + } + ] + } + }, + "systemMetadata": { + "lastObserved": 1638860400000, + "runId": "tableau-test", + "lastRunId": "no-run-id-provided" + } +}, +{ + "proposedSnapshot": { + "com.linkedin.pegasus2avro.metadata.snapshot.DatasetSnapshot": { + "urn": "urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD)", + "aspects": [ + { + "com.linkedin.pegasus2avro.common.DataPlatformInstance": { + "platform": "urn:li:dataPlatform:tableau" + } + }, + { + "com.linkedin.pegasus2avro.common.BrowsePaths": { + "paths": [ + "/prod/tableau/default/Workbook published ds" + ] + } + }, + { + "com.linkedin.pegasus2avro.common.Ownership": { + "owners": [ + { + "owner": "urn:li:corpuser:jawadqu@gmail.com", + "type": "DATAOWNER" + } + ], + "lastModified": { + "time": 0, + "actor": "urn:li:corpuser:unknown" + } + } + }, + { + "com.linkedin.pegasus2avro.dataset.DatasetProperties": { + "customProperties": { + "hasExtracts": "True", + "extractLastRefreshTime": "2018-02-09T00:05:25Z", + "extractLastUpdateTime": "2018-02-09T00:05:25Z" + }, + "name": "New DataSource", + "tags": [] + } + }, + { + "com.linkedin.pegasus2avro.schema.SchemaMetadata": { + "schemaName": "test", + "platform": "urn:li:dataPlatform:tableau", + "version": 0, + "created": { + "time": 0, + "actor": "urn:li:corpuser:unknown" + }, + "lastModified": { + "time": 0, + "actor": "urn:li:corpuser:unknown" + }, + "hash": "", + "platformSchema": { + "com.linkedin.pegasus2avro.schema.OtherSchema": { + "rawSchema": "" + } + }, + "fields": [ + { + "fieldPath": "Program ID", + "nullable": false, + "description": "", + "type": { + "type": { + "com.linkedin.pegasus2avro.schema.StringType": {} + } + }, + "nativeDataType": "STRING", + "recursive": false, + "globalTags": { + "tags": [ + { + "tag": "urn:li:tag:DIMENSION" + }, + { + "tag": "urn:li:tag:COLUMNFIELD" + } + ] + }, + "isPartOfKey": false + }, + { + "fieldPath": "Name", + "nullable": false, + "description": "", + "type": { + "type": { + "com.linkedin.pegasus2avro.schema.StringType": {} + } + }, + "nativeDataType": "STRING", + "recursive": false, + "globalTags": { + "tags": [ + { + "tag": "urn:li:tag:DIMENSION" + }, + { + "tag": "urn:li:tag:COLUMNFIELD" + } + ] + }, + "isPartOfKey": false + } + ] + } + } + ] + } + }, + "systemMetadata": { + "lastObserved": 1638860400000, + "runId": "tableau-test", + "lastRunId": "no-run-id-provided" + } +}, +{ + "entityType": "dataset", + "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD)", + "changeType": "UPSERT", + "aspectName": "subTypes", + "aspect": { + "json": { + "typeNames": [ + "Embedded Data Source" + ] + } + }, + "systemMetadata": { + "lastObserved": 1638860400000, + "runId": "tableau-test", + "lastRunId": "no-run-id-provided" + } +}, +{ + "entityType": "dataset", + "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD)", + "changeType": "UPSERT", + "aspectName": "container", + "aspect": { + "json": { + "container": "urn:li:container:94e6e84b66f9ee8c70c22f06cfbad6a9" + } + }, + "systemMetadata": { + "lastObserved": 1638860400000, + "runId": "tableau-test", + "lastRunId": "no-run-id-provided" + } +}, +{ + "entityType": "dataset", + "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD)", + "changeType": "UPSERT", + "aspectName": "browsePathsV2", + "aspect": { + "json": { + "path": [ + { + "id": "urn:li:container:5ec314b9630974ec084f5dfd3849f87b", + "urn": "urn:li:container:5ec314b9630974ec084f5dfd3849f87b" + }, + { + "id": "urn:li:container:94e6e84b66f9ee8c70c22f06cfbad6a9", + "urn": "urn:li:container:94e6e84b66f9ee8c70c22f06cfbad6a9" + } + ] + } + }, + "systemMetadata": { + "lastObserved": 1638860400000, + "runId": "tableau-test", + "lastRunId": "no-run-id-provided" + } +}, { "entityType": "dataset", "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,00cce29f-b561-bb41-3557-8e19660bb5dd,PROD)", @@ -43272,6 +43500,22 @@ "lastRunId": "no-run-id-provided" } }, +{ + "entityType": "dataset", + "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD)", + "changeType": "UPSERT", + "aspectName": "status", + "aspect": { + "json": { + "removed": false + } + }, + "systemMetadata": { + "lastObserved": 1638860400000, + "runId": "tableau-test", + "lastRunId": "no-run-id-provided" + } +}, { "entityType": "dataset", "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,618c87db-5959-338b-bcc7-6f5f4cc0b6c6,PROD)", @@ -44894,6 +45138,31 @@ "lastRunId": "no-run-id-provided" } }, +{ + "entityType": "dataset", + "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD)", + "changeType": "UPSERT", + "aspectName": "browsePathsV2", + "aspect": { + "json": { + "path": [ + { + "id": "urn:li:container:5ec314b9630974ec084f5dfd3849f87b", + "urn": "urn:li:container:5ec314b9630974ec084f5dfd3849f87b" + }, + { + "id": "urn:li:container:94e6e84b66f9ee8c70c22f06cfbad6a9", + "urn": "urn:li:container:94e6e84b66f9ee8c70c22f06cfbad6a9" + } + ] + } + }, + "systemMetadata": { + "lastObserved": 1638860400000, + "runId": "tableau-test", + "lastRunId": "no-run-id-provided" + } +}, { "entityType": "dataset", "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,00cce29f-b561-bb41-3557-8e19660bb5dd,PROD)", diff --git a/metadata-ingestion/tests/integration/tableau/tableau_signout_timeout_mces_golden.json b/metadata-ingestion/tests/integration/tableau/tableau_signout_timeout_mces_golden.json index 5308f5daebea6..c5417a8d212bc 100644 --- a/metadata-ingestion/tests/integration/tableau/tableau_signout_timeout_mces_golden.json +++ b/metadata-ingestion/tests/integration/tableau/tableau_signout_timeout_mces_golden.json @@ -31608,6 +31608,234 @@ "lastRunId": "no-run-id-provided" } }, +{ + "entityType": "dataset", + "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD)", + "changeType": "UPSERT", + "aspectName": "upstreamLineage", + "aspect": { + "json": { + "upstreams": [ + { + "auditStamp": { + "time": 0, + "actor": "urn:li:corpuser:unknown" + }, + "dataset": "urn:li:dataset:(urn:li:dataPlatform:tableau,c7dd65fb-6e7e-4091-bbde-8c78b34a40f8,PROD)", + "type": "TRANSFORMED" + } + ], + "fineGrainedLineages": [ + { + "upstreamType": "FIELD_SET", + "upstreams": [ + "urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:tableau,c7dd65fb-6e7e-4091-bbde-8c78b34a40f8,PROD),name)" + ], + "downstreamType": "FIELD", + "downstreams": [ + "urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD),Name)" + ], + "confidenceScore": 1.0 + }, + { + "upstreamType": "FIELD_SET", + "upstreams": [ + "urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:tableau,c7dd65fb-6e7e-4091-bbde-8c78b34a40f8,PROD),id)" + ], + "downstreamType": "FIELD", + "downstreams": [ + "urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD),Program ID)" + ], + "confidenceScore": 1.0 + } + ] + } + }, + "systemMetadata": { + "lastObserved": 1638860400000, + "runId": "tableau-test", + "lastRunId": "no-run-id-provided" + } +}, +{ + "proposedSnapshot": { + "com.linkedin.pegasus2avro.metadata.snapshot.DatasetSnapshot": { + "urn": "urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD)", + "aspects": [ + { + "com.linkedin.pegasus2avro.common.DataPlatformInstance": { + "platform": "urn:li:dataPlatform:tableau" + } + }, + { + "com.linkedin.pegasus2avro.common.BrowsePaths": { + "paths": [ + "/prod/tableau/default/Workbook published ds" + ] + } + }, + { + "com.linkedin.pegasus2avro.common.Ownership": { + "owners": [ + { + "owner": "urn:li:corpuser:jawadqu@gmail.com", + "type": "DATAOWNER" + } + ], + "lastModified": { + "time": 0, + "actor": "urn:li:corpuser:unknown" + } + } + }, + { + "com.linkedin.pegasus2avro.dataset.DatasetProperties": { + "customProperties": { + "hasExtracts": "True", + "extractLastRefreshTime": "2018-02-09T00:05:25Z", + "extractLastUpdateTime": "2018-02-09T00:05:25Z" + }, + "name": "New DataSource", + "tags": [] + } + }, + { + "com.linkedin.pegasus2avro.schema.SchemaMetadata": { + "schemaName": "test", + "platform": "urn:li:dataPlatform:tableau", + "version": 0, + "created": { + "time": 0, + "actor": "urn:li:corpuser:unknown" + }, + "lastModified": { + "time": 0, + "actor": "urn:li:corpuser:unknown" + }, + "hash": "", + "platformSchema": { + "com.linkedin.pegasus2avro.schema.OtherSchema": { + "rawSchema": "" + } + }, + "fields": [ + { + "fieldPath": "Program ID", + "nullable": false, + "description": "", + "type": { + "type": { + "com.linkedin.pegasus2avro.schema.StringType": {} + } + }, + "nativeDataType": "STRING", + "recursive": false, + "globalTags": { + "tags": [ + { + "tag": "urn:li:tag:DIMENSION" + }, + { + "tag": "urn:li:tag:COLUMNFIELD" + } + ] + }, + "isPartOfKey": false + }, + { + "fieldPath": "Name", + "nullable": false, + "description": "", + "type": { + "type": { + "com.linkedin.pegasus2avro.schema.StringType": {} + } + }, + "nativeDataType": "STRING", + "recursive": false, + "globalTags": { + "tags": [ + { + "tag": "urn:li:tag:DIMENSION" + }, + { + "tag": "urn:li:tag:COLUMNFIELD" + } + ] + }, + "isPartOfKey": false + } + ] + } + } + ] + } + }, + "systemMetadata": { + "lastObserved": 1638860400000, + "runId": "tableau-test", + "lastRunId": "no-run-id-provided" + } +}, +{ + "entityType": "dataset", + "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD)", + "changeType": "UPSERT", + "aspectName": "subTypes", + "aspect": { + "json": { + "typeNames": [ + "Embedded Data Source" + ] + } + }, + "systemMetadata": { + "lastObserved": 1638860400000, + "runId": "tableau-test", + "lastRunId": "no-run-id-provided" + } +}, +{ + "entityType": "dataset", + "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD)", + "changeType": "UPSERT", + "aspectName": "container", + "aspect": { + "json": { + "container": "urn:li:container:94e6e84b66f9ee8c70c22f06cfbad6a9" + } + }, + "systemMetadata": { + "lastObserved": 1638860400000, + "runId": "tableau-test", + "lastRunId": "no-run-id-provided" + } +}, +{ + "entityType": "dataset", + "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD)", + "changeType": "UPSERT", + "aspectName": "browsePathsV2", + "aspect": { + "json": { + "path": [ + { + "id": "urn:li:container:5ec314b9630974ec084f5dfd3849f87b", + "urn": "urn:li:container:5ec314b9630974ec084f5dfd3849f87b" + }, + { + "id": "urn:li:container:94e6e84b66f9ee8c70c22f06cfbad6a9", + "urn": "urn:li:container:94e6e84b66f9ee8c70c22f06cfbad6a9" + } + ] + } + }, + "systemMetadata": { + "lastObserved": 1638860400000, + "runId": "tableau-test", + "lastRunId": "no-run-id-provided" + } +}, { "entityType": "dataset", "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,00cce29f-b561-bb41-3557-8e19660bb5dd,PROD)", @@ -43057,6 +43285,22 @@ "lastRunId": "no-run-id-provided" } }, +{ + "entityType": "dataset", + "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD)", + "changeType": "UPSERT", + "aspectName": "status", + "aspect": { + "json": { + "removed": false + } + }, + "systemMetadata": { + "lastObserved": 1638860400000, + "runId": "tableau-test", + "lastRunId": "no-run-id-provided" + } +}, { "entityType": "dataset", "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,618c87db-5959-338b-bcc7-6f5f4cc0b6c6,PROD)", @@ -44633,6 +44877,31 @@ "lastRunId": "no-run-id-provided" } }, +{ + "entityType": "dataset", + "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD)", + "changeType": "UPSERT", + "aspectName": "browsePathsV2", + "aspect": { + "json": { + "path": [ + { + "id": "urn:li:container:5ec314b9630974ec084f5dfd3849f87b", + "urn": "urn:li:container:5ec314b9630974ec084f5dfd3849f87b" + }, + { + "id": "urn:li:container:94e6e84b66f9ee8c70c22f06cfbad6a9", + "urn": "urn:li:container:94e6e84b66f9ee8c70c22f06cfbad6a9" + } + ] + } + }, + "systemMetadata": { + "lastObserved": 1638860400000, + "runId": "tableau-test", + "lastRunId": "no-run-id-provided" + } +}, { "entityType": "dataset", "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,00cce29f-b561-bb41-3557-8e19660bb5dd,PROD)", diff --git a/metadata-ingestion/tests/integration/tableau/tableau_with_platform_instance_mces_golden.json b/metadata-ingestion/tests/integration/tableau/tableau_with_platform_instance_mces_golden.json index cd957fe388926..5dc8fd9522da4 100644 --- a/metadata-ingestion/tests/integration/tableau/tableau_with_platform_instance_mces_golden.json +++ b/metadata-ingestion/tests/integration/tableau/tableau_with_platform_instance_mces_golden.json @@ -12801,7 +12801,7 @@ "time": 0, "actor": "urn:li:corpuser:unknown" }, - "dataset": "urn:li:dataset:(urn:li:dataPlatform:tableau,acryl_site1.10c6297d-0dbd-44f1-b1ba-458bea446513,PROD)", + "dataset": "urn:li:dataset:(urn:li:dataPlatform:tableau,acryl_site1.22b0b4c3-6b85-713d-a161-5a87fdd78f40,PROD)", "type": "TRANSFORMED" }, { @@ -12809,7 +12809,7 @@ "time": 0, "actor": "urn:li:corpuser:unknown" }, - "dataset": "urn:li:dataset:(urn:li:dataPlatform:tableau,acryl_site1.22b0b4c3-6b85-713d-a161-5a87fdd78f40,PROD)", + "dataset": "urn:li:dataset:(urn:li:dataPlatform:tableau,acryl_site1.10c6297d-0dbd-44f1-b1ba-458bea446513,PROD)", "type": "TRANSFORMED" } ], @@ -31740,6 +31740,239 @@ "lastRunId": "no-run-id-provided" } }, +{ + "entityType": "dataset", + "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,acryl_site1.5449c627-7462-4ef7-b492-bda46be068e3,PROD)", + "changeType": "UPSERT", + "aspectName": "upstreamLineage", + "aspect": { + "json": { + "upstreams": [ + { + "auditStamp": { + "time": 0, + "actor": "urn:li:corpuser:unknown" + }, + "dataset": "urn:li:dataset:(urn:li:dataPlatform:tableau,acryl_site1.c7dd65fb-6e7e-4091-bbde-8c78b34a40f8,PROD)", + "type": "TRANSFORMED" + } + ], + "fineGrainedLineages": [ + { + "upstreamType": "FIELD_SET", + "upstreams": [ + "urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:tableau,acryl_site1.c7dd65fb-6e7e-4091-bbde-8c78b34a40f8,PROD),name)" + ], + "downstreamType": "FIELD", + "downstreams": [ + "urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:tableau,acryl_site1.5449c627-7462-4ef7-b492-bda46be068e3,PROD),Name)" + ], + "confidenceScore": 1.0 + }, + { + "upstreamType": "FIELD_SET", + "upstreams": [ + "urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:tableau,acryl_site1.c7dd65fb-6e7e-4091-bbde-8c78b34a40f8,PROD),id)" + ], + "downstreamType": "FIELD", + "downstreams": [ + "urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:tableau,acryl_site1.5449c627-7462-4ef7-b492-bda46be068e3,PROD),Program ID)" + ], + "confidenceScore": 1.0 + } + ] + } + }, + "systemMetadata": { + "lastObserved": 1638860400000, + "runId": "tableau-test", + "lastRunId": "no-run-id-provided" + } +}, +{ + "proposedSnapshot": { + "com.linkedin.pegasus2avro.metadata.snapshot.DatasetSnapshot": { + "urn": "urn:li:dataset:(urn:li:dataPlatform:tableau,acryl_site1.5449c627-7462-4ef7-b492-bda46be068e3,PROD)", + "aspects": [ + { + "com.linkedin.pegasus2avro.common.DataPlatformInstance": { + "platform": "urn:li:dataPlatform:tableau", + "instance": "urn:li:dataPlatformInstance:(urn:li:dataPlatform:tableau,acryl_site1)" + } + }, + { + "com.linkedin.pegasus2avro.common.BrowsePaths": { + "paths": [ + "/prod/tableau/acryl_site1/default/Workbook published ds" + ] + } + }, + { + "com.linkedin.pegasus2avro.common.Ownership": { + "owners": [ + { + "owner": "urn:li:corpuser:jawadqu@gmail.com", + "type": "DATAOWNER" + } + ], + "lastModified": { + "time": 0, + "actor": "urn:li:corpuser:unknown" + } + } + }, + { + "com.linkedin.pegasus2avro.dataset.DatasetProperties": { + "customProperties": { + "hasExtracts": "True", + "extractLastRefreshTime": "2018-02-09T00:05:25Z", + "extractLastUpdateTime": "2018-02-09T00:05:25Z" + }, + "name": "New DataSource", + "tags": [] + } + }, + { + "com.linkedin.pegasus2avro.schema.SchemaMetadata": { + "schemaName": "test", + "platform": "urn:li:dataPlatform:tableau", + "version": 0, + "created": { + "time": 0, + "actor": "urn:li:corpuser:unknown" + }, + "lastModified": { + "time": 0, + "actor": "urn:li:corpuser:unknown" + }, + "hash": "", + "platformSchema": { + "com.linkedin.pegasus2avro.schema.OtherSchema": { + "rawSchema": "" + } + }, + "fields": [ + { + "fieldPath": "Program ID", + "nullable": false, + "description": "", + "type": { + "type": { + "com.linkedin.pegasus2avro.schema.StringType": {} + } + }, + "nativeDataType": "STRING", + "recursive": false, + "globalTags": { + "tags": [ + { + "tag": "urn:li:tag:DIMENSION" + }, + { + "tag": "urn:li:tag:COLUMNFIELD" + } + ] + }, + "isPartOfKey": false + }, + { + "fieldPath": "Name", + "nullable": false, + "description": "", + "type": { + "type": { + "com.linkedin.pegasus2avro.schema.StringType": {} + } + }, + "nativeDataType": "STRING", + "recursive": false, + "globalTags": { + "tags": [ + { + "tag": "urn:li:tag:DIMENSION" + }, + { + "tag": "urn:li:tag:COLUMNFIELD" + } + ] + }, + "isPartOfKey": false + } + ] + } + } + ] + } + }, + "systemMetadata": { + "lastObserved": 1638860400000, + "runId": "tableau-test", + "lastRunId": "no-run-id-provided" + } +}, +{ + "entityType": "dataset", + "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,acryl_site1.5449c627-7462-4ef7-b492-bda46be068e3,PROD)", + "changeType": "UPSERT", + "aspectName": "subTypes", + "aspect": { + "json": { + "typeNames": [ + "Embedded Data Source" + ] + } + }, + "systemMetadata": { + "lastObserved": 1638860400000, + "runId": "tableau-test", + "lastRunId": "no-run-id-provided" + } +}, +{ + "entityType": "dataset", + "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,acryl_site1.5449c627-7462-4ef7-b492-bda46be068e3,PROD)", + "changeType": "UPSERT", + "aspectName": "container", + "aspect": { + "json": { + "container": "urn:li:container:ba8a5ac7eb4c6e5edc9b03bf8891be55" + } + }, + "systemMetadata": { + "lastObserved": 1638860400000, + "runId": "tableau-test", + "lastRunId": "no-run-id-provided" + } +}, +{ + "entityType": "dataset", + "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,acryl_site1.5449c627-7462-4ef7-b492-bda46be068e3,PROD)", + "changeType": "UPSERT", + "aspectName": "browsePathsV2", + "aspect": { + "json": { + "path": [ + { + "id": "urn:li:dataPlatformInstance:(urn:li:dataPlatform:tableau,acryl_site1)", + "urn": "urn:li:dataPlatformInstance:(urn:li:dataPlatform:tableau,acryl_site1)" + }, + { + "id": "urn:li:container:66fa1e14620418276c85f3b552c7ec65", + "urn": "urn:li:container:66fa1e14620418276c85f3b552c7ec65" + }, + { + "id": "urn:li:container:ba8a5ac7eb4c6e5edc9b03bf8891be55", + "urn": "urn:li:container:ba8a5ac7eb4c6e5edc9b03bf8891be55" + } + ] + } + }, + "systemMetadata": { + "lastObserved": 1638860400000, + "runId": "tableau-test", + "lastRunId": "no-run-id-provided" + } +}, { "entityType": "dataset", "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,acryl_site1.00cce29f-b561-bb41-3557-8e19660bb5dd,PROD)", @@ -43350,6 +43583,22 @@ "lastRunId": "no-run-id-provided" } }, +{ + "entityType": "dataset", + "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,acryl_site1.5449c627-7462-4ef7-b492-bda46be068e3,PROD)", + "changeType": "UPSERT", + "aspectName": "status", + "aspect": { + "json": { + "removed": false + } + }, + "systemMetadata": { + "lastObserved": 1638860400000, + "runId": "tableau-test", + "lastRunId": "no-run-id-provided" + } +}, { "entityType": "dataset", "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,acryl_site1.618c87db-5959-338b-bcc7-6f5f4cc0b6c6,PROD)", @@ -45080,6 +45329,35 @@ "lastRunId": "no-run-id-provided" } }, +{ + "entityType": "dataset", + "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,acryl_site1.5449c627-7462-4ef7-b492-bda46be068e3,PROD)", + "changeType": "UPSERT", + "aspectName": "browsePathsV2", + "aspect": { + "json": { + "path": [ + { + "id": "urn:li:dataPlatformInstance:(urn:li:dataPlatform:tableau,acryl_site1)", + "urn": "urn:li:dataPlatformInstance:(urn:li:dataPlatform:tableau,acryl_site1)" + }, + { + "id": "urn:li:container:66fa1e14620418276c85f3b552c7ec65", + "urn": "urn:li:container:66fa1e14620418276c85f3b552c7ec65" + }, + { + "id": "urn:li:container:ba8a5ac7eb4c6e5edc9b03bf8891be55", + "urn": "urn:li:container:ba8a5ac7eb4c6e5edc9b03bf8891be55" + } + ] + } + }, + "systemMetadata": { + "lastObserved": 1638860400000, + "runId": "tableau-test", + "lastRunId": "no-run-id-provided" + } +}, { "entityType": "dataset", "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:tableau,acryl_site1.00cce29f-b561-bb41-3557-8e19660bb5dd,PROD)", diff --git a/metadata-ingestion/tests/integration/tableau/test_tableau_ingest.py b/metadata-ingestion/tests/integration/tableau/test_tableau_ingest.py index 2b122897a333f..36e7af700589c 100644 --- a/metadata-ingestion/tests/integration/tableau/test_tableau_ingest.py +++ b/metadata-ingestion/tests/integration/tableau/test_tableau_ingest.py @@ -675,7 +675,7 @@ def test_tableau_stateful(pytestconfig, tmp_path, mock_time, mock_datahub_graph) state1.get_urns_not_in(type="dataset", other_checkpoint_state=state2) ) - assert len(difference_dataset_urns) == 34 + assert len(difference_dataset_urns) == 35 deleted_dataset_urns = [ "urn:li:dataset:(urn:li:dataPlatform:tableau,dfe2c02a-54b7-f7a2-39fc-c651da2f6ad8,PROD)", "urn:li:dataset:(urn:li:dataPlatform:tableau,d00f4ba6-707e-4684-20af-69eb47587cc2,PROD)", @@ -711,6 +711,7 @@ def test_tableau_stateful(pytestconfig, tmp_path, mock_time, mock_datahub_graph) "urn:li:dataset:(urn:li:dataPlatform:external,sample - superstore%2C %28new%29.xls.people,PROD)", "urn:li:dataset:(urn:li:dataPlatform:webdata-direct:servicenowitsm-servicenowitsm,ven01911.sc_cat_item,PROD)", "urn:li:dataset:(urn:li:dataPlatform:tableau,10c6297d-0dbd-44f1-b1ba-458bea446513,PROD)", + "urn:li:dataset:(urn:li:dataPlatform:tableau,5449c627-7462-4ef7-b492-bda46be068e3,PROD)", ] assert sorted(deleted_dataset_urns) == sorted(difference_dataset_urns) From 232b98968c254cfc37ddb6802242396a932c258b Mon Sep 17 00:00:00 2001 From: Guy Rapaport <167340492+guyr-ziprecruiter@users.noreply.github.com> Date: Thu, 9 May 2024 00:53:27 +0300 Subject: [PATCH 3/6] docs(ingest): fix typos and clarify ingestion recipe docs (#10405) --- metadata-ingestion/cli-ingestion.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/metadata-ingestion/cli-ingestion.md b/metadata-ingestion/cli-ingestion.md index 48cc4ef09db91..b15dd2a501995 100644 --- a/metadata-ingestion/cli-ingestion.md +++ b/metadata-ingestion/cli-ingestion.md @@ -25,10 +25,10 @@ Check out the [alternative installation options](../docs/cli.md#alternate-instal ## Configuring a Recipe -Create a recipe.yml file that defines the source and sink for metadata, as shown below. +Create a `recipe.yml` file that defines the source and sink for metadata, as shown below. ```yaml -# my_reipe.yml +# recipe.yml source: type: config: @@ -48,7 +48,7 @@ For more information and examples on configuring recipes, please refer to [Recip You can run ingestion using `datahub ingest` like below. ```shell -datahub ingest -c +datahub ingest -c ``` ## Reference From 21e3f5416cf56e59a430ba73d907fbfa91a953c9 Mon Sep 17 00:00:00 2001 From: david-leifker <114954101+david-leifker@users.noreply.github.com> Date: Wed, 8 May 2024 20:39:31 -0500 Subject: [PATCH 4/6] fix(patch): update json patch library (#10449) --- build.gradle | 3 +- entity-registry/build.gradle | 6 +- .../metadata/aspect/batch/PatchMCP.java | 4 +- .../aspect/patch/GenericJsonPatch.java | 35 ++- .../patch/template/AspectTemplateEngine.java | 8 +- .../patch/template/CompoundKeyTemplate.java | 18 +- .../aspect/patch/template/Template.java | 23 +- .../aspect/patch/template/TemplateUtil.java | 33 ++- .../template/common/GenericPatchTemplate.java | 3 +- .../patch/template/ChartInfoTemplateTest.java | 32 +-- .../template/DashboardInfoTemplateTest.java | 35 +-- .../template/UpstreamLineageTemplateTest.java | 258 ++++++++++-------- .../large_upstream_lineage_aspect.json.gz | Bin 0 -> 296525 bytes .../patch/large_upstream_lineage_mcp.json.gz | Bin 0 -> 32673 bytes .../java/datahub-client/build.gradle | 3 +- metadata-io/build.gradle | 3 +- .../entity/ebean/batch/ChangeItemImpl.java | 3 +- .../entity/ebean/batch/PatchItemImpl.java | 21 +- .../v2/controller/EntityController.java | 3 +- metadata-service/services/build.gradle | 2 +- 20 files changed, 279 insertions(+), 214 deletions(-) create mode 100644 entity-registry/src/test/resources/patch/large_upstream_lineage_aspect.json.gz create mode 100644 entity-registry/src/test/resources/patch/large_upstream_lineage_mcp.json.gz diff --git a/build.gradle b/build.gradle index f4fb7b42d8560..58e7a2ba3a8d6 100644 --- a/build.gradle +++ b/build.gradle @@ -168,7 +168,8 @@ project.ext.externalDependency = [ 'jettison': 'org.codehaus.jettison:jettison:1.5.4', 'jgrapht': 'org.jgrapht:jgrapht-core:1.5.1', 'jna': 'net.java.dev.jna:jna:5.12.1', - 'jsonPatch': 'com.github.java-json-tools:json-patch:1.13', + 'jsonPatch': 'jakarta.json:jakarta.json-api:2.1.3', + 'jsonPathImpl': 'org.eclipse.parsson:parsson:1.1.6', 'jsonSimple': 'com.googlecode.json-simple:json-simple:1.1.1', 'jsonSmart': 'net.minidev:json-smart:2.4.9', 'json': 'org.json:json:20231013', diff --git a/entity-registry/build.gradle b/entity-registry/build.gradle index 1f27faf4811dc..e9c9537483474 100644 --- a/entity-registry/build.gradle +++ b/entity-registry/build.gradle @@ -15,7 +15,10 @@ dependencies { implementation externalDependency.jacksonDataBind implementation externalDependency.jacksonDataFormatYaml implementation externalDependency.reflections - api externalDependency.jsonPatch + + implementation externalDependency.jsonPatch + implementation externalDependency.jsonPathImpl + constraints { implementation(externalDependency.snakeYaml) { because("previous versions are vulnerable to CVE-2022-25857") @@ -28,6 +31,7 @@ dependencies { testImplementation project(':test-models') testImplementation project(path: ':test-models', configuration: 'testDataTemplate') + testImplementation project(':metadata-utils') testImplementation externalDependency.testng testImplementation externalDependency.mockito testImplementation externalDependency.mockitoInline diff --git a/entity-registry/src/main/java/com/linkedin/metadata/aspect/batch/PatchMCP.java b/entity-registry/src/main/java/com/linkedin/metadata/aspect/batch/PatchMCP.java index f04133e9e1ff8..293ef90a25f81 100644 --- a/entity-registry/src/main/java/com/linkedin/metadata/aspect/batch/PatchMCP.java +++ b/entity-registry/src/main/java/com/linkedin/metadata/aspect/batch/PatchMCP.java @@ -1,8 +1,8 @@ package com.linkedin.metadata.aspect.batch; -import com.github.fge.jsonpatch.Patch; import com.linkedin.data.template.RecordTemplate; import com.linkedin.metadata.aspect.AspectRetriever; +import jakarta.json.JsonPatch; /** * A change proposal represented as a patch to an exiting stored object in the primary data store. @@ -17,5 +17,5 @@ public interface PatchMCP extends MCPItem { */ ChangeMCP applyPatch(RecordTemplate recordTemplate, AspectRetriever aspectRetriever); - Patch getPatch(); + JsonPatch getPatch(); } diff --git a/entity-registry/src/main/java/com/linkedin/metadata/aspect/patch/GenericJsonPatch.java b/entity-registry/src/main/java/com/linkedin/metadata/aspect/patch/GenericJsonPatch.java index 484603b9c1f85..09392330c81a5 100644 --- a/entity-registry/src/main/java/com/linkedin/metadata/aspect/patch/GenericJsonPatch.java +++ b/entity-registry/src/main/java/com/linkedin/metadata/aspect/patch/GenericJsonPatch.java @@ -1,12 +1,15 @@ package com.linkedin.metadata.aspect.patch; import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.databind.JsonNode; -import com.github.fge.jsonpatch.JsonPatch; -import java.io.IOException; +import com.linkedin.util.Pair; +import jakarta.json.Json; +import jakarta.json.JsonArrayBuilder; +import jakarta.json.JsonPatch; import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; import javax.annotation.Nonnull; import javax.annotation.Nullable; import lombok.AllArgsConstructor; @@ -21,7 +24,7 @@ public class GenericJsonPatch { @Nullable private Map> arrayPrimaryKeys; - @Nonnull private JsonNode patch; + @Nonnull private List patch; @Nonnull public Map> getArrayPrimaryKeys() { @@ -29,7 +32,27 @@ public Map> getArrayPrimaryKeys() { } @JsonIgnore - public JsonPatch getJsonPatch() throws IOException { - return JsonPatch.fromJson(patch); + public JsonPatch getJsonPatch() { + JsonArrayBuilder arrayBuilder = Json.createArrayBuilder(); + patch.forEach(op -> arrayBuilder.add(Json.createObjectBuilder(op.toMap()))); + return Json.createPatch(arrayBuilder.build()); + } + + @Data + @NoArgsConstructor + public static class PatchOp { + @Nonnull private String op; + @Nonnull private String path; + @Nullable private Object value; + + public Map toMap() { + if (value != null) { + return Stream.of(Pair.of("op", op), Pair.of("path", path), Pair.of("value", value)) + .collect(Collectors.toMap(Pair::getKey, Pair::getValue)); + } else { + return Stream.of(Pair.of("op", op), Pair.of("path", path)) + .collect(Collectors.toMap(Pair::getKey, Pair::getValue)); + } + } } } diff --git a/entity-registry/src/main/java/com/linkedin/metadata/aspect/patch/template/AspectTemplateEngine.java b/entity-registry/src/main/java/com/linkedin/metadata/aspect/patch/template/AspectTemplateEngine.java index 4613396109cc1..0818241df8155 100644 --- a/entity-registry/src/main/java/com/linkedin/metadata/aspect/patch/template/AspectTemplateEngine.java +++ b/entity-registry/src/main/java/com/linkedin/metadata/aspect/patch/template/AspectTemplateEngine.java @@ -15,10 +15,9 @@ import static com.linkedin.metadata.Constants.UPSTREAM_LINEAGE_ASPECT_NAME; import com.fasterxml.jackson.core.JsonProcessingException; -import com.github.fge.jsonpatch.JsonPatchException; -import com.github.fge.jsonpatch.Patch; import com.linkedin.data.template.RecordTemplate; import com.linkedin.metadata.models.AspectSpec; +import jakarta.json.JsonPatch; import java.util.HashMap; import java.util.Map; import java.util.Set; @@ -75,12 +74,11 @@ public RecordTemplate getDefaultTemplate(String aspectSpecName) { * @param aspectSpec aspectSpec of the template * @return a {@link RecordTemplate} with the patch applied * @throws JsonProcessingException if there is an issue with processing the record template's json - * @throws JsonPatchException if there is an issue with applying the json patch */ @Nonnull public RecordTemplate applyPatch( - RecordTemplate recordTemplate, Patch jsonPatch, AspectSpec aspectSpec) - throws JsonProcessingException, JsonPatchException { + RecordTemplate recordTemplate, JsonPatch jsonPatch, AspectSpec aspectSpec) + throws JsonProcessingException { Template template = getTemplate(aspectSpec); return template.applyPatch(recordTemplate, jsonPatch); } diff --git a/entity-registry/src/main/java/com/linkedin/metadata/aspect/patch/template/CompoundKeyTemplate.java b/entity-registry/src/main/java/com/linkedin/metadata/aspect/patch/template/CompoundKeyTemplate.java index 78cf14c47a0bf..2b6c8f9409d26 100644 --- a/entity-registry/src/main/java/com/linkedin/metadata/aspect/patch/template/CompoundKeyTemplate.java +++ b/entity-registry/src/main/java/com/linkedin/metadata/aspect/patch/template/CompoundKeyTemplate.java @@ -1,23 +1,29 @@ package com.linkedin.metadata.aspect.patch.template; +import static com.linkedin.metadata.aspect.patch.template.TemplateUtil.OBJECT_MAPPER; import static com.linkedin.metadata.aspect.patch.template.TemplateUtil.populateTopLevelKeys; import com.datahub.util.RecordUtils; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; -import com.github.fge.jsonpatch.JsonPatchException; -import com.github.fge.jsonpatch.Patch; import com.linkedin.data.template.RecordTemplate; +import jakarta.json.Json; +import jakarta.json.JsonObject; +import jakarta.json.JsonPatch; +import java.io.StringReader; public abstract class CompoundKeyTemplate implements ArrayMergingTemplate { @Override - public T applyPatch(RecordTemplate recordTemplate, Patch jsonPatch) - throws JsonProcessingException, JsonPatchException { + public T applyPatch(RecordTemplate recordTemplate, JsonPatch jsonPatch) + throws JsonProcessingException { JsonNode transformed = populateTopLevelKeys(preprocessTemplate(recordTemplate), jsonPatch); - JsonNode patched = jsonPatch.apply(transformed); - JsonNode postProcessed = rebaseFields(patched); + JsonObject patched = + jsonPatch.apply( + Json.createReader(new StringReader(OBJECT_MAPPER.writeValueAsString(transformed))) + .readObject()); + JsonNode postProcessed = rebaseFields(OBJECT_MAPPER.readTree(patched.toString())); return RecordUtils.toRecordTemplate(getTemplateType(), postProcessed.toString()); } } diff --git a/entity-registry/src/main/java/com/linkedin/metadata/aspect/patch/template/Template.java b/entity-registry/src/main/java/com/linkedin/metadata/aspect/patch/template/Template.java index bd8cd544fb59b..06acb4cb31896 100644 --- a/entity-registry/src/main/java/com/linkedin/metadata/aspect/patch/template/Template.java +++ b/entity-registry/src/main/java/com/linkedin/metadata/aspect/patch/template/Template.java @@ -6,9 +6,11 @@ import com.datahub.util.RecordUtils; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; -import com.github.fge.jsonpatch.JsonPatchException; -import com.github.fge.jsonpatch.Patch; import com.linkedin.data.template.RecordTemplate; +import jakarta.json.Json; +import jakarta.json.JsonObject; +import jakarta.json.JsonPatch; +import java.io.StringReader; import javax.annotation.Nonnull; public interface Template { @@ -45,18 +47,21 @@ default T getSubtype(RecordTemplate recordTemplate) throws ClassCastException { * @param jsonPatch patch to apply * @return patched value * @throws JsonProcessingException if there is an issue converting the input to JSON - * @throws JsonPatchException if there is an issue applying the patch */ - default T applyPatch(RecordTemplate recordTemplate, Patch jsonPatch) - throws JsonProcessingException, JsonPatchException { - + default T applyPatch(RecordTemplate recordTemplate, JsonPatch jsonPatch) + throws JsonProcessingException { TemplateUtil.validatePatch(jsonPatch); + JsonNode transformed = populateTopLevelKeys(preprocessTemplate(recordTemplate), jsonPatch); try { - JsonNode patched = jsonPatch.apply(transformed); - JsonNode postProcessed = rebaseFields(patched); + // Hack in a more efficient patcher. Even with the serialization overhead 140% faster + JsonObject patched = + jsonPatch.apply( + Json.createReader(new StringReader(OBJECT_MAPPER.writeValueAsString(transformed))) + .readObject()); + JsonNode postProcessed = rebaseFields(OBJECT_MAPPER.readTree(patched.toString())); return RecordUtils.toRecordTemplate(getTemplateType(), postProcessed.toString()); - } catch (JsonPatchException e) { + } catch (JsonProcessingException e) { throw new RuntimeException( String.format( "Error performing JSON PATCH on aspect %s. Patch: %s Target: %s", diff --git a/entity-registry/src/main/java/com/linkedin/metadata/aspect/patch/template/TemplateUtil.java b/entity-registry/src/main/java/com/linkedin/metadata/aspect/patch/template/TemplateUtil.java index d998692f2c388..be3fc4c1fc983 100644 --- a/entity-registry/src/main/java/com/linkedin/metadata/aspect/patch/template/TemplateUtil.java +++ b/entity-registry/src/main/java/com/linkedin/metadata/aspect/patch/template/TemplateUtil.java @@ -8,9 +8,10 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; -import com.github.fge.jsonpatch.Patch; import com.linkedin.metadata.aspect.patch.PatchOperationType; import com.linkedin.util.Pair; +import jakarta.json.JsonPatch; +import jakarta.json.JsonValue; import java.util.ArrayList; import java.util.List; @@ -30,34 +31,32 @@ private TemplateUtil() {} .setStreamReadConstraints(StreamReadConstraints.builder().maxStringLength(maxSize).build()); } - public static List> getPaths(Patch jsonPatch) { - JsonNode patchNode = OBJECT_MAPPER.valueToTree(jsonPatch); + public static List> getPaths(JsonPatch jsonPatch) { List> paths = new ArrayList<>(); - patchNode - .elements() - .forEachRemaining( + jsonPatch.toJsonArray().stream() + .map(JsonValue::asJsonObject) + .forEach( node -> paths.add( Pair.of( - PatchOperationType.valueOf(node.get("op").asText().toUpperCase()), - node.get("path").asText()))); + PatchOperationType.valueOf(node.getString("op").toUpperCase()), + node.getString("path")))); return paths; } - public static void validatePatch(Patch jsonPatch) { + public static void validatePatch(JsonPatch jsonPatch) { // ensure supported patch operations - JsonNode patchNode = OBJECT_MAPPER.valueToTree(jsonPatch); - patchNode - .elements() - .forEachRemaining( - node -> { + jsonPatch.toJsonArray().stream() + .map(JsonValue::asJsonObject) + .forEach( + jsonObject -> { try { - PatchOperationType.valueOf(node.get("op").asText().toUpperCase()); + PatchOperationType.valueOf(jsonObject.getString("op").toUpperCase()); } catch (Exception e) { throw new RuntimeException( String.format( "Unsupported PATCH operation: `%s` Operation `%s`", - node.get("op").asText(), node), + jsonObject.getString("op"), jsonObject), e); } }); @@ -70,7 +69,7 @@ public static void validatePatch(Patch jsonPatch) { * @param transformedNode transformed node to have keys populated * @return transformed node that has top level keys populated */ - public static JsonNode populateTopLevelKeys(JsonNode transformedNode, Patch jsonPatch) { + public static JsonNode populateTopLevelKeys(JsonNode transformedNode, JsonPatch jsonPatch) { JsonNode transformedNodeClone = transformedNode.deepCopy(); List> paths = getPaths(jsonPatch); for (Pair operationPath : paths) { diff --git a/entity-registry/src/main/java/com/linkedin/metadata/aspect/patch/template/common/GenericPatchTemplate.java b/entity-registry/src/main/java/com/linkedin/metadata/aspect/patch/template/common/GenericPatchTemplate.java index 3a3e3c99f25a3..3658ba3c54463 100644 --- a/entity-registry/src/main/java/com/linkedin/metadata/aspect/patch/template/common/GenericPatchTemplate.java +++ b/entity-registry/src/main/java/com/linkedin/metadata/aspect/patch/template/common/GenericPatchTemplate.java @@ -1,7 +1,6 @@ package com.linkedin.metadata.aspect.patch.template.common; import com.fasterxml.jackson.databind.JsonNode; -import com.github.fge.jsonpatch.JsonPatchException; import com.linkedin.data.template.RecordTemplate; import com.linkedin.metadata.aspect.patch.GenericJsonPatch; import com.linkedin.metadata.aspect.patch.template.CompoundKeyTemplate; @@ -53,7 +52,7 @@ public JsonNode rebaseFields(JsonNode patched) { return transformedNode; } - public T applyPatch(RecordTemplate recordTemplate) throws IOException, JsonPatchException { + public T applyPatch(RecordTemplate recordTemplate) throws IOException { return super.applyPatch(recordTemplate, genericJsonPatch.getJsonPatch()); } } diff --git a/entity-registry/src/test/java/com/linkedin/metadata/aspect/patch/template/ChartInfoTemplateTest.java b/entity-registry/src/test/java/com/linkedin/metadata/aspect/patch/template/ChartInfoTemplateTest.java index b2911100519fc..8b138e0f59ee9 100644 --- a/entity-registry/src/test/java/com/linkedin/metadata/aspect/patch/template/ChartInfoTemplateTest.java +++ b/entity-registry/src/test/java/com/linkedin/metadata/aspect/patch/template/ChartInfoTemplateTest.java @@ -1,17 +1,11 @@ package com.linkedin.metadata.aspect.patch.template; -import static com.fasterxml.jackson.databind.node.JsonNodeFactory.*; - -import com.fasterxml.jackson.databind.node.ObjectNode; -import com.github.fge.jackson.jsonpointer.JsonPointer; -import com.github.fge.jsonpatch.AddOperation; -import com.github.fge.jsonpatch.JsonPatch; -import com.github.fge.jsonpatch.JsonPatchOperation; import com.linkedin.chart.ChartInfo; import com.linkedin.common.urn.UrnUtils; import com.linkedin.metadata.aspect.patch.template.chart.ChartInfoTemplate; -import java.util.ArrayList; -import java.util.List; +import jakarta.json.Json; +import jakarta.json.JsonObjectBuilder; +import jakarta.json.JsonPatchBuilder; import org.testng.Assert; import org.testng.annotations.Test; @@ -21,18 +15,16 @@ public class ChartInfoTemplateTest { public void testChartInfoTemplate() throws Exception { ChartInfoTemplate chartInfoTemplate = new ChartInfoTemplate(); ChartInfo dashboardInfo = chartInfoTemplate.getDefault(); - List patchOperations = new ArrayList<>(); - ObjectNode edgeNode = instance.objectNode(); - edgeNode.put( + JsonPatchBuilder patchOperations = Json.createPatchBuilder(); + + JsonObjectBuilder edgeNode = Json.createObjectBuilder(); + edgeNode.add( "destinationUrn", "urn:li:dataset:(urn:li:dataPlatform:hive,SampleHiveDataset,PROD)"); - JsonPatchOperation operation = - new AddOperation( - new JsonPointer( - "/inputEdges/urn:li:dataset:(urn:li:dataPlatform:hive,SampleHiveDataset,PROD)"), - edgeNode); - patchOperations.add(operation); - JsonPatch patch = new JsonPatch(patchOperations); - ChartInfo result = chartInfoTemplate.applyPatch(dashboardInfo, patch); + + patchOperations.add( + "/inputEdges/urn:li:dataset:(urn:li:dataPlatform:hive,SampleHiveDataset,PROD)", + edgeNode.build()); + ChartInfo result = chartInfoTemplate.applyPatch(dashboardInfo, patchOperations.build()); Assert.assertEquals( UrnUtils.getUrn("urn:li:dataset:(urn:li:dataPlatform:hive,SampleHiveDataset,PROD)"), diff --git a/entity-registry/src/test/java/com/linkedin/metadata/aspect/patch/template/DashboardInfoTemplateTest.java b/entity-registry/src/test/java/com/linkedin/metadata/aspect/patch/template/DashboardInfoTemplateTest.java index be15d6976aee6..1446635c8de94 100644 --- a/entity-registry/src/test/java/com/linkedin/metadata/aspect/patch/template/DashboardInfoTemplateTest.java +++ b/entity-registry/src/test/java/com/linkedin/metadata/aspect/patch/template/DashboardInfoTemplateTest.java @@ -1,17 +1,10 @@ package com.linkedin.metadata.aspect.patch.template; -import static com.fasterxml.jackson.databind.node.JsonNodeFactory.*; - -import com.fasterxml.jackson.databind.node.ObjectNode; -import com.github.fge.jackson.jsonpointer.JsonPointer; -import com.github.fge.jsonpatch.AddOperation; -import com.github.fge.jsonpatch.JsonPatch; -import com.github.fge.jsonpatch.JsonPatchOperation; import com.linkedin.common.urn.UrnUtils; import com.linkedin.dashboard.DashboardInfo; import com.linkedin.metadata.aspect.patch.template.dashboard.DashboardInfoTemplate; -import java.util.ArrayList; -import java.util.List; +import jakarta.json.Json; +import jakarta.json.JsonPatchBuilder; import org.testng.Assert; import org.testng.annotations.Test; @@ -21,18 +14,18 @@ public class DashboardInfoTemplateTest { public void testDashboardInfoTemplate() throws Exception { DashboardInfoTemplate dashboardInfoTemplate = new DashboardInfoTemplate(); DashboardInfo dashboardInfo = dashboardInfoTemplate.getDefault(); - List patchOperations = new ArrayList<>(); - ObjectNode edgeNode = instance.objectNode(); - edgeNode.put( - "destinationUrn", "urn:li:dataset:(urn:li:dataPlatform:hive,SampleHiveDataset,PROD)"); - JsonPatchOperation operation = - new AddOperation( - new JsonPointer( - "/datasetEdges/urn:li:dataset:(urn:li:dataPlatform:hive,SampleHiveDataset,PROD)"), - edgeNode); - patchOperations.add(operation); - JsonPatch patch = new JsonPatch(patchOperations); - DashboardInfo result = dashboardInfoTemplate.applyPatch(dashboardInfo, patch); + JsonPatchBuilder jsonPatchBuilder = Json.createPatchBuilder(); + jsonPatchBuilder.add( + "/datasetEdges/urn:li:dataset:(urn:li:dataPlatform:hive,SampleHiveDataset,PROD)", + Json.createObjectBuilder() + .add( + "destinationUrn", + Json.createValue( + "urn:li:dataset:(urn:li:dataPlatform:hive,SampleHiveDataset,PROD)")) + .build()); + + DashboardInfo result = + dashboardInfoTemplate.applyPatch(dashboardInfo, jsonPatchBuilder.build()); Assert.assertEquals( UrnUtils.getUrn("urn:li:dataset:(urn:li:dataPlatform:hive,SampleHiveDataset,PROD)"), diff --git a/entity-registry/src/test/java/com/linkedin/metadata/aspect/patch/template/UpstreamLineageTemplateTest.java b/entity-registry/src/test/java/com/linkedin/metadata/aspect/patch/template/UpstreamLineageTemplateTest.java index 4bad6a8e3d659..8c7bfc98b2673 100644 --- a/entity-registry/src/test/java/com/linkedin/metadata/aspect/patch/template/UpstreamLineageTemplateTest.java +++ b/entity-registry/src/test/java/com/linkedin/metadata/aspect/patch/template/UpstreamLineageTemplateTest.java @@ -1,47 +1,51 @@ package com.linkedin.metadata.aspect.patch.template; -import static com.fasterxml.jackson.databind.node.JsonNodeFactory.*; - -import com.fasterxml.jackson.databind.node.NumericNode; -import com.fasterxml.jackson.databind.node.ObjectNode; -import com.github.fge.jackson.jsonpointer.JsonPointer; -import com.github.fge.jsonpatch.AddOperation; -import com.github.fge.jsonpatch.JsonPatch; -import com.github.fge.jsonpatch.JsonPatchOperation; -import com.github.fge.jsonpatch.RemoveOperation; +import static com.linkedin.metadata.utils.GenericRecordUtils.JSON; +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertTrue; + +import com.fasterxml.jackson.databind.ObjectMapper; import com.linkedin.common.UrnArray; import com.linkedin.common.urn.Urn; import com.linkedin.common.urn.UrnUtils; +import com.linkedin.data.ByteString; import com.linkedin.data.DataMap; import com.linkedin.dataset.FineGrainedLineage; import com.linkedin.dataset.FineGrainedLineageDownstreamType; import com.linkedin.dataset.FineGrainedLineageUpstreamType; import com.linkedin.dataset.UpstreamLineage; import com.linkedin.metadata.aspect.patch.template.dataset.UpstreamLineageTemplate; -import java.util.ArrayList; -import java.util.List; -import org.testng.Assert; +import com.linkedin.metadata.utils.GenericRecordUtils; +import jakarta.json.Json; +import jakarta.json.JsonObjectBuilder; +import jakarta.json.JsonPatch; +import jakarta.json.JsonPatchBuilder; +import jakarta.json.JsonValue; +import java.io.StringReader; +import java.nio.charset.StandardCharsets; +import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream; import org.testng.annotations.Test; public class UpstreamLineageTemplateTest { + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + @Test public void testPatchUpstream() throws Exception { UpstreamLineageTemplate upstreamLineageTemplate = new UpstreamLineageTemplate(); UpstreamLineage upstreamLineage = upstreamLineageTemplate.getDefault(); - List patchOperations = new ArrayList<>(); - ObjectNode fineGrainedLineageNode = instance.objectNode(); - NumericNode upstreamConfidenceScore = instance.numberNode(1.0f); - fineGrainedLineageNode.set("confidenceScore", upstreamConfidenceScore); - JsonPatchOperation operation = - new AddOperation( - new JsonPointer( - "/fineGrainedLineages/CREATE/urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:bigquery,upstream_table_1,PROD),c1)//urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:bigquery,upstream_table_2,PROD),c1)"), - fineGrainedLineageNode); - patchOperations.add(operation); - JsonPatch jsonPatch = new JsonPatch(patchOperations); + JsonPatchBuilder jsonPatchBuilder = Json.createPatchBuilder(); + + JsonObjectBuilder fineGrainedLineageNode = Json.createObjectBuilder(); + JsonValue upstreamConfidenceScore = Json.createValue(1.0f); + fineGrainedLineageNode.add("confidenceScore", upstreamConfidenceScore); + + jsonPatchBuilder.add( + "/fineGrainedLineages/CREATE/urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:bigquery,upstream_table_1,PROD),c1)//urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:bigquery,upstream_table_2,PROD),c1)", + fineGrainedLineageNode.build()); // Initial population test - UpstreamLineage result = upstreamLineageTemplate.applyPatch(upstreamLineage, jsonPatch); + UpstreamLineage result = + upstreamLineageTemplate.applyPatch(upstreamLineage, jsonPatchBuilder.build()); // Hack because Jackson parses values to doubles instead of floats DataMap dataMap = new DataMap(); dataMap.put("confidenceScore", 1.0); @@ -61,36 +65,35 @@ public void testPatchUpstream() throws Exception { fineGrainedLineage.setTransformOperation("CREATE"); fineGrainedLineage.setUpstreamType(FineGrainedLineageUpstreamType.FIELD_SET); fineGrainedLineage.setDownstreamType(FineGrainedLineageDownstreamType.FIELD); - Assert.assertEquals(result.getFineGrainedLineages().get(0), fineGrainedLineage); + assertEquals(result.getFineGrainedLineages().get(0), fineGrainedLineage); // Test non-overwrite upstreams and correct confidence score and types w/ overwrite - ObjectNode finegrainedLineageNode2 = instance.objectNode(); - finegrainedLineageNode2.set( - "upstreamType", instance.textNode(FineGrainedLineageUpstreamType.FIELD_SET.name())); - finegrainedLineageNode2.set("confidenceScore", upstreamConfidenceScore); - finegrainedLineageNode2.set( - "downstreamType", instance.textNode(FineGrainedLineageDownstreamType.FIELD.name())); - JsonPatchOperation operation2 = - new AddOperation( - new JsonPointer( - "/fineGrainedLineages/CREATE/urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:bigquery,upstream_table_2,PROD),c2)/urn:li:query:someQuery/urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:bigquery,upstream_table_1,PROD),c2)"), - finegrainedLineageNode2); - NumericNode upstreamConfidenceScore2 = instance.numberNode(0.1f); - ObjectNode finegrainedLineageNode3 = instance.objectNode(); - finegrainedLineageNode3.set( - "upstreamType", instance.textNode(FineGrainedLineageUpstreamType.DATASET.name())); - finegrainedLineageNode3.set("confidenceScore", upstreamConfidenceScore2); - finegrainedLineageNode3.set( - "downstreamType", instance.textNode(FineGrainedLineageDownstreamType.FIELD_SET.name())); - JsonPatchOperation operation3 = - new AddOperation( - new JsonPointer( - "/fineGrainedLineages/CREATE/urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:bigquery,upstream_table_2,PROD),c2)/urn:li:query:someQuery/urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:bigquery,upstream_table_1,PROD),c2)"), - finegrainedLineageNode3); - List patchOperations2 = new ArrayList<>(); - patchOperations2.add(operation2); - patchOperations2.add(operation3); - JsonPatch jsonPatch2 = new JsonPatch(patchOperations2); + JsonObjectBuilder finegrainedLineageNode2 = Json.createObjectBuilder(); + finegrainedLineageNode2.add( + "upstreamType", Json.createValue(FineGrainedLineageUpstreamType.FIELD_SET.name())); + finegrainedLineageNode2.add("confidenceScore", upstreamConfidenceScore); + finegrainedLineageNode2.add( + "downstreamType", Json.createValue(FineGrainedLineageDownstreamType.FIELD.name())); + + JsonPatchBuilder patchOperations2 = Json.createPatchBuilder(); + patchOperations2.add( + "/fineGrainedLineages/CREATE/urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:bigquery,upstream_table_2,PROD),c2)/urn:li:query:someQuery/urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:bigquery,upstream_table_1,PROD),c2)", + finegrainedLineageNode2.build()); + + JsonValue upstreamConfidenceScore2 = Json.createValue(0.1f); + JsonObjectBuilder finegrainedLineageNode3 = Json.createObjectBuilder(); + finegrainedLineageNode3.add( + "upstreamType", Json.createValue(FineGrainedLineageUpstreamType.DATASET.name())); + finegrainedLineageNode3.add("confidenceScore", upstreamConfidenceScore2); + finegrainedLineageNode3.add( + "downstreamType", Json.createValue(FineGrainedLineageDownstreamType.FIELD_SET.name())); + + patchOperations2.add( + "/fineGrainedLineages/CREATE/urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:bigquery,upstream_table_2,PROD),c2)/urn:li:query:someQuery/urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:bigquery,upstream_table_1,PROD),c2)", + finegrainedLineageNode3.build()); + + JsonPatch jsonPatch2 = patchOperations2.build(); + UpstreamLineage result2 = upstreamLineageTemplate.applyPatch(result, jsonPatch2); // Hack because Jackson parses values to doubles instead of floats DataMap dataMap2 = new DataMap(); @@ -112,23 +115,22 @@ public void testPatchUpstream() throws Exception { fineGrainedLineage2.setUpstreamType(FineGrainedLineageUpstreamType.DATASET); fineGrainedLineage2.setDownstreamType(FineGrainedLineageDownstreamType.FIELD_SET); fineGrainedLineage2.setQuery(UrnUtils.getUrn("urn:li:query:someQuery")); - Assert.assertEquals(result2.getFineGrainedLineages().get(1), fineGrainedLineage2); + assertEquals(result2.getFineGrainedLineages().get(1), fineGrainedLineage2); // Check different queries - ObjectNode finegrainedLineageNode4 = instance.objectNode(); - finegrainedLineageNode4.set( - "upstreamType", instance.textNode(FineGrainedLineageUpstreamType.FIELD_SET.name())); - finegrainedLineageNode4.set("confidenceScore", upstreamConfidenceScore); - finegrainedLineageNode4.set( - "downstreamType", instance.textNode(FineGrainedLineageDownstreamType.FIELD.name())); - JsonPatchOperation operation4 = - new AddOperation( - new JsonPointer( - "/fineGrainedLineages/CREATE/urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:bigquery,upstream_table_2,PROD),c2)/urn:li:query:anotherQuery/urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:bigquery,upstream_table_1,PROD),c2)"), - finegrainedLineageNode4); - List patchOperations3 = new ArrayList<>(); - patchOperations3.add(operation4); - JsonPatch jsonPatch3 = new JsonPatch(patchOperations3); + JsonObjectBuilder finegrainedLineageNode4 = Json.createObjectBuilder(); + finegrainedLineageNode4.add( + "upstreamType", Json.createValue(FineGrainedLineageUpstreamType.FIELD_SET.name())); + finegrainedLineageNode4.add("confidenceScore", upstreamConfidenceScore); + finegrainedLineageNode4.add( + "downstreamType", Json.createValue(FineGrainedLineageDownstreamType.FIELD.name())); + + JsonPatchBuilder patchOperations3 = Json.createPatchBuilder(); + patchOperations3.add( + "/fineGrainedLineages/CREATE/urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:bigquery,upstream_table_2,PROD),c2)/urn:li:query:anotherQuery/urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:bigquery,upstream_table_1,PROD),c2)", + finegrainedLineageNode4.build()); + + JsonPatch jsonPatch3 = patchOperations3.build(); UpstreamLineage result3 = upstreamLineageTemplate.applyPatch(result2, jsonPatch3); // Hack because Jackson parses values to doubles instead of floats DataMap dataMap3 = new DataMap(); @@ -152,23 +154,22 @@ public void testPatchUpstream() throws Exception { fineGrainedLineage3.setDownstreamType(FineGrainedLineageDownstreamType.FIELD); fineGrainedLineage3.setQuery(UrnUtils.getUrn("urn:li:query:anotherQuery")); // Splits into two for different types - Assert.assertEquals(result3.getFineGrainedLineages().get(2), fineGrainedLineage3); + assertEquals(result3.getFineGrainedLineages().get(2), fineGrainedLineage3); // Check different transform types - ObjectNode finegrainedLineageNode5 = instance.objectNode(); - finegrainedLineageNode5.set( - "upstreamType", instance.textNode(FineGrainedLineageUpstreamType.FIELD_SET.name())); - finegrainedLineageNode5.set("confidenceScore", upstreamConfidenceScore); - finegrainedLineageNode5.set( - "downstreamType", instance.textNode(FineGrainedLineageDownstreamType.FIELD.name())); - JsonPatchOperation operation5 = - new AddOperation( - new JsonPointer( - "/fineGrainedLineages/TRANSFORM/urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:bigquery,upstream_table_2,PROD),c2)/urn:li:query:anotherQuery/urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:bigquery,upstream_table_1,PROD),c2)"), - finegrainedLineageNode5); - List patchOperations4 = new ArrayList<>(); - patchOperations4.add(operation5); - JsonPatch jsonPatch4 = new JsonPatch(patchOperations4); + JsonObjectBuilder finegrainedLineageNode5 = Json.createObjectBuilder(); + finegrainedLineageNode5.add( + "upstreamType", Json.createValue(FineGrainedLineageUpstreamType.FIELD_SET.name())); + finegrainedLineageNode5.add("confidenceScore", upstreamConfidenceScore); + finegrainedLineageNode5.add( + "downstreamType", Json.createValue(FineGrainedLineageDownstreamType.FIELD.name())); + + JsonPatchBuilder patchOperations4 = Json.createPatchBuilder(); + patchOperations4.add( + "/fineGrainedLineages/TRANSFORM/urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:bigquery,upstream_table_2,PROD),c2)/urn:li:query:anotherQuery/urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:bigquery,upstream_table_1,PROD),c2)", + finegrainedLineageNode5.build()); + JsonPatch jsonPatch4 = patchOperations4.build(); + UpstreamLineage result4 = upstreamLineageTemplate.applyPatch(result3, jsonPatch4); // Hack because Jackson parses values to doubles instead of floats DataMap dataMap4 = new DataMap(); @@ -181,33 +182,76 @@ public void testPatchUpstream() throws Exception { fineGrainedLineage4.setDownstreamType(FineGrainedLineageDownstreamType.FIELD); fineGrainedLineage4.setQuery(UrnUtils.getUrn("urn:li:query:anotherQuery")); // New entry in array because of new transformation type - Assert.assertEquals(result4.getFineGrainedLineages().get(3), fineGrainedLineage4); + assertEquals(result4.getFineGrainedLineages().get(3), fineGrainedLineage4); // Remove - JsonPatchOperation removeOperation = - new RemoveOperation( - new JsonPointer( - "/fineGrainedLineages/CREATE/urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:bigquery,upstream_table_1,PROD),c1)/NONE/urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:bigquery,upstream_table_2,PROD),c1)")); - JsonPatchOperation removeOperation2 = - new RemoveOperation( - new JsonPointer( - "/fineGrainedLineages/CREATE/urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:bigquery,upstream_table_2,PROD),c2)/urn:li:query:someQuery/urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:bigquery,upstream_table_1,PROD),c2)")); - JsonPatchOperation removeOperation3 = - new RemoveOperation( - new JsonPointer( - "/fineGrainedLineages/CREATE/urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:bigquery,upstream_table_2,PROD),c2)/urn:li:query:anotherQuery/urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:bigquery,upstream_table_1,PROD),c2)")); - JsonPatchOperation removeOperation4 = - new RemoveOperation( - new JsonPointer( - "/fineGrainedLineages/TRANSFORM/urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:bigquery,upstream_table_2,PROD),c2)/urn:li:query:anotherQuery/urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:bigquery,upstream_table_1,PROD),c2)")); - - List removeOperations = new ArrayList<>(); - removeOperations.add(removeOperation); - removeOperations.add(removeOperation2); - removeOperations.add(removeOperation3); - removeOperations.add(removeOperation4); - JsonPatch removePatch = new JsonPatch(removeOperations); + JsonPatchBuilder removeOperations = Json.createPatchBuilder(); + removeOperations.remove( + "/fineGrainedLineages/CREATE/urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:bigquery,upstream_table_1,PROD),c1)/NONE/urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:bigquery,upstream_table_2,PROD),c1)"); + removeOperations.remove( + "/fineGrainedLineages/CREATE/urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:bigquery,upstream_table_2,PROD),c2)/urn:li:query:someQuery/urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:bigquery,upstream_table_1,PROD),c2)"); + removeOperations.remove( + "/fineGrainedLineages/CREATE/urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:bigquery,upstream_table_2,PROD),c2)/urn:li:query:anotherQuery/urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:bigquery,upstream_table_1,PROD),c2)"); + removeOperations.remove( + "/fineGrainedLineages/TRANSFORM/urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:bigquery,upstream_table_2,PROD),c2)/urn:li:query:anotherQuery/urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:bigquery,upstream_table_1,PROD),c2)"); + + JsonPatch removePatch = removeOperations.build(); UpstreamLineage finalResult = upstreamLineageTemplate.applyPatch(result4, removePatch); - Assert.assertEquals(finalResult, upstreamLineageTemplate.getDefault()); + assertEquals(finalResult, upstreamLineageTemplate.getDefault()); + } + + @Test + public void testLargePatchStandard() throws Exception { + // Load patch operations from fixture + String patchStr = + OBJECT_MAPPER + .readTree( + new GzipCompressorInputStream( + this.getClass() + .getResourceAsStream("/patch/large_upstream_lineage_mcp.json.gz"))) + .get("aspect") + .get("com.linkedin.pegasus2avro.mxe.GenericAspect") + .get("value") + .asText(); + + JsonPatchBuilder patchBuilder = + Json.createPatchBuilder(Json.createReader(new StringReader(patchStr)).readArray()); + + // Overall the patch is a no-op, adding change to assert difference after application + patchBuilder.remove( + "/upstreams/urn:li:dataset:(urn:li:dataPlatform:snowflake,road_curated_nrt.db_3134_dbo.lineitem,PROD)"); + + JsonPatch jsonPatch = patchBuilder.build(); + assertEquals(jsonPatch.toJsonArray().size(), 7491); + + // Load existing aspect + String aspectStr = + OBJECT_MAPPER + .readTree( + new GzipCompressorInputStream( + this.getClass() + .getResourceAsStream("/patch/large_upstream_lineage_aspect.json.gz"))) + .get("select") + .get(0) + .get("metadata") + .asText(); + UpstreamLineage upstreamLineage = + GenericRecordUtils.deserializeAspect( + ByteString.copyString(aspectStr, StandardCharsets.UTF_8), JSON, UpstreamLineage.class); + assertEquals(upstreamLineage.getUpstreams().size(), 188); + assertEquals(upstreamLineage.getFineGrainedLineages().size(), 607); + + // Apply patch standard + UpstreamLineageTemplate upstreamLineageTemplate = new UpstreamLineageTemplate(); + + long start = System.currentTimeMillis(); + UpstreamLineage result = upstreamLineageTemplate.applyPatch(upstreamLineage, jsonPatch); + long end = System.currentTimeMillis(); + assertTrue( + end - start < 10000, + String.format("Expected less then 10 seconds patch actual %s ms", end - start)); + + assertEquals(result.getUpstreams().size(), 187, "Expected 1 less upstream"); + assertEquals(result.getFineGrainedLineages().size(), 607); } } diff --git a/entity-registry/src/test/resources/patch/large_upstream_lineage_aspect.json.gz b/entity-registry/src/test/resources/patch/large_upstream_lineage_aspect.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..618e84efe274a9db5ede3dfa4e16a7e585bb070f GIT binary patch literal 296525 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
    h# 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ⅇ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 z%0D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 literal 0 HcmV?d00001 diff --git a/metadata-integration/java/datahub-client/build.gradle b/metadata-integration/java/datahub-client/build.gradle index 2328697632434..53c2a33828907 100644 --- a/metadata-integration/java/datahub-client/build.gradle +++ b/metadata-integration/java/datahub-client/build.gradle @@ -118,7 +118,8 @@ shadowJar { relocate 'ch.randelshofer', 'datahub.shaded.ch.randelshofer' relocate 'io.github.classgraph', 'datahub.shaded.io.github.classgraph' relocate 'nonapi.io.github.classgraph', 'datahub.shaded.nonapi.io.github.classgraph' - relocate 'com.github.fge', 'datahub.shaded.com.github.fge' + relocate 'org.eclipse.parsson', 'datahub.shaded.parsson' + relocate 'jakarta.json', 'datahub.shaded.json' finalizedBy checkShadowJar } diff --git a/metadata-io/build.gradle b/metadata-io/build.gradle index 532395f158c02..49d7610dc3c89 100644 --- a/metadata-io/build.gradle +++ b/metadata-io/build.gradle @@ -25,7 +25,8 @@ dependencies { implementation externalDependency.guava implementation externalDependency.reflections - implementation externalDependency.jsonPatch + + implementation 'com.github.java-json-tools:json-patch:1.13' // TODO: Replace with jakarta.json api(externalDependency.dgraph4j) { exclude group: 'com.google.guava', module: 'guava' exclude group: 'io.grpc', module: 'grpc-protobuf' diff --git a/metadata-io/src/main/java/com/linkedin/metadata/entity/ebean/batch/ChangeItemImpl.java b/metadata-io/src/main/java/com/linkedin/metadata/entity/ebean/batch/ChangeItemImpl.java index e84a7e8a0ab51..a11e01a56c96f 100644 --- a/metadata-io/src/main/java/com/linkedin/metadata/entity/ebean/batch/ChangeItemImpl.java +++ b/metadata-io/src/main/java/com/linkedin/metadata/entity/ebean/batch/ChangeItemImpl.java @@ -3,7 +3,6 @@ import static com.linkedin.metadata.entity.AspectUtils.validateAspect; import com.datahub.util.exception.ModelConversionException; -import com.github.fge.jsonpatch.JsonPatchException; import com.linkedin.common.AuditStamp; import com.linkedin.common.urn.Urn; import com.linkedin.data.template.RecordTemplate; @@ -54,7 +53,7 @@ public static ChangeItemImpl fromPatch( try { builder.recordTemplate(genericPatchTemplate.applyPatch(currentValue)); - } catch (JsonPatchException | IOException e) { + } catch (IOException e) { throw new RuntimeException(e); } diff --git a/metadata-io/src/main/java/com/linkedin/metadata/entity/ebean/batch/PatchItemImpl.java b/metadata-io/src/main/java/com/linkedin/metadata/entity/ebean/batch/PatchItemImpl.java index cf9c3978e3a37..0efa45d121f2a 100644 --- a/metadata-io/src/main/java/com/linkedin/metadata/entity/ebean/batch/PatchItemImpl.java +++ b/metadata-io/src/main/java/com/linkedin/metadata/entity/ebean/batch/PatchItemImpl.java @@ -8,9 +8,6 @@ import com.fasterxml.jackson.core.StreamReadConstraints; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.github.fge.jsonpatch.JsonPatch; -import com.github.fge.jsonpatch.JsonPatchException; -import com.github.fge.jsonpatch.Patch; import com.linkedin.common.AuditStamp; import com.linkedin.common.urn.Urn; import com.linkedin.data.template.RecordTemplate; @@ -27,7 +24,9 @@ import com.linkedin.metadata.utils.SystemMetadataUtils; import com.linkedin.mxe.MetadataChangeProposal; import com.linkedin.mxe.SystemMetadata; -import java.io.IOException; +import jakarta.json.Json; +import jakarta.json.JsonPatch; +import java.io.StringReader; import java.nio.charset.StandardCharsets; import java.util.Objects; import javax.annotation.Nonnull; @@ -59,7 +58,7 @@ public class PatchItemImpl implements PatchMCP { private final SystemMetadata systemMetadata; private final AuditStamp auditStamp; - private final Patch patch; + private final JsonPatch patch; private final MetadataChangeProposal metadataChangeProposal; @@ -108,7 +107,7 @@ public ChangeItemImpl applyPatch(RecordTemplate recordTemplate, AspectRetriever try { builder.recordTemplate( aspectTemplateEngine.applyPatch(currentValue, getPatch(), getAspectSpec())); - } catch (JsonProcessingException | JsonPatchException e) { + } catch (JsonProcessingException e) { throw new RuntimeException(e); } @@ -178,12 +177,14 @@ public static PatchItemImpl build( .build(entityRegistry); } - private static Patch convertToJsonPatch(MetadataChangeProposal mcp) { + private static JsonPatch convertToJsonPatch(MetadataChangeProposal mcp) { JsonNode json; try { - json = OBJECT_MAPPER.readTree(mcp.getAspect().getValue().asString(StandardCharsets.UTF_8)); - return JsonPatch.fromJson(json); - } catch (IOException e) { + return Json.createPatch( + Json.createReader( + new StringReader(mcp.getAspect().getValue().asString(StandardCharsets.UTF_8))) + .readArray()); + } catch (RuntimeException e) { throw new IllegalArgumentException("Invalid JSON Patch: " + mcp.getAspect().getValue(), e); } } diff --git a/metadata-service/openapi-servlet/src/main/java/io/datahubproject/openapi/v2/controller/EntityController.java b/metadata-service/openapi-servlet/src/main/java/io/datahubproject/openapi/v2/controller/EntityController.java index adc3164c03b11..b8166d50cc4d0 100644 --- a/metadata-service/openapi-servlet/src/main/java/io/datahubproject/openapi/v2/controller/EntityController.java +++ b/metadata-service/openapi-servlet/src/main/java/io/datahubproject/openapi/v2/controller/EntityController.java @@ -677,8 +677,7 @@ private ChangeMCP toUpsertItem( @Nonnull AspectSpec aspectSpec, @Nullable RecordTemplate currentValue, @Nonnull GenericPatchTemplate genericPatchTemplate, - @Nonnull Actor actor) - throws URISyntaxException { + @Nonnull Actor actor) { return ChangeItemImpl.fromPatch( urn, aspectSpec, diff --git a/metadata-service/services/build.gradle b/metadata-service/services/build.gradle index 9ec523bfd1e21..ea1ff32cb3838 100644 --- a/metadata-service/services/build.gradle +++ b/metadata-service/services/build.gradle @@ -8,7 +8,7 @@ configurations { } dependencies { - implementation externalDependency.jsonPatch + implementation 'com.github.java-json-tools:json-patch:1.13' // TODO: Replace with jakarta.json implementation project(':entity-registry') implementation project(':metadata-utils') implementation project(':metadata-events:mxe-avro') From 7adf72652bb9e33ca83eb38a1f76725f73efd9ee Mon Sep 17 00:00:00 2001 From: Davi Arnaut Date: Wed, 8 May 2024 20:48:13 -0500 Subject: [PATCH 5/6] fix(metadata-service): add PE processor to component scan (#10462) --- .../main/java/com/linkedin/gms/CommonApplicationConfig.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/metadata-service/war/src/main/java/com/linkedin/gms/CommonApplicationConfig.java b/metadata-service/war/src/main/java/com/linkedin/gms/CommonApplicationConfig.java index 5d956c2c8ffad..c44cb4eaa1ac3 100644 --- a/metadata-service/war/src/main/java/com/linkedin/gms/CommonApplicationConfig.java +++ b/metadata-service/war/src/main/java/com/linkedin/gms/CommonApplicationConfig.java @@ -14,6 +14,8 @@ @ComponentScan( basePackages = { "com.linkedin.metadata.boot", + "com.linkedin.metadata.service", + "com.datahub.event", "com.linkedin.gms.factory.config", "com.linkedin.gms.factory.entityregistry", "com.linkedin.gms.factory.common", @@ -34,7 +36,7 @@ "com.linkedin.gms.factory.auth", "com.linkedin.gms.factory.search", "com.linkedin.gms.factory.secret", - "com.linkedin.gms.factory.timeseries" + "com.linkedin.gms.factory.timeseries", }) @PropertySource(value = "classpath:/application.yaml", factory = YamlPropertySourceFactory.class) @Configuration From a86ec7b088dd8c3f56484d0f774f3d5fcec8037e Mon Sep 17 00:00:00 2001 From: dushayntAW <158567391+dushayntAW@users.noreply.github.com> Date: Thu, 9 May 2024 09:30:40 +0200 Subject: [PATCH 6/6] fix(ingestion/airflow-plugin): bumping up the openlineage-airflow version (#10457) --- .github/workflows/airflow-plugin.yml | 3 +++ metadata-ingestion-modules/airflow-plugin/setup.py | 2 +- .../src/datahub_airflow_plugin/client/airflow_generator.py | 3 +++ .../src/datahub_airflow_plugin/datahub_listener.py | 2 ++ 4 files changed, 9 insertions(+), 1 deletion(-) diff --git a/.github/workflows/airflow-plugin.yml b/.github/workflows/airflow-plugin.yml index 21fd547114872..a9be56a69560c 100644 --- a/.github/workflows/airflow-plugin.yml +++ b/.github/workflows/airflow-plugin.yml @@ -51,6 +51,9 @@ jobs: - python-version: "3.10" extra_pip_requirements: 'apache-airflow==2.8.1 -c https://raw.githubusercontent.com/apache/airflow/constraints-2.8.1/constraints-3.10.txt' extra_pip_extras: plugin-v2 + - python-version: "3.10" + extra_pip_requirements: 'apache-airflow==2.9.0 -c https://raw.githubusercontent.com/apache/airflow/constraints-2.9.0/constraints-3.10.txt' + extra_pip_extras: plugin-v2 fail-fast: false steps: - name: Set up JDK 17 diff --git a/metadata-ingestion-modules/airflow-plugin/setup.py b/metadata-ingestion-modules/airflow-plugin/setup.py index 90167126bc349..065e9454c5d9e 100644 --- a/metadata-ingestion-modules/airflow-plugin/setup.py +++ b/metadata-ingestion-modules/airflow-plugin/setup.py @@ -42,7 +42,7 @@ def get_long_description(): # We remain restrictive on the versions allowed here to prevent # us from being broken by backwards-incompatible changes in the # underlying package. - "openlineage-airflow>=1.2.0,<=1.7.0", + "openlineage-airflow>=1.2.0,<=1.12.0", }, } diff --git a/metadata-ingestion-modules/airflow-plugin/src/datahub_airflow_plugin/client/airflow_generator.py b/metadata-ingestion-modules/airflow-plugin/src/datahub_airflow_plugin/client/airflow_generator.py index cdba268eed56b..d67754605c71b 100644 --- a/metadata-ingestion-modules/airflow-plugin/src/datahub_airflow_plugin/client/airflow_generator.py +++ b/metadata-ingestion-modules/airflow-plugin/src/datahub_airflow_plugin/client/airflow_generator.py @@ -420,6 +420,7 @@ def run_datajob( config: Optional[DatahubLineageConfig] = None, ) -> DataProcessInstance: if datajob is None: + assert ti.task is not None datajob = AirflowGenerator.generate_datajob( cluster, ti.task, dag, config=config ) @@ -509,6 +510,7 @@ def complete_datajob( :return: DataProcessInstance """ if datajob is None: + assert ti.task is not None datajob = AirflowGenerator.generate_datajob( cluster, ti.task, dag, config=config ) @@ -530,6 +532,7 @@ def complete_datajob( f"Result should be either success or failure and it was {ti.state}" ) + assert datajob is not None dpi = DataProcessInstance.from_datajob( datajob=datajob, id=f"{dag.dag_id}_{ti.task_id}_{dag_run.run_id}", diff --git a/metadata-ingestion-modules/airflow-plugin/src/datahub_airflow_plugin/datahub_listener.py b/metadata-ingestion-modules/airflow-plugin/src/datahub_airflow_plugin/datahub_listener.py index cf55d5347a338..15f76a8b1e1d0 100644 --- a/metadata-ingestion-modules/airflow-plugin/src/datahub_airflow_plugin/datahub_listener.py +++ b/metadata-ingestion-modules/airflow-plugin/src/datahub_airflow_plugin/datahub_listener.py @@ -360,6 +360,7 @@ def on_task_instance_running( # The type ignore is to placate mypy on Airflow 2.1.x. dagrun: "DagRun" = task_instance.dag_run # type: ignore[attr-defined] task = task_instance.task + assert task is not None dag: "DAG" = task.dag # type: ignore[assignment] self._task_holder.set_task(task_instance) @@ -447,6 +448,7 @@ def on_task_instance_finish( ) -> None: dagrun: "DagRun" = task_instance.dag_run # type: ignore[attr-defined] task = self._task_holder.get_task(task_instance) or task_instance.task + assert task is not None dag: "DAG" = task.dag # type: ignore[assignment] datajob = AirflowGenerator.generate_datajob(