<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: How to build model lineage programmatically in a cohesive manner? in Data Governance</title>
    <link>https://community.databricks.com/t5/data-governance/how-to-build-model-lineage-programmatically-in-a-cohesive-manner/m-p/118023#M2470</link>
    <description>&lt;P&gt;&lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/156642"&gt;@rashij&lt;/a&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;You're tackling an important challenge in ML governance. Building a comprehensive lineage for models registered in Unity Catalog requires piecing together information from multiple APIs. Let me outline a more complete approach based on your identified elements.&lt;/P&gt;&lt;H2&gt;Available APIs for Model Lineage Tracking&lt;/H2&gt;&lt;P class=""&gt;To build comprehensive model lineage, you'll need to use a combination of:&lt;/P&gt;&lt;OL class=""&gt;&lt;LI&gt;&lt;STRONG&gt;Unity Catalog API&lt;/STRONG&gt; - Core lineage information&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;MLflow Tracking API&lt;/STRONG&gt; - Model creation details&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Workspace API&lt;/STRONG&gt; - Notebook and job information&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Delta Table History API&lt;/STRONG&gt; - Table modification history&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;DBFS API&lt;/STRONG&gt; - For artifact inspection&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;H2&gt;1. Starting with the Model&lt;/H2&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV class=""&gt;&lt;PRE&gt;&lt;SPAN&gt;&lt;SPAN class=""&gt;from&lt;/SPAN&gt; databricks&lt;SPAN class=""&gt;.&lt;/SPAN&gt;sdk &lt;SPAN class=""&gt;import&lt;/SPAN&gt; WorkspaceClient&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN class=""&gt;from&lt;/SPAN&gt; mlflow&lt;SPAN class=""&gt;.&lt;/SPAN&gt;tracking &lt;SPAN class=""&gt;import&lt;/SPAN&gt; MlflowClient&lt;/SPAN&gt;
