<?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: Unity Catalog Lineage APIs – Are these REST APIs publicly supported? in Data Governance</title>
    <link>https://community.databricks.com/t5/data-governance/unity-catalog-lineage-apis-are-these-rest-apis-publicly/m-p/165868#M2967</link>
    <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/237144"&gt;@faruk&lt;/a&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I understand the situation, but you can show this reply to your security team and try to get a view created. Once you have that access, you can use a recursive function to get the lineage of lineage in memory.&lt;/P&gt;&lt;P&gt;Here is the exact logic I used to build it (You need to change the code a bit):&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&gt;&lt;LI-CODE lang="python"&gt;def _build_graph(self):
        print("Building in-memory dependency graph...")
        
        query = """
            SELECT DISTINCT
                target_table_full_name AS object,
                target_type AS object_type,
                source_table_full_name AS depends_on_object,
                source_type AS depends_on_object_type
            FROM 
                system.access.table_lineage
            WHERE 
                source_type IN ('TABLE', 'VIEW') 
                AND target_type IN ('TABLE', 'VIEW')
                AND target_table_full_name IS NOT NULL
                AND source_table_full_name IS NOT NULL
        """
        df_lineage = self.spark.sql(query).collect()
        
        for row in df_lineage:
            obj = row['object'].lower()
            obj_type = row['object_type']
            
            dep = row['depends_on_object'].lower()
            dep_type = row['depends_on_object_type']
            
            # Store valid names
            self.all_known_tables.add(obj)
            self.all_known_tables.add(dep)
            
            # Store their types
            self.object_types[obj] = obj_type
            self.object_types[dep] = dep_type
            
            # Build relationships
            if obj not in self.dependency_graph:
                self.dependency_graph[obj] = set()
            self.dependency_graph[obj].add(dep)
            
        print(f"Graph built successfully. Tracking {len(self.dependency_graph)} target objects.")&lt;/LI-CODE&gt;&lt;P&gt;The best part about doing it this way is that it solves your deleted data problem. You just cross-reference that all_known_tables set against the active system.information_schema.tables. If an object doesn't exist there anymore, you know it was deleted and can safely drop it from your dictionary.&lt;/P&gt;</description>
    <pubDate>Tue, 18 Aug 2026 06:13:32 GMT</pubDate>
    <dc:creator>ShamenParis</dc:creator>
    <dc:date>2026-08-18T06:13:32Z</dc:date>
    <item>
      <title>Unity Catalog Lineage APIs – Are these REST APIs publicly supported?</title>
      <link>https://community.databricks.com/t5/data-governance/unity-catalog-lineage-apis-are-these-rest-apis-publicly/m-p/165771#M2960</link>
      <description>&lt;P&gt;Hi everyone,&lt;/P&gt;&lt;P&gt;I’m currently working on a PoC to build a &lt;STRONG&gt;data dictionary&lt;/STRONG&gt; in Databricks, and one of the requirements is to retrieve lineage information programmatically.&lt;/P&gt;&lt;P&gt;I was advised that Databricks provides &lt;STRONG&gt;Unity Catalog Lineage APIs&lt;/STRONG&gt; that can retrieve table-level and column-level lineage, following the Unity Catalog permission model and without requiring direct access to the system.access schema.&lt;/P&gt;&lt;P&gt;I was provided with an example endpoint:&lt;/P&gt;&lt;P&gt;/api/2.1/unity-catalog/lineage/table-lineages&lt;/P&gt;&lt;P&gt;However, after searching the current Databricks documentation, I cannot find this endpoint or any official documentation for a table-lineages REST API.&lt;/P&gt;&lt;P&gt;The situation is that our parent company does &lt;STRONG&gt;not allow us to have direct access to the system.access schema for security and governance reasons&lt;/STRONG&gt;. Therefore, querying system.access.table_lineage is not an option for our PoC.&lt;/P&gt;&lt;P&gt;My goal is to build a data dictionary and enrich it with lineage information, so I’m looking for a &lt;STRONG&gt;supported REST API&lt;/STRONG&gt; that would allow me to retrieve table-level lineage without accessing system.access.table_lineage directly.&lt;/P&gt;&lt;P&gt;Could anyone clarify:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;Is /api/2.1/unity-catalog/lineage/table-lineages a supported/public Databricks REST API?&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;If so, where can I find the official documentation?&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Is there another supported REST API to retrieve table-level lineage without querying system.access.table_lineage?&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Is column-level lineage also available through a supported API?&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Any guidance or documentation would be greatly appreciated.&lt;/P&gt;&lt;P&gt;Thanks!&lt;/P&gt;</description>
      <pubDate>Mon, 17 Aug 2026 07:11:04 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-governance/unity-catalog-lineage-apis-are-these-rest-apis-publicly/m-p/165771#M2960</guid>
      <dc:creator>faruk</dc:creator>
      <dc:date>2026-08-17T07:11:04Z</dc:date>
    </item>
    <item>
      <title>Re: Unity Catalog Lineage APIs – Are these REST APIs publicly supported?</title>
      <link>https://community.databricks.com/t5/data-governance/unity-catalog-lineage-apis-are-these-rest-apis-publicly/m-p/165794#M2961</link>
      <description>&lt;P&gt;One possible alternative, if the main blocker is direct access to system tables, would be for the &lt;SPAN&gt;parent company&lt;/SPAN&gt; to expose a restricted view over system.access table, filtered only to the relevant catalogs/schemas. Maybe that would enable PoC work without violation of governance and security.&lt;/P&gt;</description>
      <pubDate>Mon, 17 Aug 2026 11:40:31 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-governance/unity-catalog-lineage-apis-are-these-rest-apis-publicly/m-p/165794#M2961</guid>
      <dc:creator>nick_martinek</dc:creator>
      <dc:date>2026-08-17T11:40:31Z</dc:date>
    </item>
    <item>
      <title>Re: Unity Catalog Lineage APIs – Are these REST APIs publicly supported?</title>
      <link>https://community.databricks.com/t5/data-governance/unity-catalog-lineage-apis-are-these-rest-apis-publicly/m-p/165809#M2963</link>
      <description>&lt;P&gt;Hi Faruk,&lt;/P&gt;&lt;P&gt;The referenced endpoint is generally an internal route used rather than a supported public REST API. Unity Catalog system tables is the valid option. However, if you are blocked from it and need a working alternative for the PoC right now. You can follow below&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Query History Reconstruction via&amp;nbsp;&lt;/STRONG&gt;system.query.history - You can reconstruct write operations and table-level dependencies by extracting queries that create or modify tables and parsing their underlying SQL text using the system query history table. It tracks table creation and modification events, identifies upstream source tables via SQL parsing and helps map out write operations. It requires maintaining your own SQL parsing logic and is complex &amp;amp; less precise than engine-native lineage capture. You can use it for High-level impact analysis, audit trails and identifying table creators or pipeline execution metadata.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Scoped Access to System Tables&lt;/STRONG&gt; - For building a production-grade data dictionary, obtaining read permissions on native lineage tables is the &lt;STRONG&gt;recommended&lt;/STRONG&gt; approach. You can request your account or workspace administrator to grant SELECT privileges specifically on table_lineage and column_lineage. It provides fully automated table-level and column-level lineage without requiring broader or elevated access across other governance domains.&lt;/P&gt;</description>
      <pubDate>Mon, 17 Aug 2026 12:39:47 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-governance/unity-catalog-lineage-apis-are-these-rest-apis-publicly/m-p/165809#M2963</guid>
      <dc:creator>balajij8</dc:creator>
      <dc:date>2026-08-17T12:39:47Z</dc:date>
    </item>
    <item>
      <title>Re: Unity Catalog Lineage APIs – Are these REST APIs publicly supported?</title>
      <link>https://community.databricks.com/t5/data-governance/unity-catalog-lineage-apis-are-these-rest-apis-publicly/m-p/165845#M2964</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/237144"&gt;@faruk&lt;/a&gt;&amp;nbsp;,&lt;/P&gt;&lt;P&gt;I completely understand the frustration. Navigating enterprise permissions is a headache, and I actually went down this exact same rabbit hole recently when I was trying to pull lineage data strictly using the Databricks REST API or SDK.&lt;/P&gt;&lt;P&gt;To give it to you straight, that /api/2.1/unity-catalog/lineage/table-lineages endpoint you were given is an internal, undocumented API used by the Databricks UI under the hood. Because it's an internal tool, there is no official public documentation for it, and using it for a production PoC is highly risky since Databricks can change or deprecate it at any time without warning. Unfortunately, there are currently no officially supported REST APIs for either table-level or column-level lineage.&lt;/P&gt;&lt;P&gt;The reason Databricks does this is actually by design. Over the last couple of years, they have shifted heavily toward an "everything is a table" architecture with their System Tables. Lineage graphs can get incredibly massive, and trying to paginate through hundreds of thousands of records via REST APIs just doesn't scale well. By keeping lineage inside system.access.table_lineage, they let us use the Spark distributed engine to query it and easily join it with other metadata.&lt;/P&gt;&lt;P&gt;When I was dealing with this, I realized giving up on the SDK and using SQL was the only sustainable way forward. I ended up running a straightforward query to just pull the direct source-to-target relationships, which looks something like this:&lt;/P&gt;&lt;LI-CODE lang="python"&gt;query = """
