PageSourceSearch

https://docs.coalesce.io/assets/js/da25937e.3cb39be9.js

js coalesce.io collected 2026-09-24 18:03:45 UTC 20,960 bytes, 1 lines download raw bytes

1"use strict";(globalThis.webpackChunkcoalesce_docs=globalThis.webpackChunkcoalesce_docs||[]).push([[5189],{86880(e,t,s){s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>a,toc:()=>d});const a=JSON.parse('{"id":"catalog/integrations/data-warehouses/databricks","title":"Databricks","description":"Connect Databricks to Coalesce Catalog. Set up OAuth M2M authentication, retrieve host and HTTP path, enable system tables, add credentials for Unity Catalog or Hive, and catalog AI/BI dashboards and Databricks Apps with Databricks BI.","source":"@site/docs/catalog/integrations/data-warehouses/databricks.md","sourceDirName":"catalog/integrations/data-warehouses","slug":"/catalog/integrations/data-warehouses/databricks","permalink":"/docs/catalog/integrations/data-warehouses/databricks","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Databricks","description":"Connect Databricks to Coalesce Catalog. Set up OAuth M2M authentication, retrieve host and HTTP path, enable system tables, add credentials for Unity Catalog or Hive, and catalog AI/BI dashboards and Databricks Apps with Databricks BI.","keywords":["Databricks","Unity Catalog","Hive","Catalog","data warehouse","OAuth","Databricks BI","AI/BI dashboards","Databricks Apps"],"processed":true},"sidebar":"catalogSidebar","previous":{"title":"BigQuery Set Up","permalink":"/docs/catalog/integrations/data-warehouses/bigquery/bigquery-set-up"},"next":{"title":"PostgreSQL","permalink":"/docs/catalog/integrations/data-warehouses/postgres"}}');var n=s(74848),r=s(28453);const i={title:"Databricks",description:"Connect Databricks to Coalesce Catalog. Set up OAuth M2M authentication, retrieve host and HTTP path, enable system tables, add credentials for Unity Catalog or Hive, and catalog AI/BI dashboards and Databricks Apps with Databricks BI.",keywords:["Databricks","Unity Catalog","Hive","Catalog","data warehouse","OAuth","Databricks BI","AI/BI dashboards","Databricks Apps"],processed:!0},o=void 0,c={},d=[{value:"Requirements",id:"requirements",level:2},{value:"1. Generate OAuth Credentials",id:"1-generate-oauth-credentials",level:2},{value:"2. Retrieve Your <code>host</code>",id:"2-retrieve-your-host",level:2},{value:"3. Retrieve Your HTTP path",id:"3-retrieve-your-http-path",level:2},{value:"4. Enable System Tables",id:"4-enable-system-tables",level:2},{value:"5. Retrieve Your Account ID (Identity-Federated Workspaces)",id:"5-retrieve-your-account-id-identity-federated-workspaces",level:2},{value:"6. Add Connection to Coalesce Catalog",id:"6-add-connection-to-coalesce-catalog",level:2},{value:"Databricks BI",id:"databricks-bi",level:2},{value:"What Catalog Extracts From Databricks BI",id:"what-catalog-extracts-from-databricks-bi",level:3},{value:"Service Principal Entitlements and Permissions",id:"service-principal-entitlements-and-permissions",level:3},{value:"Add the Databricks BI Integration",id:"add-the-databricks-bi-integration",level:3},{value:"Exclude Folders From Ingestion",id:"exclude-folders-from-ingestion",level:3}];function l(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.admonition,{title:"Unity Catalog and Hive",type:"info",children:(0,n.jsx)(t.p,{children:"This integration covers both Unity Catalog and non-Unity Catalog (Hive) Databricks."})}),"\n",(0,n.jsx)(t.admonition,{title:"Per Workspace",type:"info",children:(0,n.jsx)(t.p,{children:"This integration is to be replicated for each workspace you want to integrate with Catalog."})}),"\n",(0,n.jsx)(t.admonition,{title:"AI/BI Dashboards and Apps",type:"info",children:(0,n.jsxs)(t.p,{children:["To catalog AI/BI dashboards and Databricks Apps, add the separate Databricks BI integration. See ",(0,n.jsx)(t.a,{href:"#databricks-bi",children:"Databricks BI"}),"."]})}),"\n",(0,n.jsx)(t.h2,{id:"requirements",children:"Requirements"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"You must be a Databricks administrator and Metastore Admin of the workspace to integrate."}),"\n",(0,n.jsx)(t.li,{children:"OAuth M2M authentication requires a service principal with appropriate permissions."}),"\n",(0,n.jsxs)(t.li,{children:["For identity-federated workspaces, the service principal must also be granted the ",(0,n.jsx)(t.strong,{children:"account admin"})," role to extract account-level users."]}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"To create a service principal, follow the instructions for your cloud provider:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://docs.databricks.
1com/aws/en/admin/users-groups/service-principals",children:"Amazon Web Services"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://docs.databricks.com/gcp/en/admin/users-groups/service-principals",children:"Google Cloud Platform"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://learn.microsoft.com/en-us/azure/databricks/admin/users-groups/service-principals",children:"Microsoft Azure"})}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"1-generate-oauth-credentials",children:"1. Generate OAuth Credentials"}),"\n",(0,n.jsx)(t.p,{children:"Once you have created a service principal:"}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsx)(t.li,{children:"Click on the service principal."}),"\n",(0,n.jsxs)(t.li,{children:["Navigate to the ",(0,n.jsx)(t.strong,{children:"OAuth secrets"})," tab."]}),"\n",(0,n.jsxs)(t.li,{children:["Click ",(0,n.jsx)(t.strong,{children:"Generate secret"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Important"}),": Copy both the ",(0,n.jsx)(t.strong,{children:"Client ID"})," and ",(0,n.jsx)(t.strong,{children:"Client Secret"})," immediately - the secret will only be shown once."]}),"\n"]}),"\n",(0,n.jsxs)(t.h2,{id:"2-retrieve-your-host",children:["2. Retrieve Your ",(0,n.jsx)(t.code,{children:"host"})]}),"\n",(0,n.jsxs)(t.p,{children:["Your ",(0,n.jsx)(t.code,{children:"host"})," or instance name can be found in your Databricks URL: ",(0,n.jsx)(t.code,{children:"https://<instance-name>.cloud.databricks.com"})," or ",(0,n.jsx)(t.code,{children:"https://<instance-name>/"}),"."]}),"\n",(0,n.jsx)(t.h2,{id:"3-retrieve-your-http-path",children:"3. Retrieve Your HTTP path"}),"\n",(0,n.jsxs)(t.p,{children:["Your ",(0,n.jsx)(t.code,{children:"http_path"})," identifies the compute resource that Coalesce will use to query metadata. The location differs between SQL warehouses and clusters. For more details, see the ",(0,n.jsx)(t.a,{href:"https://docs.databricks.com/aws/en/integrations/compute-details",children:"Databricks compute details documentation"}),"."]}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.strong,{children:"For Clusters:"})}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsx)(t.li,{children:"Log in to your Databricks workspace."}),"\n",(0,n.jsxs)(t.li,{children:["In the sidebar, click ",(0,n.jsx)(t.strong,{children:"Compute"}),"."]}),"\n",(0,n.jsx)(t.li,{children:"Select your cluster."}),"\n",(0,n.jsxs)(t.li,{children:["On the ",(0,n.jsx)(t.strong,{children:"Configuration"})," tab, expand ",(0,n.jsx)(t.strong,{children:"Advanced options"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:["Click the ",(0,n.jsx)(t.strong,{children:"JDBC/ODBC"})," tab and copy the ",(0,n.jsx)(t.strong,{children:"HTTP path"}),"."]}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.strong,{children:"For SQL Warehouses:"})}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsx)(t.li,{children:"Log in to your Databricks workspace."}),"\n",(0,n.jsxs)(t.li,{children:["In the sidebar, click ",(0,n.jsx)(t.strong,{children:"SQL Warehouses"}),"."]}),"\n",(0,n.jsx)(t.li,{children:"Select your SQL warehouse."}),"\n",(0,n.jsxs)(t.li,{children:["On the ",(0,n.jsx)(t.strong,{children:"Connection details"})," tab, copy the ",(0,n.jsx)(t.strong,{children:"HTTP path"}),"."]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"4-enable-system-tables",children:"4. Enable System Tables"}),"\n",(0,n.jsxs)(t.p,{children:["To enable ",(0,n.jsx)(t.code,{children:"system"})," tables, follow the ",(0,n.jsx)(t.a,{href:"https://docs.databricks.com/en/admin/system-tables/index.html#enable",children:"Databricks system tables documentation"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:["After enabling system tables, grant your service principal access to the ",(0,n.jsx)(t.code,{children:"system"})," catalog:"]}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{children:["In your Databricks workspace, go to ",(0,n.jsx)(t.strong,{children:"Catalog"})," and navigate to the ",(0,n.jsx)(t.code,{children:"system"})," catalog."]}),"\n",(0,n.jsxs)(t.li,{children:["Click ",(0,n.jsx)(t.strong,{children:"Permissions"})," tab \u2192 ",(0,n.jsx)(t.strong,{children:"Grant"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:["Select your service principal and grant: ",(0,n.jsx)(t.strong,{children:"USE CATALOG"}),", ",(0,n.jsx)(t.strong,{children:"USE SCHEMA"}),", and ",(0,n.jsx)(t.strong,{children:"SELECT"}),"."]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"5-retrieve-your-account-id-identity-federated-workspaces",children:"5. Retrieve Your Account ID (Identity-Federated Workspaces)"}),"\n",(0,n.jsxs)(t.p,{children:["If your workspace uses ",(0,n.jsx)(t.a,{href:"https://docs.databricks.
1com/aws/en/admin/users-groups/",children:"identity federation"})," (users and groups are managed at the account level in Unity Catalog), you ",(0,n.jsx)(t.strong,{children:"must"})," provide your ",(0,n.jsx)(t.strong,{children:"Account ID"})," so Coalesce can extract users at the account level. If your workspace is not identity-federated, skip this step and leave the Account ID empty."]}),"\n",(0,n.jsx)(t.p,{children:"To find your account ID:"}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{children:["Log in to the ",(0,n.jsx)(t.a,{href:"https://docs.databricks.com/aws/en/admin/account-settings/index.html",children:"Databricks account console"})," (for example, ",(0,n.jsx)(t.code,{children:"https://accounts.cloud.databricks.com"}),")."]}),"\n",(0,n.jsx)(t.li,{children:"Click your username in the top-right corner."}),"\n",(0,n.jsxs)(t.li,{children:["Copy the ",(0,n.jsx)(t.strong,{children:"Account ID"})," shown in the dropdown."]}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["The service principal must also be granted the ",(0,n.jsx)(t.strong,{children:"account admin"})," role to extract account-level users."]}),"\n",(0,n.jsx)(t.h2,{id:"6-add-connection-to-coalesce-catalog",children:"6. Add Connection to Coalesce Catalog"}),"\n",(0,n.jsx)(t.p,{children:"Now that you have your OAuth credentials, add the Databricks integration to Coalesce:"}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:["Go to your ",(0,n.jsx)(t.a,{href:"https://app.castordoc.com/settings/integrations",children:"integration page"})," in Coalesce."]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:["Click ",(0,n.jsx)(t.strong,{children:"Add Integration"})," and select ",(0,n.jsx)(t.strong,{children:"Databricks"}),"."]}),"\n",(0,n.jsxs)("figure",{children:[(0,n.jsx)("img",{src:"/img/catalog/assets/Screenshot 2024-11-12 at 18.06.05.png",alt:"Add Databricks integration",width:"262",className:"mdImages"}),(0,n.jsx)("figcaption",{})]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:["Select ",(0,n.jsx)(t.strong,{children:"Catalog Managed"})," and name your integration."]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsx)(t.p,{children:"Fill in the credential fields:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Host"}),": Your Databricks workspace hostname (for example, ",(0,n.jsx)(t.code,{children:"https://dbc-abc12345-6789.cloud.databricks.com"}),")"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"HTTP Path"}),": Your SQL warehouse path (for example, ",(0,n.jsx)(t.code,{children:"/sql/1.0/warehouses/xxxxx"}),")"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Client ID"}),": The OAuth client ID from your service principal"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Client Secret"}),": The OAuth client secret from your service principal"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Account ID"})," (only for identity-federated workspaces): Check ",(0,n.jsx)(t.strong,{children:"Identity-federated workspace"}),", then enter the Databricks account ID you retrieved in the previous section. Leave the checkbox unchecked for standard workspaces."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)("figure",{children:[(0,n.jsx)("img",{src:"/img/catalog/assets/databricks-integration-form.png",alt:"Databricks integration form for a standard workspace",width:"262",className:"mdImages"}),(0,n.jsx)("figcaption",{children:"Standard workspace: leave the checkbox unchecked."})]}),"\n",(0,n.jsxs)("figure",{children:[(0,n.jsx)("img",{src:"/img/catalog/assets/databricks-integration-form-identity-federated.png",alt:"Databricks integration form with Account ID for an identity-federated workspace",width:"262",className:"mdImages"}),(0,n.jsx)("figcaption",{children:"Identity-federated workspace: check the box and enter your Account ID."})]}),"\n",(0,n.jsx)(t.p,{children:"For your first sync, it will take up to 48 hours and we will notify you when it is complete."}),"\n",(0,n.jsx)(t.h2,{id:"databricks-bi",children:"Databricks BI"}),"\n",(0,n.jsx)(t.p,{children:"The Databricks BI integration catalogs the AI/BI dashboards and Databricks Apps of a workspace. It is separate from the Databricks warehouse integration: add it for each workspace whose dashboards and apps you want in Catalog."}),"\n",(0,n.jsx)(t.admonition,{title:"Warehouse Integration for Lineage",type:"info",children:(0,n.jsxs)(t.p,{children:["Lineage links dashboards to tables that Catalog already knows. Set up the ",(0,n.jsx)(t.a,{href:"#requirements",children:"Databricks warehouse integration"})," first so that the tables your dashboards query are in Catalog."]})}),"\n",(0,n.jsx)(t.h3,{id:"what-catalog-extracts-from-databricks-bi",children:"What Catalog Extracts From Databricks BI"}),"\n",(0,n.jsx)(t.p,{children:"Extraction reads the Databricks REST API:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"AI/BI dashboards, with the workspace folder that holds each one"}),"\n",(0,n.jsx)(t.li,{children:"Databricks Apps"}),"\n",(0,n.jsxs)(t.li,{children:["Tags assigned to dashboards and apps, which become Catalog tags formatted as ",(0,n.jsx)(t.code,{children:"key:value"}),", or ",(0,n.jsx)(t.code,{children:"key"})," when the tag has no value"]}
1),"\n",(0,n.jsx)(t.li,{children:"Workspace users"}),"\n",(0,n.jsx)(t.li,{children:"The SQL of each dashboard dataset, which becomes a source query of its dashboard"}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"Databricks objects appear in Catalog under Catalog's own names:"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"In Databricks"}),(0,n.jsx)(t.th,{children:"In Catalog"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"AI/BI dashboard"}),(0,n.jsx)(t.td,{children:"Dashboard, in its workspace folder"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"App"}),(0,n.jsxs)(t.td,{children:["Dashboard, in an ",(0,n.jsx)(t.code,{children:"Apps"})," folder"]})]})]})]}),"\n",(0,n.jsx)(t.p,{children:"Catalog then parses the SQL of each dashboard dataset and builds lineage from the tables it reads to the dashboard. Apps have no datasets, so they have no lineage."}),"\n",(0,n.jsx)(t.h3,{id:"service-principal-entitlements-and-permissions",children:"Service Principal Entitlements and Permissions"}),"\n",(0,n.jsx)(t.p,{children:"Databricks BI uses a service principal, like the warehouse integration. The Databricks API only returns what the service principal can access, so its entitlements and permissions decide what Catalog extracts."}),"\n",(0,n.jsx)(t.p,{children:"Give the service principal these entitlements:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Workspace access"}),": without it, Databricks refuses to list apps and extraction fails."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Databricks SQL access"}),": Databricks requires it, in addition to Workspace access, to ",(0,n.jsx)(t.a,{href:"https://docs.databricks.com/api/lakeview/v1/list-dashboards",children:"list dashboards"}),"."]}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["Then grant the service principal ",(0,n.jsx)(t.strong,{children:"Can View"})," on every folder that holds dashboards you want in Catalog. Granting it on a parent folder covers the dashboards inside."]}),"\n",(0,n.jsx)(t.admonition,{title:"Dashboards the Service Principal Cannot View",type:"warning",children:(0,n.jsx)(t.p,{children:"Catalog only extracts the dashboards the service principal can view. A dashboard moved to a folder the service principal cannot view disappears from the next extraction, and Catalog removes it. Check the service principal's permissions before you reorganize folders."})}),"\n",(0,n.jsx)(t.h3,{id:"add-the-databricks-bi-integration",children:"Add the Databricks BI Integration"}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:["Create a service principal and generate its OAuth secret, as described in ",(0,n.jsx)(t.a,{href:"#1-generate-oauth-credentials",children:"Generate OAuth Credentials"}),". You can reuse the service principal of your warehouse integration."]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:["Retrieve your ",(0,n.jsx)(t.a,{href:"#2-retrieve-your-host",children:"host"})," and an ",(0,n.jsx)(t.a,{href:"#3-retrieve-your-http-path",children:"HTTP path"}),". The HTTP path is a required field."]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:["Go to your ",(0,n.jsx)(t.a,{href:"https://app.castordoc.com/settings/integrations",children:"integration page"})," in Coalesce."]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:["Click ",(0,n.jsx)(t.strong,{children:"Add Integration"})," and select ",(0,n.jsx)(t.strong,{children:"Databricks BI"}),"."]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:["Select ",(0,n.jsx)(t.strong,{children:"Catalog Managed"})," and name your integration."]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsx)(t.p,{children:"Enter your credentials in the following format:"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-json",children:'{\n    "host": "https://dbc-abc12345-6789.cloud.databricks.com",\n    "http_path": "/sql/1.0/warehouses/xxxxx",\n    "client_id": "*****",\n    "client_secret": "*****"\n}\n'})}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["To authenticate with a personal access token instead of OAuth, replace ",(0,n.jsx)(t.code,{children:"client_id"})," and ",(0,n.jsx)(t.code,{children:"client_secret"})," with a ",(0,n.jsx)(t.code,{children:"token"})," field. Provide one authentication method only: credentials holding both a ",(0,n.jsx)(t.code,{children:"token"})," and a ",(0,n.jsx)(t.code,{children:"client_id"})," or ",(0,n.jsx)(t.code,{children:"client_secret"})," are rejected."]}),"\n",(0,n.jsx)(t.p,{children:"For your first sync, it will take up to 48 hours and we will notify you when it is complete."}),"\n",(0,n.jsx)(t.h3,{id:"exclude-folders-from-ingestion",children:"Exclude Folders From Ingestion"}),"\n",(0,n.jsxs)(t.p,{children:["Your Catalog team can exclude folders from ingestion with folder patterns, glob-style rules matched against each dashboard's folder path, such as ",(0,n.jsx)(t.code,{children:"Users/[email protected]/Drafts/**"}),". Contact your Catalog point of contact or Coalesce Support to set them up."]}),"\n",(0,n.jsx)(t.p,{children:"Folder patterns apply after extraction. Catalog still extracts every dashboard the service principal can view, then leaves out the dashboards in matching folders. Folder patterns don't give the service principal access to a folder, and they don't limit what it reads. To keep a folder out of extraction entirely, remove the service principal's permission on it."})]})}function h(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},28453(e,t,s){s.d(t,{R:()=>i,x:()=>o});var a=s(96540);const n={},r=a.createContext(n);function i(e){const t=a.useContext(r);return a.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),a.createElement(r.Provider,{value:t},e.children)}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.