&lt;SPAN&gt;&lt;SPAN class=""&gt;# Initialize clients&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;ws_client &lt;SPAN class=""&gt;=&lt;/SPAN&gt; WorkspaceClient&lt;SPAN class=""&gt;(&lt;/SPAN&gt;&lt;SPAN class=""&gt;)&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;mlflow_client &lt;SPAN class=""&gt;=&lt;/SPAN&gt; MlflowClient&lt;SPAN class=""&gt;(&lt;/SPAN&gt;&lt;SPAN class=""&gt;)&lt;/SPAN&gt;
&lt;/SPAN&gt;
&lt;SPAN&gt;&lt;SPAN class=""&gt;# Get model info from Unity Catalog&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;model_info &lt;SPAN class=""&gt;=&lt;/SPAN&gt; ws_client&lt;SPAN class=""&gt;.&lt;/SPAN&gt;catalog_models&lt;SPAN class=""&gt;.&lt;/SPAN&gt;get&lt;SPAN class=""&gt;(&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;    name&lt;SPAN class=""&gt;=&lt;/SPAN&gt;&lt;SPAN class=""&gt;"catalog.schema.model_name"&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN class=""&gt;)&lt;/SPAN&gt;
&lt;/SPAN&gt;
&lt;SPAN&gt;&lt;SPAN class=""&gt;# Get latest version details&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;model_version &lt;SPAN class=""&gt;=&lt;/SPAN&gt; mlflow_client&lt;SPAN class=""&gt;.&lt;/SPAN&gt;get_model_version&lt;SPAN class=""&gt;(&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;    name&lt;SPAN class=""&gt;=&lt;/SPAN&gt;&lt;SPAN class=""&gt;f"&lt;/SPAN&gt;&lt;SPAN class=""&gt;{&lt;/SPAN&gt;&lt;SPAN class=""&gt;model_info&lt;/SPAN&gt;&lt;SPAN class=""&gt;.&lt;/SPAN&gt;&lt;SPAN class=""&gt;catalog_name&lt;/SPAN&gt;&lt;SPAN class=""&gt;}&lt;/SPAN&gt;&lt;SPAN class=""&gt;.&lt;/SPAN&gt;&lt;SPAN class=""&gt;{&lt;/SPAN&gt;&lt;SPAN class=""&gt;model_info&lt;/SPAN&gt;&lt;SPAN class=""&gt;.&lt;/SPAN&gt;&lt;SPAN class=""&gt;schema_name&lt;/SPAN&gt;&lt;SPAN class=""&gt;}&lt;/SPAN&gt;&lt;SPAN class=""&gt;.&lt;/SPAN&gt;&lt;SPAN class=""&gt;{&lt;/SPAN&gt;&lt;SPAN class=""&gt;model_info&lt;/SPAN&gt;&lt;SPAN class=""&gt;.&lt;/SPAN&gt;&lt;SPAN class=""&gt;name&lt;/SPAN&gt;&lt;SPAN class=""&gt;}&lt;/SPAN&gt;&lt;SPAN class=""&gt;"&lt;/SPAN&gt;&lt;SPAN class=""&gt;,&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;    version&lt;SPAN class=""&gt;=&lt;/SPAN&gt;&lt;SPAN class=""&gt;"latest"&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN class=""&gt;)&lt;/SPAN&gt;
&lt;/SPAN&gt;
&lt;SPAN&gt;&lt;SPAN class=""&gt;# Get the run info&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;run &lt;SPAN class=""&gt;=&lt;/SPAN&gt; mlflow_client&lt;SPAN class=""&gt;.&lt;/SPAN&gt;get_run&lt;SPAN class=""&gt;(&lt;/SPAN&gt;model_version&lt;SPAN class=""&gt;.&lt;/SPAN&gt;run_id&lt;SPAN class=""&gt;)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;H2&gt;2. Extract Notebook Information&lt;/H2&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class=""&gt;&lt;PRE&gt;&lt;SPAN&gt;&lt;SPAN class=""&gt;# Extract notebook path from tags&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;notebook_path &lt;SPAN class=""&gt;=&lt;/SPAN&gt; run&lt;SPAN class=""&gt;.&lt;/SPAN&gt;data&lt;SPAN class=""&gt;.&lt;/SPAN&gt;tags&lt;SPAN class=""&gt;.&lt;/SPAN&gt;get&lt;SPAN class=""&gt;(&lt;/SPAN&gt;&lt;SPAN class=""&gt;"mlflow.source.name"&lt;/SPAN&gt;&lt;SPAN class=""&gt;)&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;notebook_id &lt;SPAN class=""&gt;=&lt;/SPAN&gt; run&lt;SPAN class=""&gt;.&lt;/SPAN&gt;data&lt;SPAN class=""&gt;.&lt;/SPAN&gt;tags&lt;SPAN class=""&gt;.&lt;/SPAN&gt;get&lt;SPAN class=""&gt;(&lt;/SPAN&gt;&lt;SPAN class=""&gt;"mlflow.databricks.notebookID"&lt;/SPAN&gt;&lt;SPAN class=""&gt;)&lt;/SPAN&gt;
&lt;/SPAN&gt;
&lt;SPAN&gt;&lt;SPAN class=""&gt;# Get notebook revision history&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN class=""&gt;if&lt;/SPAN&gt; notebook_id&lt;SPAN class=""&gt;:&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;    notebook_revisions &lt;SPAN class=""&gt;=&lt;/SPAN&gt; ws_client&lt;SPAN class=""&gt;.&lt;/SPAN&gt;workspace&lt;SPAN class=""&gt;.&lt;/SPAN&gt;get_revision_history&lt;SPAN class=""&gt;(&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;        path&lt;SPAN class=""&gt;=&lt;/SPAN&gt;notebook_path&lt;/SPAN&gt;&lt;SPAN&gt;    &lt;SPAN class=""&gt;)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;H2&gt;3. Extract Table Lineage&lt;/H2&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class=""&gt;&lt;PRE&gt;&lt;SPAN&gt;&lt;SPAN class=""&gt;# Direct lineage API approach&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN class=""&gt;for&lt;/SPAN&gt; artifact &lt;SPAN class=""&gt;in&lt;/SPAN&gt; mlflow_client&lt;SPAN class=""&gt;.&lt;/SPAN&gt;list_artifacts&lt;SPAN class=""&gt;(&lt;/SPAN&gt;run_id&lt;SPAN class=""&gt;=&lt;/SPAN&gt;run&lt;SPAN class=""&gt;.&lt;/SPAN&gt;info&lt;SPAN class=""&gt;.&lt;/SPAN&gt;run_id&lt;SPAN class=""&gt;)&lt;/SPAN&gt;&lt;SPAN class=""&gt;:&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;    &lt;SPAN class=""&gt;if&lt;/SPAN&gt; artifact&lt;SPAN class=""&gt;.&lt;/SPAN&gt;path &lt;SPAN class=""&gt;==&lt;/SPAN&gt; &lt;SPAN class=""&gt;"feature_spec.yaml"&lt;/SPAN&gt;&lt;SPAN class=""&gt;:&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;        &lt;SPAN class=""&gt;# Download and parse feature_spec to get table references&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;        feature_spec &lt;SPAN class=""&gt;=&lt;/SPAN&gt; download_and_parse_feature_spec&lt;SPAN class=""&gt;(&lt;/SPAN&gt;run&lt;SPAN class=""&gt;.&lt;/SPAN&gt;info&lt;SPAN class=""&gt;.&lt;/SPAN&gt;run_id&lt;SPAN class=""&gt;,&lt;/SPAN&gt; artifact&lt;SPAN class=""&gt;.&lt;/SPAN&gt;path&lt;SPAN class=""&gt;)&lt;/SPAN&gt;
&lt;/SPAN&gt;        
&lt;SPAN&gt;&lt;SPAN class=""&gt;# For tables mentioned in the feature_spec&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN class=""&gt;for&lt;/SPAN&gt; table &lt;SPAN class=""&gt;in&lt;/SPAN&gt; feature_tables&lt;SPAN class=""&gt;:&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;    &lt;SPAN class=""&gt;# Get upstream and downstream lineage&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;    table_lineage &lt;SPAN class=""&gt;=&lt;/SPAN&gt; ws_client&lt;SPAN class=""&gt;.&lt;/SPAN&gt;tables&lt;SPAN class=""&gt;.&lt;/SPAN&gt;get_lineage&lt;SPAN class=""&gt;(&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;        table_name&lt;SPAN class=""&gt;=&lt;/SPAN&gt;table&lt;/SPAN&gt;&lt;SPAN&gt;    &lt;SPAN class=""&gt;)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;H2&gt;4. Extract Function Usage&lt;/H2&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class=""&gt;&lt;PRE&gt;&lt;SPAN&gt;&lt;SPAN class=""&gt;# For custom functions, query Unity Catalog functions&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;functions &lt;SPAN class=""&gt;=&lt;/SPAN&gt; &lt;SPAN class=""&gt;[&lt;/SPAN&gt;&lt;SPAN class=""&gt;]&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN class=""&gt;for&lt;/SPAN&gt; func_name &lt;SPAN class=""&gt;in&lt;/SPAN&gt; extracted_function_names&lt;SPAN class=""&gt;:&lt;/SPAN&gt;  &lt;SPAN class=""&gt;# From feature_spec or notebook analysis&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;    &lt;SPAN class=""&gt;try&lt;/SPAN&gt;&lt;SPAN class=""&gt;:&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;        func_info &lt;SPAN class=""&gt;=&lt;/SPAN&gt; ws_client&lt;SPAN class=""&gt;.&lt;/SPAN&gt;catalog_functions&lt;SPAN class=""&gt;.&lt;/SPAN&gt;get&lt;SPAN class=""&gt;(&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;            name&lt;SPAN class=""&gt;=&lt;/SPAN&gt;func_name&lt;/SPAN&gt;&lt;SPAN&gt;        &lt;SPAN class=""&gt;)&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;        functions&lt;SPAN class=""&gt;.&lt;/SPAN&gt;append&lt;SPAN class=""&gt;(&lt;/SPAN&gt;func_info&lt;SPAN class=""&gt;)&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;    &lt;SPAN class=""&gt;except&lt;/SPAN&gt;&lt;SPAN class=""&gt;:&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;        &lt;SPAN class=""&gt;pass&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;H2&gt;5. Extract Workflow/Job Information&lt;/H2&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class=""&gt;&lt;PRE&gt;&lt;SPAN&gt;&lt;SPAN class=""&gt;# From run tags, extract job ID if available&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;job_id &lt;SPAN class=""&gt;=&lt;/SPAN&gt; run&lt;SPAN class=""&gt;.&lt;/SPAN&gt;data&lt;SPAN class=""&gt;.&lt;/SPAN&gt;tags&lt;SPAN class=""&gt;.&lt;/SPAN&gt;get&lt;SPAN class=""&gt;(&lt;/SPAN&gt;&lt;SPAN class=""&gt;"mlflow.databricks.jobID"&lt;/SPAN&gt;&lt;SPAN class=""&gt;)&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;run_id &lt;SPAN class=""&gt;=&lt;/SPAN&gt; run&lt;SPAN class=""&gt;.&lt;/SPAN&gt;data&lt;SPAN class=""&gt;.&lt;/SPAN&gt;tags&lt;SPAN class=""&gt;.&lt;/SPAN&gt;get&lt;SPAN class=""&gt;(&lt;/SPAN&gt;&lt;SPAN class=""&gt;"mlflow.databricks.jobRunID"&lt;/SPAN&gt;&lt;SPAN class=""&gt;)&lt;/SPAN&gt;
&lt;/SPAN&gt;
&lt;SPAN&gt;&lt;SPAN class=""&gt;if&lt;/SPAN&gt; job_id&lt;SPAN class=""&gt;:&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;    &lt;SPAN class=""&gt;# Get job details&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;    job_info &lt;SPAN class=""&gt;=&lt;/SPAN&gt; ws_client&lt;SPAN class=""&gt;.&lt;/SPAN&gt;jobs&lt;SPAN class=""&gt;.&lt;/SPAN&gt;get&lt;SPAN class=""&gt;(&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;        job_id&lt;SPAN class=""&gt;=&lt;/SPAN&gt;job_id&lt;/SPAN&gt;&lt;SPAN&gt;    &lt;SPAN class=""&gt;)&lt;/SPAN&gt;
&lt;/SPAN&gt;    
&lt;SPAN&gt;    &lt;SPAN class=""&gt;# Get specific run details&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;    &lt;SPAN class=""&gt;if&lt;/SPAN&gt; run_id&lt;SPAN class=""&gt;:&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;        job_run &lt;SPAN class=""&gt;=&lt;/SPAN&gt; ws_client&lt;SPAN class=""&gt;.&lt;/SPAN&gt;jobs&lt;SPAN class=""&gt;.&lt;/SPAN&gt;get_run&lt;SPAN class=""&gt;(&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;            run_id&lt;SPAN class=""&gt;=&lt;/SPAN&gt;run_id&lt;/SPAN&gt;&lt;SPAN&gt;        &lt;SPAN class=""&gt;)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;</description>
    <pubDate>Wed, 07 May 2025 01:57:40 GMT</pubDate>
    <dc:creator>lingareddy_Alva</dc:creator>
    <dc:date>2025-05-07T01:57:40Z</dc:date>
    <item>
      <title>How to build model lineage programmatically in a cohesive manner?</title>
      <link>https://community.databricks.com/t5/data-governance/how-to-build-model-lineage-programmatically-in-a-cohesive-manner/m-p/117618#M2468</link>
      <description>&lt;P&gt;If a model is registered in Unity Catalog, then what all APIs and SDKs could be used to build the entire lineage for a model? I'm trying to figure out what all do I query to ensure I don't miss any element of the model lineage.&lt;BR /&gt;Now a model can have below elements in upstream:&lt;BR /&gt;1. Table/feature table/ Delta table&lt;BR /&gt;2. Functions&lt;BR /&gt;3. Notebooks&lt;BR /&gt;4. Workflows/Jobs&lt;BR /&gt;&lt;BR /&gt;So far I've been able to gather these entry points to build the lineage:&lt;BR /&gt;1. Figure out notebook from the tags present in run info&lt;BR /&gt;2. If a feature table is used, and the model is logged (`log_model`) along with an artifact, then the feature_spec.yaml at least contains the feature tables &amp;amp; functions used. But if the artifact is not logged, then I do not see a way to get even these details.&lt;BR /&gt;3. Table lineage can still be figured via lineage tracking API but I'll need to go over every table. Is there a more efficient way to backtrack tables/functions from model or notebook rather?&lt;BR /&gt;4. Couldn't find on how to get lineage for functions/workflows at all.&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;</description>
      <pubDate>Sat, 03 May 2025 19:33:46 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-governance/how-to-build-model-lineage-programmatically-in-a-cohesive-manner/m-p/117618#M2468</guid>
      <dc:creator>rashij</dc:creator>
      <dc:date>2025-05-03T19:33:46Z</dc:date>
    </item>
    <item>
      <title>Re: How to build model lineage programmatically in a cohesive manner?</title>
      <link>https://community.databricks.com/t5/data-governance/how-to-build-model-lineage-programmatically-in-a-cohesive-manner/m-p/118023#M2470</link>
      <description>&lt;P&gt;&lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/156642"&gt;@rashij&lt;/a&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;You're tackling an important challenge in ML governance. Building a comprehensive lineage for models registered in Unity Catalog requires piecing together information from multiple APIs. Let me outline a more complete approach based on your identified elements.&lt;/P&gt;&lt;H2&gt;Available APIs for Model Lineage Tracking&lt;/H2&gt;&lt;P class=""&gt;To build comprehensive model lineage, you'll need to use a combination of:&lt;/P&gt;&lt;OL class=""&gt;&lt;LI&gt;&lt;STRONG&gt;Unity Catalog API&lt;/STRONG&gt; - Core lineage information&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;MLflow Tracking API&lt;/STRONG&gt; - Model creation details&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Workspace API&lt;/STRONG&gt; - Notebook and job information&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Delta Table History API&lt;/STRONG&gt; - Table modification history&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;DBFS API&lt;/STRONG&gt; - For artifact inspection&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;H2&gt;1. Starting with the Model&lt;/H2&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV class=""&gt;&lt;PRE&gt;&lt;SPAN&gt;&lt;SPAN class=""&gt;from&lt;/SPAN&gt; databricks&lt;SPAN class=""&gt;.&lt;/SPAN&gt;sdk &lt;SPAN class=""&gt;import&lt;/SPAN&gt; WorkspaceClient&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN class=""&gt;from&lt;/SPAN&gt; mlflow&lt;SPAN class=""&gt;.&lt;/SPAN&gt;tracking &lt;SPAN class=""&gt;import&lt;/SPAN&gt; MlflowClient&lt;/SPAN&gt;