SELECT DISTINCT
    source_table_catalog AS SourceCatalog, 
    source_table_schema AS SourceSchema, 
    source_table_name AS SourceTable,
    target_table_catalog AS TargetCatalog, 
    target_table_schema AS TargetSchema, 
    target_table_name AS TargetTable
FROM system.access.table_lineage
WHERE source_table_name IS NOT NULL 
  AND target_table_name IS NOT NULL
"""

lineage_df = spark.sql(query)
display(lineage_df)&lt;/LI-CODE&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;P&gt;Since your parent company is strictly blocking your access to the system.access schema, trying to reverse-engineer an unsupported internal API is probably going to cause more problems down the line.&lt;/P&gt;&lt;P&gt;The most realistic workaround here is to have a conversation with your security and governance team. Instead of asking for raw access, ask them to create a "Secure View" on top of system.access.table_lineage. They can write a simple view that filters the lineage table so your PoC user or Service Principal only sees data for the specific catalogs and schemas you are actually allowed to govern, completely hiding the rest of the enterprise data. This satisfies their strict security rules while allowing you to use the officially supported architecture to build your data dictionary.&lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;</description>
      <pubDate>Mon, 17 Aug 2026 19:25:29 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-governance/unity-catalog-lineage-apis-are-these-rest-apis-publicly/m-p/165845#M2964</guid>
      <dc:creator>ShamenParis</dc:creator>
      <dc:date>2026-08-17T19:25:29Z</dc:date>
    </item>
    <item>
      <title>Re: Unity Catalog Lineage APIs – Are these REST APIs publicly supported?</title>
      <link>https://community.databricks.com/t5/data-governance/unity-catalog-lineage-apis-are-these-rest-apis-publicly/m-p/165858#M2965</link>
      <description>&lt;P&gt;&lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/210897"&gt;@balajij8&lt;/a&gt;&amp;nbsp;Thank you for your advice, i definetly agree that for a production-grade data dictionnary i have to have the needed permissions.&lt;/P&gt;</description>
      <pubDate>Tue, 18 Aug 2026 05:03:22 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-governance/unity-catalog-lineage-apis-are-these-rest-apis-publicly/m-p/165858#M2965</guid>
      <dc:creator>faruk</dc:creator>
      <dc:date>2026-08-18T05:03:22Z</dc:date>
    </item>
    <item>
      <title>Re: Unity Catalog Lineage APIs – Are these REST APIs publicly supported?</title>
      <link>https://community.databricks.com/t5/data-governance/unity-catalog-lineage-apis-are-these-rest-apis-publicly/m-p/165859#M2966</link>
      <description>&lt;P&gt;&lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/231077"&gt;@ShamenParis&lt;/a&gt;&amp;nbsp;Thank you for your elaborate answer. I know that it is undocumented and more over it doesn't really do what i want Databricks Lineage API retains lineage data indefinitely, even after the referenced column have been deleted and it make the work harder. Another limitation it does not provide the complete lineage graph, it give only the immediate upstream and downstream relationship.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I will try to ask them the secure View but i already know their answer.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Br&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 18 Aug 2026 05:07:04 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-governance/unity-catalog-lineage-apis-are-these-rest-apis-publicly/m-p/165859#M2966</guid>
      <dc:creator>faruk</dc:creator>
      <dc:date>2026-08-18T05:07:04Z</dc:date>
    </item>
    <item>
      <title>Re: Unity Catalog Lineage APIs – Are these REST APIs publicly supported?</title>
      <link>https://community.databricks.com/t5/data-governance/unity-catalog-lineage-apis-are-these-rest-apis-publicly/m-p/165868#M2967</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/237144"&gt;@faruk&lt;/a&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I understand the situation, but you can show this reply to your security team and try to get a view created. Once you have that access, you can use a recursive function to get the lineage of lineage in memory.&lt;/P&gt;&lt;P&gt;Here is the exact logic I used to build it (You need to change the code a bit):&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&gt;&lt;LI-CODE lang="python"&gt;def _build_graph(self):
        print("Building in-memory dependency graph...")
        
        query = """
            SELECT DISTINCT
                target_table_full_name AS object,
                target_type AS object_type,
                source_table_full_name AS depends_on_object,
                source_type AS depends_on_object_type
            FROM 
                system.access.table_lineage
            WHERE 
                source_type IN ('TABLE', 'VIEW') 
                AND target_type IN ('TABLE', 'VIEW')
                AND target_table_full_name IS NOT NULL
                AND source_table_full_name IS NOT NULL
        """
        df_lineage = self.spark.sql(query).collect()
        
        for row in df_lineage:
            obj = row['object'].lower()
            obj_type = row['object_type']
            
            dep = row['depends_on_object'].lower()
            dep_type = row['depends_on_object_type']
            
            # Store valid names
            self.all_known_tables.add(obj)
            self.all_known_tables.add(dep)
            
            # Store their types
            self.object_types[obj] = obj_type
            self.object_types[dep] = dep_type
            
            # Build relationships
            if obj not in self.dependency_graph:
                self.dependency_graph[obj] = set()
            self.dependency_graph[obj].add(dep)
            
        print(f"Graph built successfully. Tracking {len(self.dependency_graph)} target objects.")&lt;/LI-CODE&gt;&lt;P&gt;The best part about doing it this way is that it solves your deleted data problem. You just cross-reference that all_known_tables set against the active system.information_schema.tables. If an object doesn't exist there anymore, you know it was deleted and can safely drop it from your dictionary.&lt;/P&gt;</description>
      <pubDate>Tue, 18 Aug 2026 06:13:32 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-governance/unity-catalog-lineage-apis-are-these-rest-apis-publicly/m-p/165868#M2967</guid>
      <dc:creator>ShamenParis</dc:creator>
      <dc:date>2026-08-18T06:13:32Z</dc:date>
    </item>
  </channel>
</rss>

