{"id":64268,"date":"2022-08-12T19:38:26","date_gmt":"2022-08-12T18:38:26","guid":{"rendered":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/?p=64268"},"modified":"2023-02-24T15:59:17","modified_gmt":"2023-02-24T14:59:17","slug":"injecting-lineage-and-attributes-into-microsoft-purview-part-1","status":"publish","type":"post","link":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2022\/08\/12\/injecting-lineage-and-attributes-into-microsoft-purview-part-1\/","title":{"rendered":"Injecting lineage and attributes into Microsoft Purview \u2013 Part 1"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"attachment-full size-full\" src=\"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/01\/CloudblogsBitTemplateHeaderNew.jpg\" alt=\"An illustration of a cloud made of puzzle pieces, with a drawing of Bit the Raccoon to the right of the image.\" width=\"1920\" height=\"700\" \/><\/p>\n<p>\u201cHow do I easily find the data I\u2019m looking for?\u201d<\/p>\n<p>\u201cHow do I know the data comes from a reliable source?\u201d<\/p>\n<p>These are common questions we hear from data consumers, particularly more so as the organisation starts to scale it\u2019s data platform with numerous data sources and data producers. Identifying the right datasets across a vast array of data stores or a heap of catalog search results can be a challenging and time-consuming process. Enriching these consumption-worthy assets with additional business and technical metadata will form part of the solution. This two-part blog describes and demonstrates how to easily add lineage and attributes in order to improve the data consumer\u2019s experience.<\/p>\n<h3>Current capabilities<\/h3>\n<p>Automatic lineage collection in Microsoft Purview is currently only supported by\u202f<a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/purview\/how-to-link-azure-data-factory#supported-azure-data-factory-activities?ocid=AID3051534\" target=\"_blank\" rel=\"noopener\">certain ADF activities<\/a>\u202fand\u202f<a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/purview\/how-to-lineage-azure-synapse-analytics#supported-azure-synapse-capabilities?ocid=AID3051534\" target=\"_blank\" rel=\"noopener\">Synapse activities<\/a>. No doubt this will expand over time, however you may wish to capture lineage from other engines such as Synapse Spark or Databricks. Whilst there is a\u202f<a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/purview\/how-to-lineage-spark-atlas-connector?ocid=AID3051534\" target=\"_blank\" rel=\"noopener\">Spark based lineage collector<\/a>, as well as the\u202f<a href=\"https:\/\/github.com\/microsoft\/Purview-ADB-Lineage-Solution-Accelerator?ocid=AID3051534\" target=\"_blank\" rel=\"noopener\">Azure Databricks to Purview Lineage Connector<\/a>\u202fbased on\u202f<a href=\"https:\/\/openlineage.io\/\" target=\"_blank\" rel=\"noopener\">Open Lineage<\/a>, you can alternatively inject your own lineage programmatically \u2014 for every transformation or process which creates a new dataset there will need to be some additional code run in order to create the relationship or linkage between inputs and outputs. This solution requires data producers to become diligent about adapting their current and future (ETL) processes to \u201cpublish\u201d this critical metadata to Purview, and this post aims to demonstrate one of the ways this can be achieved.<\/p>\n<p><a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/purview\/concept-classification?ocid=AID3051534\" target=\"_blank\" rel=\"noopener\">Classifications<\/a>\u202fare a good way of describing technical metadata but often consumers need the business understanding\/metadata to compliment this, in which case you may wish to assign attributes or tags to the data. The workflow engine in Microsoft Purview may very well evolve to automate this in the future but for the time being it will have to be a manual applied or a scripted process depending on the business rules\/logic.<\/p>\n<p>This blog post will show you how to inject both of these metadata elements into your Purview catalog, also known as the Purview\u202f<a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/purview\/overview#data-map?ocid=AID3051534\" target=\"_blank\" rel=\"noopener\">Data Map<\/a>. The full source code for this walkthrough can be found in this\u202f<a href=\"https:\/\/github.com\/hurtn\/purview.git?ocid=AID3051534\" target=\"_blank\" rel=\"noopener\">Github repository<\/a>\u202fwhich includes notebooks with markdown comments, but for the remainder of this post we\u2019ll go into a bit more detail. It assumes you have some understanding of Python and how to interact with the\u202f<a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/purview\/tutorial-using-rest-apis?ocid=AID3051534\" target=\"_blank\" rel=\"noopener\">Purview using SDKs\/APIs<\/a>, which includes the prerequisites such as creating a service principal and assigning necessary roles.<\/p>\n<h3>Provenance and Process<\/h3>\n<p>To inject lineage between datasets which reside in ADLS (data lake) for example, we will use the superb\u202f<a href=\"https:\/\/github.com\/wjohnson\/pyapacheatlas?ocid=AID3051534\" target=\"_blank\" rel=\"noopener\">Pyapacheatlas<\/a>\u202fpackage by Will Johnson. Adapted from one of the\u202f<a href=\"https:\/\/github.com\/wjohnson\/pyapacheatlas\/blob\/master\/samples\/notebooks\/Azure_Purview_Entity_Classification_Lineage.ipynb?ocid=AID3051534\" target=\"_blank\" rel=\"noopener\">sample notebooks<\/a>\u202fin his repository, the notebook used in this blog can be found\u202f<a href=\"https:\/\/github.com\/hurtn\/purview\/blob\/master\/lineage.ipynb?ocid=AID3051534\" target=\"_blank\" rel=\"noopener\">here<\/a>. Ideally perform a git clone on the link to the repo above in order to download both notebooks used in this post.<\/p>\n<p>To run the code, we\u2019ll use Python in Synapse Spark, as this might be a common point of entry where data producers\/engineers might run their data transformations and will know the inputs and output datasets to their process(es).<\/p>\n<p>When using Python\u202f<a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/synapse-analytics\/spark\/apache-spark-32-runtime?ocid=AID3051534\" target=\"_blank\" rel=\"noopener\">distributions bundled in Apache Spark<\/a>,\u202fone typically needs to attach the libraries either to the cluster or the session, otherwise this happens:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"attachment-full  aligncenter\" src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2022\/08\/1.webp\" alt=\"A screenshot showing a ModuleNotFoundError\" width=\"715\" height=\"288\" \/><\/p>\n<p>There are a\u202f<a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/synapse-analytics\/spark\/apache-spark-manage-python-packages?ocid=AID3051534\" target=\"_blank\" rel=\"noopener\">number of ways to manage Python libraries<\/a>\u202fin Synapse Spark however a simple approach is to create a requirements file:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"attachment-full  aligncenter\" src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2022\/08\/2.webp\" alt=\"A screenshot of an example requirements file created in notepad.\" width=\"419\" height=\"237\" \/><\/p>\n<p>&#8230;and upload it to the spark pool:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"attachment-full  aligncenter\" src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2022\/08\/3.webp\" alt=\"An example of the upload function for adding the requirements file to the spark pool.\" width=\"722\" height=\"225\" \/><\/p>\n<p>Once you have opened\/imported the\u202f<a href=\"https:\/\/github.com\/hurtn\/purview\/blob\/master\/lineage.ipynb?ocid=AID3051534\" target=\"_blank\" rel=\"noopener\">sample notebook<\/a>\u202finto a Synapse Spark notebook, enter the Purview account and authentication details in cells 2 and 3. In summary, you\u2019ll need to define (and optionally create) both the source and target assets\/entities (using upload_entities) in cell 4, then in the following cell (5) create the relationship (lineage) between these inputs and outputs. If either the inputs or outputs don\u2019t exist at the time, then no relationship can be created. If either exist, such as the input asset, it is not affected by this operation.<\/p>\n<p>From a timing perspective, typically what may happen is that the input assets already exist in Purview, discovered via a scan, and a Spark job is going to make use of these to produce new assets or target outputs. For existing (scanned) assets, ensuring the fully qualified name is set correctly in the AtlasEntity section of the notebook (as shown below) avoids creating a duplicate asset. The qualified name can be found in the overview tab. Additionally, set the GUID which can be found in the URL when viewing the asset in the Purview UI. Alternatively this information can be obtained via the\u202f<a href=\"https:\/\/docs.microsoft.com\/en-us\/rest\/api\/purview\/catalogdataplane\/discovery\/query?tabs=HTTP?ocid=AID3051534\" target=\"_blank\" rel=\"noopener\">discovery_query API<\/a>\u202for the\u202f<a href=\"https:\/\/github.com\/wjohnson\/pyapacheatlas\/blob\/master\/samples\/CRUD\/read_entity_guid_or_name.py?ocid=AID3051534\" target=\"_blank\" rel=\"noopener\">get_entity<\/a>\u202fmethod which would make more sense if it is part of a scripted approach. Enter the entity name and type \u2014 for a full list of type names you can be obtained by using the\u202f<a href=\"https:\/\/docs.microsoft.com\/en-us\/rest\/api\/purview\/catalogdataplane\/types\/get-entity-definition-by-name?tabs=HTTP?ocid=AID3051534\" target=\"_blank\" rel=\"noopener\">GetEntityDefinition API<\/a>.<\/p>\n<p>Below is an image of the example input and output assets in the notebook. The input json file is going to be transformed by Spark into a set parquet files, which we know will be detected as a resource set. At this stage a scan has not been run on the input location, therefore we are using a new negative GUID to let Purview know this is a new asset.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"attachment-full  aligncenter\" src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2022\/08\/4.webp\" alt=\"An image of the example input and output assets in the notebook.\" width=\"668\" height=\"350\" \/><\/p>\n<p>As mentioned, the upload_entities call ensures that both the inputs and outputs are created in the Data Map so that a relationship can be formed between them. For assets that haven\u2019t been scanned and don\u2019t yet exist in the Data Map, it simply creates a \u201cplaceholder\u201d entity which is visible via the Purview UI. Then we can make a call to define the lineage artifact using the AtlasProcess class passing these input(s) and output(s) \u2014 see image below of cell 5. Make sure to specify a unique process qualified name (process_qn) for each new relationship otherwise you will end up overwriting an existing one with the same name, and existing lineage for the existing process will be lost! This means you may want to think about appending the process_qn with a unique GUID or task\/backlog item number. The process type name should be \u201cprocess\u201d unless you wish to create your own process type using the typedefs API. For reference\u202f<a href=\"https:\/\/github.com\/microsoft\/Purview-ADB-Lineage-Solution-Accelerator\/blob\/release\/2.0\/deployment\/infra\/Custom_Types.json?ocid=AID3051534\" target=\"_blank\" rel=\"noopener\">here is an example custom types definition<\/a>. The name of the process can be anything which describes your process. Finally, the upload_entities call creates this relationship, making the lineage visible in the Purview UI.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"attachment-full  aligncenter\" src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2022\/08\/5.webp\" alt=\"Example code showing the lineage has been created.\" width=\"550\" height=\"569\" \/><\/p>\n<p>Once you populate and run cells 1-5, you should see lineage between the assets. If not,\u202f<a href=\"https:\/\/www.youtube.com\/watch?v=p6uphdaFr2w\" target=\"_blank\" rel=\"noopener\">Hit Refresh!<\/a><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"attachment-full  aligncenter\" src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2022\/08\/6.webp\" alt=\"The lineage showing up in Azure\" width=\"662\" height=\"301\" \/><\/p>\n<p>One can add additional attributes such as a description and owner\/experts using their\u202fobject IDs from AAD. This will enable your data consumers to know who to contact if they have questions about the process. An example is shown below which defines whether the contact is an expert or owner, the AAD object ID and an info field, which can be any text string such an extension number for example.<\/p>\n<pre>process = AtlasProcess(name=\"Synapse Spark - process raw\",\nattributes={\"description\":\"Spark job to transform raw files into standized format\"},\ncontacts={\"Expert\":[{\"id\":\"aaaaaaa-0000-000a-aa00-0a000a0000a0\",\"info\":\"ext 3234\"}],\"Owner\":[{\"id\":\"aaaaaaa-0000-000a-aa00-0a000a0000a0\",\"info\":\"ext 2553\"}]},<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"attachment-full  aligncenter\" src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2022\/08\/7.webp\" alt=\"A screenshot showing Nick listed as both an expert and an owner.\" width=\"569\" height=\"517\" \/><\/p>\n<p>Now you have seen how to inject lineage programmatically, it&#8217;s time to think about how this could be included as a repeatable step in your business\u2019 data pipelines. Ideally you may want to convert these cells 1\u20135 into a library so that they can be called in a single function call, passing the required information as parameters. As part of a data pipeline, the engineer will most likely be referencing these (fully qualified) data asset paths for source and target, unless they are using mounts in which case these will need to be translated (ideally programmatically) to the full path otherwise one will end up with duplicate assets in the data map \u2014 (1) the injected asset and (2) the scanned asset.<\/p>\n<p>In reality you may have a number of source-to-target transformations, and often multiple source datasets are required to produce a single target dataset &#8211; this is more representative of a full analytics (ETL) pipeline. You will see an example of this in the last cell of the notebook. To achieve this, simply define multiple input sources (and possibly multiple output targets), and for each new target asset being produced, simply repeat the process of defining inputs\/outputs, AtlasProcess and making the upload_entities call. You may end up with something like this to represent a more realistic pipeline which depicts the standardisation of some data before joining them to produce a final target dataset.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"attachment-full size-full\" src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/industry\/blog\/wp-content\/uploads\/sites\/22\/2022\/08\/8.webp\" alt=\"A screenshot of an example pipeline.\" width=\"758\" height=\"106\" \/><\/p>\n<p>In Part 2, we take a look at <a href=\"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2022\/08\/24\/injecting-lineage-and-attributes-into-microsoft-purview-part-2?ocid=AID3051534\" target=\"_blank\" rel=\"noopener\">how you can inject attributes to enrich the metadata about your assets<\/a>.<\/p>\n<h3>Learn more<\/h3>\n<ul>\n<li><a href=\"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2022\/08\/24\/injecting-lineage-and-attributes-into-microsoft-purview-part-2?ocid=AID3051534\" target=\"_blank\" rel=\"noopener\">Injecting lineage and attributes into Microsoft Purview \u2013 Part 2<\/a><\/li>\n<li><a href=\"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2020\/08\/20\/secure-access-to-storage-azure-databricks-and-azure-data-lake-storage-gen2-patterns?ocid=AID3051534\" target=\"_blank\" rel=\"noopener\">Secure Access to Storage: Azure Databricks and Azure Data Lake Storage Gen2 Patterns<\/a><\/li>\n<li><a href=\"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2020\/08\/18\/just-in-time-azure-databricks-access-tokens-and-instance-pools-for-azure-data-factory-pipelines-using-workspace-automation?ocid=AID3051534\" target=\"_blank\" rel=\"noopener\">Just-in-time Azure Databricks access tokens and instance pools for Azure Data Factory pipelines using workspace automation<\/a><\/li>\n<li><a href=\"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2020\/07\/01\/securing-access-to-azure-data-lake-gen-2-from-azure-databricks?ocid=AID3051534\" target=\"_blank\" rel=\"noopener\">Configure access to Azure Data Lake Gen 2 from Azure Databricks<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>This blog post shows you how to inject metadata elements into your Purview catalog, also known as the Purview\u202fData Map.<\/p>\n","protected":false},"author":430,"featured_media":21801,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ep_exclude_from_search":false,"_classifai_error":"","_classifai_text_to_speech_error":"","footnotes":""},"categories":[594],"post_tag":[128,519],"content-type":[],"coauthors":[1197,1985],"class_list":["post-64268","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technetuk","tag-azure","tag-technet-uk"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Injecting lineage and attributes into Microsoft Purview \u2013 Part 1 - Microsoft Industry Blogs - United Kingdom<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2022\/08\/12\/injecting-lineage-and-attributes-into-microsoft-purview-part-1\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Injecting lineage and attributes into Microsoft Purview \u2013 Part 1 - Microsoft Industry Blogs - United Kingdom\" \/>\n<meta property=\"og:description\" content=\"This blog post shows you how to inject metadata elements into your Purview catalog, also known as the Purview\u202fData Map.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2022\/08\/12\/injecting-lineage-and-attributes-into-microsoft-purview-part-1\/\" \/>\n<meta property=\"og:site_name\" content=\"Microsoft Industry Blogs - United Kingdom\" \/>\n<meta property=\"article:published_time\" content=\"2022-08-12T18:38:26+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-02-24T14:59:17+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/01\/technetcloudpuzzlethumb.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"800\" \/>\n\t<meta property=\"og:image:height\" content=\"450\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Nicholas Hurt, Davinder Mundy\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Nicholas Hurt, Davinder Mundy\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 min read\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/technetuk\\\/2022\\\/08\\\/12\\\/injecting-lineage-and-attributes-into-microsoft-purview-part-1\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/technetuk\\\/2022\\\/08\\\/12\\\/injecting-lineage-and-attributes-into-microsoft-purview-part-1\\\/\"},\"author\":[{\"@id\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/author\\\/nicholas-hurt\\\/\",\"@type\":\"Person\",\"@name\":\"Nicholas Hurt\"},{\"@id\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/author\\\/davinder-mundy\\\/\",\"@type\":\"Person\",\"@name\":\"Davinder Mundy\"}],\"headline\":\"Injecting lineage and attributes into Microsoft Purview \u2013 Part 1\",\"datePublished\":\"2022-08-12T18:38:26+00:00\",\"dateModified\":\"2023-02-24T14:59:17+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/technetuk\\\/2022\\\/08\\\/12\\\/injecting-lineage-and-attributes-into-microsoft-purview-part-1\\\/\"},\"wordCount\":1489,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/technetuk\\\/2022\\\/08\\\/12\\\/injecting-lineage-and-attributes-into-microsoft-purview-part-1\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/22\\\/2020\\\/01\\\/technetcloudpuzzlethumb.jpg\",\"keywords\":[\"Azure\",\"TechNet UK\"],\"articleSection\":[\"TechNet UK\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/technetuk\\\/2022\\\/08\\\/12\\\/injecting-lineage-and-attributes-into-microsoft-purview-part-1\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/technetuk\\\/2022\\\/08\\\/12\\\/injecting-lineage-and-attributes-into-microsoft-purview-part-1\\\/\",\"url\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/technetuk\\\/2022\\\/08\\\/12\\\/injecting-lineage-and-attributes-into-microsoft-purview-part-1\\\/\",\"name\":\"Injecting lineage and attributes into Microsoft Purview \u2013 Part 1 - Microsoft Industry Blogs - United Kingdom\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/technetuk\\\/2022\\\/08\\\/12\\\/injecting-lineage-and-attributes-into-microsoft-purview-part-1\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/technetuk\\\/2022\\\/08\\\/12\\\/injecting-lineage-and-attributes-into-microsoft-purview-part-1\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/22\\\/2020\\\/01\\\/technetcloudpuzzlethumb.jpg\",\"datePublished\":\"2022-08-12T18:38:26+00:00\",\"dateModified\":\"2023-02-24T14:59:17+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/technetuk\\\/2022\\\/08\\\/12\\\/injecting-lineage-and-attributes-into-microsoft-purview-part-1\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/technetuk\\\/2022\\\/08\\\/12\\\/injecting-lineage-and-attributes-into-microsoft-purview-part-1\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/technetuk\\\/2022\\\/08\\\/12\\\/injecting-lineage-and-attributes-into-microsoft-purview-part-1\\\/#primaryimage\",\"url\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/22\\\/2020\\\/01\\\/technetcloudpuzzlethumb.jpg\",\"contentUrl\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/22\\\/2020\\\/01\\\/technetcloudpuzzlethumb.jpg\",\"width\":800,\"height\":450,\"caption\":\"An illustration of a cloud made of puzzle pieces, with a drawing of Bit the Raccoon to the right of the image.\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/technetuk\\\/2022\\\/08\\\/12\\\/injecting-lineage-and-attributes-into-microsoft-purview-part-1\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Injecting lineage and attributes into Microsoft Purview \u2013 Part 1\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/\",\"name\":\"Microsoft Industry Blogs - United Kingdom\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/#organization\",\"name\":\"Microsoft Industry Blogs - United Kingdom\",\"url\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/22\\\/2019\\\/08\\\/Microsoft-Logo.png\",\"contentUrl\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/22\\\/2019\\\/08\\\/Microsoft-Logo.png\",\"width\":259,\"height\":194,\"caption\":\"Microsoft Industry Blogs - United Kingdom\"},\"image\":{\"@id\":\"https:\\\/\\\/cm-edgetun.pages.dev\\\/en-gb\\\/industry\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Injecting lineage and attributes into Microsoft Purview \u2013 Part 1 - Microsoft Industry Blogs - United Kingdom","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2022\/08\/12\/injecting-lineage-and-attributes-into-microsoft-purview-part-1\/","og_locale":"en_US","og_type":"article","og_title":"Injecting lineage and attributes into Microsoft Purview \u2013 Part 1 - Microsoft Industry Blogs - United Kingdom","og_description":"This blog post shows you how to inject metadata elements into your Purview catalog, also known as the Purview\u202fData Map.","og_url":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2022\/08\/12\/injecting-lineage-and-attributes-into-microsoft-purview-part-1\/","og_site_name":"Microsoft Industry Blogs - United Kingdom","article_published_time":"2022-08-12T18:38:26+00:00","article_modified_time":"2023-02-24T14:59:17+00:00","og_image":[{"width":800,"height":450,"url":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/01\/technetcloudpuzzlethumb.jpg","type":"image\/jpeg"}],"author":"Nicholas Hurt, Davinder Mundy","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Nicholas Hurt, Davinder Mundy","Est. reading time":"6 min read"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2022\/08\/12\/injecting-lineage-and-attributes-into-microsoft-purview-part-1\/#article","isPartOf":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2022\/08\/12\/injecting-lineage-and-attributes-into-microsoft-purview-part-1\/"},"author":[{"@id":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/author\/nicholas-hurt\/","@type":"Person","@name":"Nicholas Hurt"},{"@id":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/author\/davinder-mundy\/","@type":"Person","@name":"Davinder Mundy"}],"headline":"Injecting lineage and attributes into Microsoft Purview \u2013 Part 1","datePublished":"2022-08-12T18:38:26+00:00","dateModified":"2023-02-24T14:59:17+00:00","mainEntityOfPage":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2022\/08\/12\/injecting-lineage-and-attributes-into-microsoft-purview-part-1\/"},"wordCount":1489,"commentCount":0,"publisher":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/#organization"},"image":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2022\/08\/12\/injecting-lineage-and-attributes-into-microsoft-purview-part-1\/#primaryimage"},"thumbnailUrl":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/01\/technetcloudpuzzlethumb.jpg","keywords":["Azure","TechNet UK"],"articleSection":["TechNet UK"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2022\/08\/12\/injecting-lineage-and-attributes-into-microsoft-purview-part-1\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2022\/08\/12\/injecting-lineage-and-attributes-into-microsoft-purview-part-1\/","url":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2022\/08\/12\/injecting-lineage-and-attributes-into-microsoft-purview-part-1\/","name":"Injecting lineage and attributes into Microsoft Purview \u2013 Part 1 - Microsoft Industry Blogs - United Kingdom","isPartOf":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2022\/08\/12\/injecting-lineage-and-attributes-into-microsoft-purview-part-1\/#primaryimage"},"image":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2022\/08\/12\/injecting-lineage-and-attributes-into-microsoft-purview-part-1\/#primaryimage"},"thumbnailUrl":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/01\/technetcloudpuzzlethumb.jpg","datePublished":"2022-08-12T18:38:26+00:00","dateModified":"2023-02-24T14:59:17+00:00","breadcrumb":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2022\/08\/12\/injecting-lineage-and-attributes-into-microsoft-purview-part-1\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2022\/08\/12\/injecting-lineage-and-attributes-into-microsoft-purview-part-1\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2022\/08\/12\/injecting-lineage-and-attributes-into-microsoft-purview-part-1\/#primaryimage","url":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/01\/technetcloudpuzzlethumb.jpg","contentUrl":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-content\/uploads\/sites\/22\/2020\/01\/technetcloudpuzzlethumb.jpg","width":800,"height":450,"caption":"An illustration of a cloud made of puzzle pieces, with a drawing of Bit the Raccoon to the right of the image."},{"@type":"BreadcrumbList","@id":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/technetuk\/2022\/08\/12\/injecting-lineage-and-attributes-into-microsoft-purview-part-1\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/"},{"@type":"ListItem","position":2,"name":"Injecting lineage and attributes into Microsoft Purview \u2013 Part 1"}]},{"@type":"WebSite","@id":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/#website","url":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/","name":"Microsoft Industry Blogs - United Kingdom","description":"","publisher":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/#organization","name":"Microsoft Industry Blogs - United Kingdom","url":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-content\/uploads\/sites\/22\/2019\/08\/Microsoft-Logo.png","contentUrl":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-content\/uploads\/sites\/22\/2019\/08\/Microsoft-Logo.png","width":259,"height":194,"caption":"Microsoft Industry Blogs - United Kingdom"},"image":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-json\/wp\/v2\/posts\/64268","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-json\/wp\/v2\/users\/430"}],"replies":[{"embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-json\/wp\/v2\/comments?post=64268"}],"version-history":[{"count":0,"href":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-json\/wp\/v2\/posts\/64268\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-json\/wp\/v2\/media\/21801"}],"wp:attachment":[{"href":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-json\/wp\/v2\/media?parent=64268"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-json\/wp\/v2\/categories?post=64268"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-json\/wp\/v2\/post_tag?post=64268"},{"taxonomy":"content-type","embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-json\/wp\/v2\/content-type?post=64268"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-gb\/industry\/blog\/wp-json\/wp\/v2\/coauthors?post=64268"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}