&lt;SPAN&gt;&lt;SPAN class=""&gt;# Initialize clients&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;ws_client &lt;SPAN class=""&gt;=&lt;/SPAN&gt; WorkspaceClient&lt;SPAN class=""&gt;(&lt;/SPAN&gt;&lt;SPAN class=""&gt;)&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;mlflow_client &lt;SPAN class=""&gt;=&lt;/SPAN&gt; MlflowClient&lt;SPAN class=""&gt;(&lt;/SPAN&gt;&lt;SPAN class=""&gt;)&lt;/SPAN&gt;
&lt;/SPAN&gt;
&lt;SPAN&gt;&lt;SPAN class=""&gt;# Get model info from Unity Catalog&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;model_info &lt;SPAN class=""&gt;=&lt;/SPAN&gt; ws_client&lt;SPAN class=""&gt;.&lt;/SPAN&gt;catalog_models&lt;SPAN class=""&gt;.&lt;/SPAN&gt;get&lt;SPAN class=""&gt;(&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;    name&lt;SPAN class=""&gt;=&lt;/SPAN&gt;&lt;SPAN class=""&gt;"catalog.schema.model_name"&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN class=""&gt;)&lt;/SPAN&gt;
&lt;/SPAN&gt;
&lt;SPAN&gt;&lt;SPAN class=""&gt;# Get latest version details&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;model_version &lt;SPAN class=""&gt;=&lt;/SPAN&gt; mlflow_client&lt;SPAN class=""&gt;.&lt;/SPAN&gt;get_model_version&lt;SPAN class=""&gt;(&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;    name&lt;SPAN class=""&gt;=&lt;/SPAN&gt;&lt;SPAN class=""&gt;f"&lt;/SPAN&gt;&lt;SPAN class=""&gt;{&lt;/SPAN&gt;&lt;SPAN class=""&gt;model_info&lt;/SPAN&gt;&lt;SPAN class=""&gt;.&lt;/SPAN&gt;&lt;SPAN class=""&gt;catalog_name&lt;/SPAN&gt;&lt;SPAN class=""&gt;}&lt;/SPAN&gt;&lt;SPAN class=""&gt;.&lt;/SPAN&gt;&lt;SPAN class=""&gt;{&lt;/SPAN&gt;&lt;SPAN class=""&gt;model_info&lt;/SPAN&gt;&lt;SPAN class=""&gt;.&lt;/SPAN&gt;&lt;SPAN class=""&gt;schema_name&lt;/SPAN&gt;&lt;SPAN class=""&gt;}&lt;/SPAN&gt;&lt;SPAN class=""&gt;.&lt;/SPAN&gt;&lt;SPAN class=""&gt;{&lt;/SPAN&gt;&lt;SPAN class=""&gt;model_info&lt;/SPAN&gt;&lt;SPAN class=""&gt;.&lt;/SPAN&gt;&lt;SPAN class=""&gt;name&lt;/SPAN&gt;&lt;SPAN class=""&gt;}&lt;/SPAN&gt;&lt;SPAN class=""&gt;"&lt;/SPAN&gt;&lt;SPAN class=""&gt;,&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;    version&lt;SPAN class=""&gt;=&lt;/SPAN&gt;&lt;SPAN class=""&gt;"latest"&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN class=""&gt;)&lt;/SPAN&gt;
&lt;/SPAN&gt;
&lt;SPAN&gt;&lt;SPAN class=""&gt;# Get the run info&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;run &lt;SPAN class=""&gt;=&lt;/SPAN&gt; mlflow_client&lt;SPAN class=""&gt;.&lt;/SPAN&gt;get_run&lt;SPAN class=""&gt;(&lt;/SPAN&gt;model_version&lt;SPAN class=""&gt;.&lt;/SPAN&gt;run_id&lt;SPAN class=""&gt;)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;H2&gt;2. Extract Notebook Information&lt;/H2&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class=""&gt;&lt;PRE&gt;&lt;SPAN&gt;&lt;SPAN class=""&gt;# Extract notebook path from tags&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;notebook_path &lt;SPAN class=""&gt;=&lt;/SPAN&gt; run&lt;SPAN class=""&gt;.&lt;/SPAN&gt;data&lt;SPAN class=""&gt;.&lt;/SPAN&gt;tags&lt;SPAN class=""&gt;.&lt;/SPAN&gt;get&lt;SPAN class=""&gt;(&lt;/SPAN&gt;&lt;SPAN class=""&gt;"mlflow.source.name"&lt;/SPAN&gt;&lt;SPAN class=""&gt;)&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;notebook_id &lt;SPAN class=""&gt;=&lt;/SPAN&gt; run&lt;SPAN class=""&gt;.&lt;/SPAN&gt;data&lt;SPAN class=""&gt;.&lt;/SPAN&gt;tags&lt;SPAN class=""&gt;.&lt;/SPAN&gt;get&lt;SPAN class=""&gt;(&lt;/SPAN&gt;&lt;SPAN class=""&gt;"mlflow.databricks.notebookID"&lt;/SPAN&gt;&lt;SPAN class=""&gt;)&lt;/SPAN&gt;
&lt;/SPAN&gt;
&lt;SPAN&gt;&lt;SPAN class=""&gt;# Get notebook revision history&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN class=""&gt;if&lt;/SPAN&gt; notebook_id&lt;SPAN class=""&gt;:&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;    notebook_revisions &lt;SPAN class=""&gt;=&lt;/SPAN&gt; ws_client&lt;SPAN class=""&gt;.&lt;/SPAN&gt;workspace&lt;SPAN class=""&gt;.&lt;/SPAN&gt;get_revision_history&lt;SPAN class=""&gt;(&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;        path&lt;SPAN class=""&gt;=&lt;/SPAN&gt;notebook_path&lt;/SPAN&gt;&lt;SPAN&gt;    &lt;SPAN class=""&gt;)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;H2&gt;3. Extract Table Lineage&lt;/H2&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class=""&gt;&lt;PRE&gt;&lt;SPAN&gt;&lt;SPAN class=""&gt;# Direct lineage API approach&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN class=""&gt;for&lt;/SPAN&gt; artifact &lt;SPAN class=""&gt;in&lt;/SPAN&gt; mlflow_client&lt;SPAN class=""&gt;.&lt;/SPAN&gt;list_artifacts&lt;SPAN class=""&gt;(&lt;/SPAN&gt;run_id&lt;SPAN class=""&gt;=&lt;/SPAN&gt;run&lt;SPAN class=""&gt;.&lt;/SPAN&gt;info&lt;SPAN class=""&gt;.&lt;/SPAN&gt;run_id&lt;SPAN class=""&gt;)&lt;/SPAN&gt;&lt;SPAN class=""&gt;:&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;    &lt;SPAN class=""&gt;if&lt;/SPAN&gt; artifact&lt;SPAN class=""&gt;.&lt;/SPAN&gt;path &lt;SPAN class=""&gt;==&lt;/SPAN&gt; &lt;SPAN class=""&gt;"feature_spec.yaml"&lt;/SPAN&gt;&lt;SPAN class=""&gt;:&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;        &lt;SPAN class=""&gt;# Download and parse feature_spec to get table references&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;        feature_spec &lt;SPAN class=""&gt;=&lt;/SPAN&gt; download_and_parse_feature_spec&lt;SPAN class=""&gt;(&lt;/SPAN&gt;run&lt;SPAN class=""&gt;.&lt;/SPAN&gt;info&lt;SPAN class=""&gt;.&lt;/SPAN&gt;run_id&lt;SPAN class=""&gt;,&lt;/SPAN&gt; artifact&lt;SPAN class=""&gt;.&lt;/SPAN&gt;path&lt;SPAN class=""&gt;)&lt;/SPAN&gt;
&lt;/SPAN&gt;        
&lt;SPAN&gt;&lt;SPAN class=""&gt;# For tables mentioned in the feature_spec&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN class=""&gt;for&lt;/SPAN&gt; table &lt;SPAN class=""&gt;in&lt;/SPAN&gt; feature_tables&lt;SPAN class=""&gt;:&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;    &lt;SPAN class=""&gt;# Get upstream and downstream lineage&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;    table_lineage &lt;SPAN class=""&gt;=&lt;/SPAN&gt; ws_client&lt;SPAN class=""&gt;.&lt;/SPAN&gt;tables&lt;SPAN class=""&gt;.&lt;/SPAN&gt;get_lineage&lt;SPAN class=""&gt;(&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;        table_name&lt;SPAN class=""&gt;=&lt;/SPAN&gt;table&lt;/SPAN&gt;&lt;SPAN&gt;    &lt;SPAN class=""&gt;)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;H2&gt;4. Extract Function Usage&lt;/H2&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class=""&gt;&lt;PRE&gt;&lt;SPAN&gt;&lt;SPAN class=""&gt;# For custom functions, query Unity Catalog functions&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;functions &lt;SPAN class=""&gt;=&lt;/SPAN&gt; &lt;SPAN class=""&gt;[&lt;/SPAN&gt;&lt;SPAN class=""&gt;]&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN class=""&gt;for&lt;/SPAN&gt; func_name &lt;SPAN class=""&gt;in&lt;/SPAN&gt; extracted_function_names&lt;SPAN class=""&gt;:&lt;/SPAN&gt;  &lt;SPAN class=""&gt;# From feature_spec or notebook analysis&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;    &lt;SPAN class=""&gt;try&lt;/SPAN&gt;&lt;SPAN class=""&gt;:&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;        func_info &lt;SPAN class=""&gt;=&lt;/SPAN&gt; ws_client&lt;SPAN class=""&gt;.&lt;/SPAN&gt;catalog_functions&lt;SPAN class=""&gt;.&lt;/SPAN&gt;get&lt;SPAN class=""&gt;(&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;            name&lt;SPAN class=""&gt;=&lt;/SPAN&gt;func_name&lt;/SPAN&gt;&lt;SPAN&gt;        &lt;SPAN class=""&gt;)&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;        functions&lt;SPAN class=""&gt;.&lt;/SPAN&gt;append&lt;SPAN class=""&gt;(&lt;/SPAN&gt;func_info&lt;SPAN class=""&gt;)&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;    &lt;SPAN class=""&gt;except&lt;/SPAN&gt;&lt;SPAN class=""&gt;:&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;        &lt;SPAN class=""&gt;pass&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;H2&gt;5. Extract Workflow/Job Information&lt;/H2&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class=""&gt;&lt;PRE&gt;&lt;SPAN&gt;&lt;SPAN class=""&gt;# From run tags, extract job ID if available&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;job_id &lt;SPAN class=""&gt;=&lt;/SPAN&gt; run&lt;SPAN class=""&gt;.&lt;/SPAN&gt;data&lt;SPAN class=""&gt;.&lt;/SPAN&gt;tags&lt;SPAN class=""&gt;.&lt;/SPAN&gt;get&lt;SPAN class=""&gt;(&lt;/SPAN&gt;&lt;SPAN class=""&gt;"mlflow.databricks.jobID"&lt;/SPAN&gt;&lt;SPAN class=""&gt;)&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;run_id &lt;SPAN class=""&gt;=&lt;/SPAN&gt; run&lt;SPAN class=""&gt;.&lt;/SPAN&gt;data&lt;SPAN class=""&gt;.&lt;/SPAN&gt;tags&lt;SPAN class=""&gt;.&lt;/SPAN&gt;get&lt;SPAN class=""&gt;(&lt;/SPAN&gt;&lt;SPAN class=""&gt;"mlflow.databricks.jobRunID"&lt;/SPAN&gt;&lt;SPAN class=""&gt;)&lt;/SPAN&gt;
&lt;/SPAN&gt;
&lt;SPAN&gt;&lt;SPAN class=""&gt;if&lt;/SPAN&gt; job_id&lt;SPAN class=""&gt;:&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;    &lt;SPAN class=""&gt;# Get job details&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;    job_info &lt;SPAN class=""&gt;=&lt;/SPAN&gt; ws_client&lt;SPAN class=""&gt;.&lt;/SPAN&gt;jobs&lt;SPAN class=""&gt;.&lt;/SPAN&gt;get&lt;SPAN class=""&gt;(&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;        job_id&lt;SPAN class=""&gt;=&lt;/SPAN&gt;job_id&lt;/SPAN&gt;&lt;SPAN&gt;    &lt;SPAN class=""&gt;)&lt;/SPAN&gt;
&lt;/SPAN&gt;    
&lt;SPAN&gt;    &lt;SPAN class=""&gt;# Get specific run details&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;    &lt;SPAN class=""&gt;if&lt;/SPAN&gt; run_id&lt;SPAN class=""&gt;:&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;        job_run &lt;SPAN class=""&gt;=&lt;/SPAN&gt; ws_client&lt;SPAN class=""&gt;.&lt;/SPAN&gt;jobs&lt;SPAN class=""&gt;.&lt;/SPAN&gt;get_run&lt;SPAN class=""&gt;(&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;            run_id&lt;SPAN class=""&gt;=&lt;/SPAN&gt;run_id&lt;/SPAN&gt;&lt;SPAN&gt;        &lt;SPAN class=""&gt;)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;</description>
      <pubDate>Wed, 07 May 2025 01:57:40 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-governance/how-to-build-model-lineage-programmatically-in-a-cohesive-manner/m-p/118023#M2470</guid>
      <dc:creator>lingareddy_Alva</dc:creator>
      <dc:date>2025-05-07T01:57:40Z</dc:date>
    </item>
    <item>
      <title>Re: How to build model lineage programmatically in a cohesive manner?</title>
      <link>https://community.databricks.com/t5/data-governance/how-to-build-model-lineage-programmatically-in-a-cohesive-manner/m-p/118378#M2471</link>
      <description>&lt;P&gt;Hey&amp;nbsp;&lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/24053"&gt;@lingareddy_Alva&lt;/a&gt;&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;Thank you on that detailed information.&lt;BR /&gt;So I was trying something similar and kinda stuck on this download artifact which keeps failing for me. Do you see anything wrong in this path because it keeps giving "No such file exists" with PAT auth-type. I clearly have access to that file on UI and can very much download from UI. Are there more privileges needed on the token?&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;LI-CODE lang="python"&gt;dbfs_file_path = "/dbfs/databricks/mlflow-tracking/&amp;lt;notebook_id&amp;gt;/&amp;lt;run_id&amp;gt;/artifacts/is_close_model_artifact/data/feature_store/feature_spec.yaml"

resp = ws_client.dbfs.read(dbfs_file_path)
print(f"file data... {resp.data}")&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 08 May 2025 04:54:16 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-governance/how-to-build-model-lineage-programmatically-in-a-cohesive-manner/m-p/118378#M2471</guid>
      <dc:creator>rashij</dc:creator>
      <dc:date>2025-05-08T04:54:16Z</dc:date>
    </item>
    <item>
      <title>Re: How to build model lineage programmatically in a cohesive manner?</title>
      <link>https://community.databricks.com/t5/data-governance/how-to-build-model-lineage-programmatically-in-a-cohesive-manner/m-p/118379#M2472</link>
      <description>&lt;P&gt;try this&lt;/P&gt;&lt;P&gt;Here's how to correctly access your feature spec file:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class=""&gt;&lt;PRE&gt;&lt;SPAN&gt;&lt;SPAN class=""&gt;from&lt;/SPAN&gt; databricks&lt;SPAN class=""&gt;.&lt;/SPAN&gt;sdk &lt;SPAN class=""&gt;import&lt;/SPAN&gt; WorkspaceClient&lt;/SPAN&gt;
&lt;SPAN&gt;&lt;SPAN class=""&gt;# Initialize the client&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;ws_client &lt;SPAN class=""&gt;=&lt;/SPAN&gt; WorkspaceClient&lt;SPAN class=""&gt;(&lt;/SPAN&gt;&lt;SPAN class=""&gt;)&lt;/SPAN&gt;
&lt;/SPAN&gt;
&lt;SPAN&gt;&lt;SPAN class=""&gt;# Correct path format - remove the /dbfs prefix&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;dbfs_file_path &lt;SPAN class=""&gt;=&lt;/SPAN&gt; &lt;SPAN class=""&gt;"databricks/mlflow-tracking/&amp;lt;notebook_id&amp;gt;/&amp;lt;run_id&amp;gt;/artifacts/is_close_model_artifact/data/feature_store/feature_spec.yaml"&lt;/SPAN&gt;
&lt;/SPAN&gt;
&lt;SPAN&gt;&lt;SPAN class=""&gt;try&lt;/SPAN&gt;&lt;SPAN class=""&gt;:&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;    &lt;SPAN class=""&gt;# Read the file&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;    resp &lt;SPAN class=""&gt;=&lt;/SPAN&gt; ws_client&lt;SPAN class=""&gt;.&lt;/SPAN&gt;dbfs&lt;SPAN class=""&gt;.&lt;/SPAN&gt;read&lt;SPAN class=""&gt;(&lt;/SPAN&gt;dbfs_file_path&lt;SPAN class=""&gt;)&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;    &lt;SPAN class=""&gt;print&lt;/SPAN&gt;&lt;SPAN class=""&gt;(&lt;/SPAN&gt;&lt;SPAN class=""&gt;f"File data: &lt;/SPAN&gt;&lt;SPAN class=""&gt;{&lt;/SPAN&gt;&lt;SPAN class=""&gt;resp&lt;/SPAN&gt;&lt;SPAN class=""&gt;.&lt;/SPAN&gt;&lt;SPAN class=""&gt;data&lt;/SPAN&gt;&lt;SPAN class=""&gt;}&lt;/SPAN&gt;&lt;SPAN class=""&gt;"&lt;/SPAN&gt;&lt;SPAN class=""&gt;)&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN class=""&gt;except&lt;/SPAN&gt; Exception &lt;SPAN class=""&gt;as&lt;/SPAN&gt; e&lt;SPAN class=""&gt;:&lt;/SPAN&gt;
&lt;/SPAN&gt;&lt;SPAN&gt;    &lt;SPAN class=""&gt;print&lt;/SPAN&gt;&lt;SPAN class=""&gt;(&lt;/SPAN&gt;&lt;SPAN class=""&gt;f"Error: &lt;/SPAN&gt;&lt;SPAN class=""&gt;{&lt;/SPAN&gt;&lt;SPAN class=""&gt;e&lt;/SPAN&gt;&lt;SPAN class=""&gt;}&lt;/SPAN&gt;&lt;SPAN class=""&gt;"&lt;/SPAN&gt;&lt;SPAN class=""&gt;)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;</description>
      <pubDate>Thu, 08 May 2025 05:12:09 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-governance/how-to-build-model-lineage-programmatically-in-a-cohesive-manner/m-p/118379#M2472</guid>
      <dc:creator>lingareddy_Alva</dc:creator>
      <dc:date>2025-05-08T05:12:09Z</dc:date>
    </item>
    <item>
      <title>Re: How to build model lineage programmatically in a cohesive manner?</title>
      <link>https://community.databricks.com/t5/data-governance/how-to-build-model-lineage-programmatically-in-a-cohesive-manner/m-p/118380#M2473</link>
      <description>&lt;P&gt;Tried 2 ways and it gives below error:&lt;BR /&gt;1. &lt;STRONG&gt;path:&lt;/STRONG&gt;&amp;nbsp;"databricks/mlflow-tracking/&amp;lt;notebook_id&amp;gt;/&amp;lt;run_id&amp;gt;/artifacts/is_close_model_artifact/data/feature_store/feature_spec.yaml"&lt;BR /&gt;&lt;STRONG&gt;error:&lt;/STRONG&gt; Path must be absolute&lt;BR /&gt;&lt;BR /&gt;2. &lt;STRONG&gt;path:&amp;nbsp;&lt;/STRONG&gt;"/databricks/mlflow-tracking/&amp;lt;notebook_id&amp;gt;/&amp;lt;run_id&amp;gt;/artifacts/is_close_model_artifact/data/feature_store/feature_spec.yaml"&lt;BR /&gt;&lt;STRONG&gt;error: &lt;/STRONG&gt;No operations allowed on this path&lt;/P&gt;</description>
      <pubDate>Thu, 08 May 2025 05:44:43 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-governance/how-to-build-model-lineage-programmatically-in-a-cohesive-manner/m-p/118380#M2473</guid>
      <dc:creator>rashij</dc:creator>
      <dc:date>2025-05-08T05:44:43Z</dc:date>
    </item>
  </channel>
</rss>

