Prerequisites, authentication, Unity Catalog configuration, and step-by-step instructions for connecting ADLS to Prizm — with or without your own Databricks cluster.
If you’re using Prizm Spark (the default) rather than your own Databricks cluster, none of the Azure/Unity Catalog/Databricks setup below is required — skip straight to Step 1: Configure Your ADLS Source.
ADLS Gen2 storage account with a read-only source container and a separate read-write container for Unity Catalog managed storage
Azure admin
2
Authentication method chosen and provisioned (Managed Identity recommended, or Service Principal), including the Storage Blob Delegator role for credential vending
Azure admin
3
Unity Catalog metastore enabled on the Databricks workspace
Databricks admin
4
UC Storage Credential created, referencing the authentication method above
Databricks admin
5
UC external locations created for both the read (source) and write (managed storage) containers
Databricks admin
6
Target UC Catalog and Schema created
Databricks admin
7
Databricks execution identity for Prizm (OAuth service principal) with required grants
Databricks admin
8
Cluster designated for Prizm job runs
Databricks admin
9
Prizm notebooks (Iceberg materializer and exception workflow) deployed to agreed workspace paths
Prizm, with client review
10
Credential values submitted to Prizm via secure channel
Prizm needs read-only access to the container holding source files, and read-write access to a separate container used as Unity Catalog’s managed storage location. Keeping these as two containers, each with its own role assignment, means the source container’s identity holds no write or delete permission at all.
Managed Identity (Recommended)
Service Principal
Uses an Access Connector for Azure Databricks — a first-party Azure resource exposing a system- or user-assigned managed identity. One connector serves both containers; no secret is ever generated or stored.
1
Create the Access Connector
In the Azure Portal, create a resource of type Access Connector for Azure Databricks in the same region/subscription as your Databricks workspace. Copy its Resource ID from the Overview page.
2
Grant the connector access to both containers
Scope
Role
Read (source) container
Storage Blob Data Reader
Write (managed storage) container
Storage Blob Data Contributor
Storage account (root, not either container)
Storage Blob Delegator
Storage Blob Delegator must be assigned at the storage-account scope, not the container scope — Azure evaluates it against the account’s blob service endpoint. It only permits signing a delegation token; it grants no data access beyond whatever role (Reader/Contributor) the identity separately holds per container.
3
Create the storage credential in Databricks
In Catalog Explorer: + Add → Create a credential, Credential Type Azure Managed Identity, paste the Access Connector Resource ID. This one credential backs both external locations created next.
Use only where a managed identity is not permitted by policy. Same container split applies.
1
Register the service principal
In Microsoft Entra ID, register an application, generate a Client Secret (recorded immediately — shown only once), and note the Application (client) ID and Directory (tenant) ID.
2
Grant roles per container
Storage Blob Data Reader on the read container, Storage Blob Data Contributor on the write container, and Storage Blob Delegator at the storage-account level — all to this service principal.
3
Create the storage credential in Databricks
Credential Type Azure Service Principal; enter the Application (client) ID, Directory (tenant) ID, and Client Secret.
Service principal secrets expire (typically every 6–24 months) and must be rotated before expiry. Store in Azure Key Vault, never in a notebook or config file. Treat any secret ever shared in plaintext as compromised and rotate immediately.
Grant the Prizm execution identity access on each:
GRANT READ FILES ON EXTERNAL LOCATION <source_location_name> TO `<service_principal_application_id>`;GRANT READ FILES, WRITE FILES ON EXTERNAL LOCATION <write_location_name> TO `<service_principal_application_id>`;
For ADLS + Databricks Unity Catalog clients, exception and metadata instruction JSON is staged under the write external location (abfss://…/staging/{run_id}/…) rather than uploaded to Prizm SaaS S3 or via a scheduled Azure Blob upload as in earlier releases. The WRITE FILES grant above already covers this — no separate grant is required. Open-network clients are unaffected and keep the existing S3 HTTPS path.
As an alternative to staging exception/metadata instruction JSON directly under the write external location, you can stage it in a dedicated Unity Catalog Volume. Choose one of the two options below depending on whether you want the volume backed by a specific path on your existing ADLS container or by Unity Catalog’s own managed storage.Option A: External volume on the existing ADLS path
CREATE SCHEMA IF NOT EXISTS <catalog>.<schema>;CREATE EXTERNAL VOLUME IF NOT EXISTS <catalog>.<schema>.exception_stagingLOCATION 'abfss://<container>@<account>.dfs.core.windows.net/<path>/staging'COMMENT 'Staging for exception writeback instruction JSON';
Option B: Managed volume
CREATE VOLUME IF NOT EXISTS <catalog>.<schema>.exception_staging;
Grants on the volumeThis approach uses two separate identities — the service that uploads the exception JSON, and the identity the notebook job runs as — so each gets only the access it needs:
-- Identity that uploads the JSON via the Files API (your Ray service's SP)GRANT USE CATALOG ON CATALOG <catalog> TO `<sp-application-id>`;GRANT USE SCHEMA ON SCHEMA <catalog>.<schema> TO `<sp-application-id>`;GRANT WRITE VOLUME ON VOLUME <catalog>.<schema>.exception_staging TO `<sp-application-id>`;-- Identity the job runs as (the notebook reads the file)GRANT USE CATALOG ON CATALOG <catalog> TO `<job-run-as-principal>`;GRANT USE SCHEMA ON SCHEMA <catalog>.<schema> TO `<job-run-as-principal>`;GRANT READ VOLUME ON VOLUME <catalog>.<schema>.exception_staging TO `<job-run-as-principal>`;
CREATE CATALOG IF NOT EXISTS <catalog_name> MANAGED LOCATION 'abfss://<write-container>@<storage-account>.dfs.core.windows.net/<managed-subpath>';CREATE SCHEMA IF NOT EXISTS <catalog_name>.<schema_name>;GRANT USE CATALOG ON CATALOG <catalog_name> TO `<service_principal_application_id>`;GRANT USE SCHEMA, CREATE TABLE ON SCHEMA <catalog_name>.<schema_name> TO `<service_principal_application_id>`;
If your metastore already has default managed storage configured at the account level, the MANAGED LOCATION clause can be omitted.
Because tables are written with Delta UniForm (Iceberg compatibility), any Iceberg REST catalog client — Trino, external Spark, Snowflake, DuckDB — can read them once pointed at your metastore’s Iceberg REST endpoint (/api/2.1/unity-catalog/iceberg-rest). This is governed independently of the grants above and requires two extra steps:
Enable external data access on the metastore — a one-time, metastore-level setting a metastore admin turns on (Catalog → gear icon → metastore settings), not a SQL statement.
Grant EXTERNAL USE SCHEMA to whichever identity Trino authenticates as:
GRANT EXTERNAL USE SCHEMA ON SCHEMA <catalog_name>.<schema_name> TO `<trino-principal>`;
This external-access pathway is currently in Public Preview on Databricks — confirm with your Databricks account team that it’s enabled if you haven’t used it before. For Trino catalog authentication, only client ID/secret/tenant ID are provided, not a pre-generated token; Trino requests its own token per call, so there’s nothing to rotate by hand.
All grants above, in one pass (substitute your real values for every placeholder):
-- 1. Catalog & schema metadata grantsGRANT USE CATALOG ON CATALOG <CATALOG_NAME> TO `<SERVICE_PRINCIPAL_APP_ID>`;GRANT USE SCHEMA ON SCHEMA <CATALOG_NAME>.<SCHEMA_NAME> TO `<SERVICE_PRINCIPAL_APP_ID>`;GRANT EXTERNAL USE SCHEMA ON SCHEMA <CATALOG_NAME>.<SCHEMA_NAME> TO `<SERVICE_PRINCIPAL_APP_ID>`;GRANT SELECT ON SCHEMA <CATALOG_NAME>.<SCHEMA_NAME> TO `<SERVICE_PRINCIPAL_APP_ID>`;GRANT CREATE TABLE ON SCHEMA <CATALOG_NAME>.<SCHEMA_NAME> TO `<SERVICE_PRINCIPAL_APP_ID>`;-- 2. Storage credential grantGRANT READ FILES ON STORAGE CREDENTIAL `<STORAGE_CREDENTIAL_NAME>` TO `<SERVICE_PRINCIPAL_APP_ID>`;-- 3. Read grant per source external location (repeat for each additional read container)GRANT READ FILES ON EXTERNAL LOCATION `<READ_EXTERNAL_LOCATION_NAME_1>` TO `<SERVICE_PRINCIPAL_APP_ID>`;-- 4. Managed storage (write) external location grant — also covers exception-JSON stagingGRANT READ FILES, WRITE FILES ON EXTERNAL LOCATION `<WRITE_EXTERNAL_LOCATION_NAME>` TO `<SERVICE_PRINCIPAL_APP_ID>`;
Prizm authenticates using an OAuth service principal — a Databricks service principal with a client ID and OAuth secret, scoped only to what Prizm needs. Create it under Account Console → User management → Service principals, generate a secret on its Secrets tab, and store both values in a secrets manager.
Two notebooks are deployed to workspace paths your team agrees on:
Notebook
Purpose
adls_uc_iceberg_materializer
Reads each onboarded source file and creates the corresponding Iceberg-compatible Delta table
adls_uc_exception_workflow
Writes exception records to a dedicated exception table (created once, reused every run). Also runs the STAGE_EXCEPTION_JSON job type for exception/metadata JSON staging — not a separate notebook
The execution identity needs CAN_RUN (minimum) or CAN_MANAGE permission on both paths.
14.3 LTS (must support Unity Catalog + Delta UniForm)
16.4 LTS
Node Type
Standard_D4s_v3 / m4.xlarge
Standard_D4s_v3 / m4.xlarge or higher
Min / Max Workers
2 / 16
2 / 16
Memory per Node
8 GB
16 GB
Cores per Node
2
4
Provide either an existing all-purpose/job cluster ID, or permission for Prizm to launch a job cluster automatically with an agreed instance type, DBR version, and pool/AZ constraints.
Approximate load handling: a 100 MB / ~1M row file scans in 1–3 minutes; a 10 GB / ~100M row file takes roughly 30–90 minutes, depending on worker count. Actual timings vary with file format, column count, and configured checks.
Return credentials through a secure channel only — never by email, chat, or in a shared notebook cell.Accepted delivery methods: Azure Key Vault (preferred — grant Prizm’s service principal Get/List access on the specific secrets, share only the vault URI and secret names), Prizm’s secure credential intake form, or a password-protected secrets-manager entry with the password relayed out-of-band.
Treat any credential that has ever been pasted into a notebook cell, chat message, or shared document as compromised — rotate it before use, even if submitting through Key Vault going forward.
Steps 1–3 happen in the Prizm portal; Steps 4–5 happen in Databricks.
1
Configure Your ADLS Source
On the Source page, click the + icon next to the source list, select Azure Data Lake Storage, and complete:
Field
Required
Notes
Connection Name
Required
e.g. adls-finance-prod
Description
Optional
Tenant ID
Required
Your Azure AD tenant ID
Authentication Type
Required
Service Principal (+ Storage Account Name, Client ID, Client Secret) or Storage Access Key (+ Storage Account Name, Storage Access Key)
Use Vault
Optional
Pull credentials from a configured vault instead of entering directly
File Type
Required
csv, parquet, or delta
Prizm validates credentials on save and uses them both to read files and to list containers in the account. If no containers appear, confirm list access on the storage account.
ADLS source details. Service Principal is the default authentication type
Tenant ID, Client ID, Client Secret and File Type
2
Choose Your Compute Engine
Option
Result
Prizm Spark (default)
No further setup — skip to Monitoring
Use Databricks Spark Cluster
Continue to Step 3
Keep your Databricks cluster running during setup — a stopped cluster will not appear in the dropdown.
3
Connect Your Databricks Cluster
Field
Required
Notes
Platform Type
Required
Databricks Spark
Databricks Server
Required
Your workspace URL
Catalog Name
Required
The Unity Catalog catalog created above
Schema Name
Required
The Unity Catalog schema created above
Use Vault
Optional
Pull Client ID/Secret from vault
Client ID and Client Secret
Required
The Databricks execution identity
Notebook Path
Required
Path to the generic notebook (Step 4)
Spark Cluster
Required
Selected from dropdown
Scope the crawl with Containers to Include, Root Directory Path, and Include/Exclude Folder Patterns (glob-style, e.g. gold/*, */_staging/*). Excludes apply after includes are resolved.
The container dropdown lists every container in the account, not just ones your credentials can read — Prizm can’t filter this for a service principal or access token. Selecting an unreadable container shows a toast and auto-removes it from your selection.
Crawl limits: Partition Depth (how many subfolder levels to scan; 0 = root only), Max Files Per Directory, and an Incremental Mode toggle (scan only files changed since the last crawl).Delta Lake tables: when a folder contains a _delta_log, Prizm’s technical catalog step identifies it as a Delta table and catalogs the whole table as one asset (named after the table folder) instead of one asset per part file — reading it via Spark’s Delta format at the table root rather than as standalone Parquet. Updates trigger incremental rematerialization and metric refresh the same way as other ADLS assets. Plain Parquet folders without a _delta_log are unaffected.External storage details (Iceberg tables): if Iceberg tables in this source live in a different storage account than the one configured above, toggle Use External Storage Details and, if needed, Override External Storage Details to enter separate Storage Provider, Tenant ID, Client ID/Secret (or Storage Account Key/SAS Token), Storage Account Name, Resource Group, Container, and Directory Path. This is separate from the Unity Catalog materialization flow — it governs where Prizm reads existing Iceberg tables, not where it writes new ones.Advanced options: define per-asset file-matching rules (Asset Name, File Path, File Pattern) layered on top of Include/Exclude.
4
Set Up the Generic Notebook
A single generic notebook is used for quality-check jobs (separate from the two Unity Catalog notebooks above — all three run independently).
Import the notebook file (provided by your Prizm account team) into your Databricks workspace via Workspace → right-click → Import.
Generate an API token: Prizm platform → your organization → Tokens → Create Token.
Get your MCP host value from your Prizm account team.
Add the token and MCP host to the notebook’s designated fields — or, better, store them as Databricks secrets:
and reference them instead of pasting values directly: dbutils.secrets.get(scope="prizm_notebook_secrets", key="access-token").
Save the notebook to the path entered in Step 3.
Pasting the API token and MCP host directly into the notebook stores them in plain text — treat the notebook as a credential and restrict access accordingly.
5
Service Principal & Databricks CLI Configuration
# Create Databricks secret scopedatabricks secrets create-scope <SECRET_SCOPE_NAME> -p <DATABRICKS_PROFILE># Store Service Principal Client ID and Secretdatabricks secrets put-secret <SECRET_SCOPE_NAME> adls-client-id -p <DATABRICKS_PROFILE>databricks secrets put-secret <SECRET_SCOPE_NAME> adls-client-secret -p <DATABRICKS_PROFILE># Set ACL permission for the Service Principaldatabricks secrets put-acl \ <SECRET_SCOPE_NAME> \ "<SERVICE_PRINCIPAL_APP_ID>" \ READ \ -p <DATABRICKS_PROFILE>
Every job Prizm triggers appears in Databricks under Jobs & Pipelines, named by run date, a static keyword, and the source file name. Job status and logs behave like any other Databricks job. Once a job finishes, results return to Prizm automatically via webhook — no manual step required.
Before the first production run of Iceberg materialization, confirm from within Databricks:
SHOW STORAGE CREDENTIALS; lists the credential from setup
SHOW EXTERNAL LOCATIONS; lists both locations with the correct URLs
DESCRIBE EXTERNAL LOCATION <name>; plus Test connection on each confirms read / read-write access
SHOW SCHEMAS IN <catalog_name>; confirms the target catalog/schema exist
SHOW GRANTS ON CATALOG <catalog_name>;, SHOW GRANTS ON SCHEMA ...;, SHOW GRANTS ON EXTERNAL LOCATION ...; confirm the execution identity’s grants
The execution identity can list/attach to the designated cluster (or launch a job cluster per the agreed policy)
A manual test run of a small known file succeeds: the table appears under <catalog>.<schema>, DESCRIBE DETAIL shows Iceberg-compatible properties, and the webhook payload reaches Prizm with a success status
External data access is enabled on the metastore, the Trino principal has EXTERNAL USE SCHEMA, and Trino can list/query the table via the Iceberg REST endpoint
Once confirmed, notify your Prizm implementation contact to schedule production onboarding.
Job types, compute metric types, and Delta Lake table handling.
FAQ
Common questions and troubleshooting.
Was this page helpful?
⌘I
{"docsConfig":{"theme":"luma","$schema":"https://mintlify.com/docs.json","name":"DQLabs PRIZM","description":"Industry's first AI Native platform where Data Observability, Data Quality, and Context work as one system—turning trust from a manual, reactive process into autonomous operations governed by the enterprise.","colors":{"primary":"#e40404","light":"#f9cdcd","dark":"#747474"},"logo":{"light":"https://media.brand.dev/332adc35-5bc4-4d2b-bf78-256aa4a5e414.svg","dark":"https://media.brand.dev/332adc35-5bc4-4d2b-bf78-256aa4a5e414.svg"},"favicon":"https://media.brand.dev/9afdd2b1-c5b5-4aba-87dd-63e926be4e0e.jpg","navbar":{"primary":{"type":"github","href":"https://github.com/DQLabs-Inc/prizm-ui"}},"seo":{"metatags":{"robots":"index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1","canonical":"https://docs.dqlabs.ai"},"organization":{"name":"DQLabs Inc","logo":"https://media.brand.dev/332adc35-5bc4-4d2b-bf78-256aa4a5e414.svg"}},"integrations":{"ga4":{"measurementId":"G-9XW6S04GGD"}},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"dqlabs","hasAudioNarration":false,"actualSubdomain":"dqlabs","customDomains":["docs.dqlabs.ai"],"gitSource":{"type":"github","owner":"dqlabs-inc","repo":"prizm-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6af49520c5d18096e67ffded","clientVersion":"0.0.4111","searchFilterCounts":[{"language":"default","tag":"Documentation","count":217},{"language":"default","tag":"Architecture","count":88},{"language":"default","tag":"Data Sources","count":54},{"language":"default","tag":"Metric","count":44},{"language":"default","tag":"Integrations","count":40},{"language":"default","tag":"Metric Types","count":40},{"language":"default","tag":"API Reference","count":34},{"language":"default","tag":"Business","count":12},{"language":"default","tag":"Collaboration","count":12},{"language":"default","tag":"Security \u0026 Access Control","count":11}],"searchSettings":{"maxResults":9}},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"sources/adls/setup","slug":"/sources/adls/setup","pageMetadata":{"title":"ADLS Setup","description":"Prerequisites, authentication, Unity Catalog configuration, and step-by-step instructions for connecting ADLS to Prizm — with or without your own Databricks cluster.","icon":"plug","href":"/sources/adls/setup"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Prerequisites, authentication, Unity Catalog configuration, and step-by-step instructions for connecting ADLS to Prizm — with or without your own Databricks cluster.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Card,CardGroup,CodeBlock,Frame,Heading,Note,OptimizedImage,Step,Steps,Tab,Table,Tabs,Warning}=_components;if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Tab)_missingMdxReference(`Tab`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tabs)_missingMdxReference(`Tabs`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(`script`,{type:`application/ld+json`,children:`{\n \"@context\": \"https://schema.org\",\n \"@type\": \"TechArticle\",\n \"headline\": \"ADLS Setup\",\n \"description\": \"Prerequisites, authentication, Unity Catalog configuration, and step-by-step instructions for connecting ADLS to Prizm - with or without your own Databricks cluster.\",\n \"url\": \"https://docs.dqlabs.ai/sources/adls/setup\",\n \"publisher\": {\n \"@type\": \"Organization\",\n \"name\": \"DQLabs Inc\",\n \"logo\": \"https://media.brand.dev/332adc35-5bc4-4d2b-bf78-256aa4a5e414.svg\"\n }\n }`}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`If you’re using `,_jsx(_components.strong,{children:`Prizm Spark`}),` (the default) rather than your own Databricks cluster, none of the Azure/Unity Catalog/Databricks setup below is required — skip straight to `,_jsx(_components.a,{href:`#step-1-configure-your-adls-source`,children:`Step 1: Configure Your ADLS Source`}),`.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`prerequisites-checklist`,children:`Prerequisites Checklist`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{style:{textAlign:`left`},children:`#`}),_jsx(_components.th,{style:{textAlign:`left`},children:`Prerequisite`}),_jsx(_components.th,{style:{textAlign:`left`},children:`Owner`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,style:{textAlign:`left`},children:`1`}),_jsx(_components.td,{style:{textAlign:`left`},children:`ADLS Gen2 storage account with a read-only source container and a separate read-write container for Unity Catalog managed storage`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Azure admin`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,style:{textAlign:`left`},children:`2`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Authentication method chosen and provisioned (Managed Identity recommended, or Service Principal), including the Storage Blob Delegator role for credential vending`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Azure admin`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,style:{textAlign:`left`},children:`3`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Unity Catalog metastore enabled on the Databricks workspace`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Databricks admin`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,style:{textAlign:`left`},children:`4`}),_jsx(_components.td,{style:{textAlign:`left`},children:`UC Storage Credential created, referencing the authentication method above`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Databricks admin`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,style:{textAlign:`left`},children:`5`}),_jsx(_components.td,{style:{textAlign:`left`},children:`UC external locations created for both the read (source) and write (managed storage) containers`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Databricks admin`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,style:{textAlign:`left`},children:`6`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Target UC Catalog and Schema created`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Databricks admin`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,style:{textAlign:`left`},children:`7`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Databricks execution identity for Prizm (OAuth service principal) with required grants`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Databricks admin`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,style:{textAlign:`left`},children:`8`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Cluster designated for Prizm job runs`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Databricks admin`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,style:{textAlign:`left`},children:`9`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Prizm notebooks (Iceberg materializer and exception workflow) deployed to agreed workspace paths`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Prizm, with client review`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,style:{textAlign:`left`},children:`10`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Credential values submitted to Prizm via secure channel`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Client`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`authentication-setup-azure`,children:`Authentication Setup (Azure)`}),`\n`,_jsxs(_components.p,{children:[`Prizm needs `,_jsx(_components.strong,{children:`read-only`}),` access to the container holding source files, and `,_jsx(_components.strong,{children:`read-write`}),` access to a separate container used as Unity Catalog’s managed storage location. Keeping these as two containers, each with its own role assignment, means the source container’s identity holds no write or delete permission at all.`]}),`\n`,_jsxs(Tabs,{children:[_jsxs(Tab,{title:`Managed Identity (Recommended)`,id:`managed-identity-recommended`,children:[_jsxs(_components.p,{children:[`Uses an `,_jsx(_components.strong,{children:`Access Connector for Azure Databricks`}),` — a first-party Azure resource exposing a system- or user-assigned managed identity. One connector serves both containers; no secret is ever generated or stored.`]}),_jsxs(Steps,{children:[_jsx(Step,{title:`Create the Access Connector`,children:_jsxs(_components.p,{children:[`In the Azure Portal, create a resource of type `,_jsx(_components.strong,{children:`Access Connector for Azure Databricks`}),` in the same region/subscription as your Databricks workspace. Copy its Resource ID from the Overview page.`]})}),_jsxs(Step,{title:`Grant the connector access to both containers`,children:[_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{style:{textAlign:`left`},children:`Scope`}),_jsx(_components.th,{style:{textAlign:`left`},children:`Role`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`Read (source) container`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Storage Blob Data Reader`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`Write (managed storage) container`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Storage Blob Data Contributor`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`Storage account (root, not either container)`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Storage Blob Delegator`})]})]})]}),_jsx(Warning,{children:_jsxs(_components.p,{children:[`Storage Blob Delegator must be assigned at the `,_jsx(_components.strong,{children:`storage-account`}),` scope, not the container scope — Azure evaluates it against the account’s blob service endpoint. It only permits signing a delegation token; it grants no data access beyond whatever role (Reader/Contributor) the identity separately holds per container.`]})})]}),_jsx(Step,{title:`Create the storage credential in Databricks`,children:_jsxs(_components.p,{children:[`In Catalog Explorer: `,_jsx(_components.strong,{children:`+ Add → Create a credential`}),`, Credential Type `,_jsx(_components.strong,{children:`Azure Managed Identity`}),`, paste the Access Connector Resource ID. This one credential backs both external locations created next.`]})})]})]}),_jsxs(Tab,{title:`Service Principal`,id:`service-principal`,children:[_jsx(_components.p,{children:`Use only where a managed identity is not permitted by policy. Same container split applies.`}),_jsxs(Steps,{children:[_jsx(Step,{title:`Register the service principal`,children:_jsx(_components.p,{children:`In Microsoft Entra ID, register an application, generate a Client Secret (recorded immediately — shown only once), and note the Application (client) ID and Directory (tenant) ID.`})}),_jsx(Step,{title:`Grant roles per container`,children:_jsx(_components.p,{children:`Storage Blob Data Reader on the read container, Storage Blob Data Contributor on the write container, and Storage Blob Delegator at the storage-account level — all to this service principal.`})}),_jsx(Step,{title:`Create the storage credential in Databricks`,children:_jsxs(_components.p,{children:[`Credential Type `,_jsx(_components.strong,{children:`Azure Service Principal`}),`; enter the Application (client) ID, Directory (tenant) ID, and Client Secret.`]})})]}),_jsx(Warning,{children:_jsx(_components.p,{children:`Service principal secrets expire (typically every 6–24 months) and must be rotated before expiry. Store in Azure Key Vault, never in a notebook or config file. Treat any secret ever shared in plaintext as compromised and rotate immediately.`})})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`unity-catalog-setup`,children:`Unity Catalog Setup`}),`\n`,_jsx(Heading,{level:`3`,id:`external-locations`,children:`External locations`}),`\n`,_jsxs(_components.p,{children:[`Create `,_jsx(_components.strong,{children:`two`}),` external locations from the same storage credential — one per container:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`-- Source (read)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`abfss://\u003cread-container>@\u003cstorage-account>.dfs.core.windows.net/`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`-- Managed storage (write)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`abfss://\u003cwrite-container>@\u003cstorage-account>.dfs.core.windows.net/`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`Grant the Prizm execution identity access on each:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`sql`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`sql`,children:_jsxs(_components.code,{language:`sql`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`GRANT`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` READ`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` FILES `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`ON`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` EXTERNAL`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` LOCATION`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`source_location_name`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` TO`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\" `\u003cservice_principal_application_id>`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`GRANT`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` READ`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` FILES, WRITE FILES `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`ON`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` EXTERNAL`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` LOCATION`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`write_location_name`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` TO`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\" `\u003cservice_principal_application_id>`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`]})})}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`For ADLS + Databricks Unity Catalog clients, exception and metadata instruction JSON is staged under the write external location (`,_jsx(_components.code,{children:`abfss://…/staging/{run_id}/…`}),`) rather than uploaded to Prizm SaaS S3 or via a scheduled Azure Blob upload as in earlier releases. The `,_jsx(_components.code,{children:`WRITE FILES`}),` grant above already covers this — no separate grant is required. Open-network clients are unaffected and keep the existing S3 HTTPS path.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`exception-staging-via-a-unity-catalog-volume`,children:`Exception Staging via a Unity Catalog Volume`}),`\n`,_jsxs(_components.p,{children:[`As an alternative to staging exception/metadata instruction JSON directly under the write external location, you can stage it in a dedicated Unity Catalog `,_jsx(_components.strong,{children:`Volume`}),`. Choose one of the two options below depending on whether you want the volume backed by a specific path on your existing ADLS container or by Unity Catalog’s own managed storage.`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Option A: External volume on the existing ADLS path`})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`sql`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`sql`,children:_jsxs(_components.code,{language:`sql`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`CREATE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` SCHEMA`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` IF`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` NOT`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` EXISTS`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`catalog`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`schema`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`CREATE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` EXTERNAL`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` VOLUME `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`IF`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` NOT`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` EXISTS`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`catalog`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`schema`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.exception_staging`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`LOCATION`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'abfss://\u003ccontainer>@\u003caccount>.dfs.core.windows.net/\u003cpath>/staging'`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`COMMENT `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'Staging for exception writeback instruction JSON'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Option B: Managed volume`})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`sql`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`sql`,children:_jsxs(_components.code,{language:`sql`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`CREATE`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` VOLUME `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`IF`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` NOT`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` EXISTS`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`catalog`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`schema`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.exception_staging;`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Grants on the volume`})}),`\n`,_jsx(_components.p,{children:`This approach uses two separate identities — the service that uploads the exception JSON, and the identity the notebook job runs as — so each gets only the access it needs:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`9`,language:`sql`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`sql`,children:_jsxs(_components.code,{language:`sql`,numberOfLines:`9`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`-- Identity that uploads the JSON via the Files API (your Ray service's SP)`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`GRANT`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` USE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` CATALOG`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` ON`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` CATALOG`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`catalog`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` TO`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\" `\u003csp-application-id>`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`GRANT`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` USE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` SCHEMA`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` ON`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` SCHEMA`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`catalog`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`schema`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` TO`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\" `\u003csp-application-id>`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`GRANT`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` WRITE VOLUME `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`ON`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` VOLUME `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`catalog`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`schema`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.exception_staging `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`TO`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\" `\u003csp-application-id>`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`-- Identity the job runs as (the notebook reads the file)`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`GRANT`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` USE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` CATALOG`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` ON`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` CATALOG`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`catalog`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` TO`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\" `\u003cjob-run-as-principal>`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`GRANT`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` USE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` SCHEMA`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` ON`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` SCHEMA`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`catalog`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`schema`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` TO`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\" `\u003cjob-run-as-principal>`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`GRANT`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` READ`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` VOLUME `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`ON`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` VOLUME `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`catalog`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`schema`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.exception_staging `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`TO`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\" `\u003cjob-run-as-principal>`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`catalog-and-schema`,children:`Catalog and schema`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`7`,language:`sql`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`sql`,children:_jsxs(_components.code,{language:`sql`,numberOfLines:`7`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`CREATE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` CATALOG`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` IF`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` NOT`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` EXISTS`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`catalog_name`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` MANAGED `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`LOCATION`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'abfss://\u003cwrite-container>@\u003cstorage-account>.dfs.core.windows.net/\u003cmanaged-subpath>'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`CREATE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` SCHEMA`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` IF`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` NOT`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` EXISTS`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`catalog_name`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`schema_name`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`GRANT`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` USE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` CATALOG`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` ON`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` CATALOG`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`catalog_name`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` TO`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\" `\u003cservice_principal_application_id>`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`GRANT`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` USE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` SCHEMA`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`CREATE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` TABLE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` ON`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` SCHEMA`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`catalog_name`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`schema_name`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` TO`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\" `\u003cservice_principal_application_id>`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`If your metastore already has default managed storage configured at the account level, the `,_jsx(_components.code,{children:`MANAGED LOCATION`}),` clause can be omitted.`]}),`\n`,_jsx(Heading,{level:`3`,id:`trino-/-external-engine-access`,children:`Trino / external engine access`}),`\n`,_jsxs(_components.p,{children:[`Because tables are written with Delta UniForm (Iceberg compatibility), any Iceberg REST catalog client — Trino, external Spark, Snowflake, DuckDB — can read them once pointed at your metastore’s Iceberg REST endpoint (`,_jsx(_components.code,{children:`/api/2.1/unity-catalog/iceberg-rest`}),`). This is governed independently of the grants above and requires two extra steps:`]}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Enable external data access on the metastore`}),` — a one-time, metastore-level setting a metastore admin turns on (Catalog → gear icon → metastore settings), not a SQL statement.`]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`Grant `,_jsx(_components.code,{children:`EXTERNAL USE SCHEMA`})]}),` to whichever identity Trino authenticates as:`,`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`sql`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`sql`,children:_jsxs(_components.code,{language:`sql`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`GRANT`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` EXTERNAL`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` USE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` SCHEMA`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` ON`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` SCHEMA`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`catalog_name`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`schema_name`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` TO`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\" `\u003ctrino-principal>`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`]})})}),`\n`]}),`\n`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`This external-access pathway is currently in `,_jsx(_components.strong,{children:`Public Preview`}),` on Databricks — confirm with your Databricks account team that it’s enabled if you haven’t used it before. For Trino catalog authentication, only client ID/secret/tenant ID are provided, not a pre-generated token; Trino requests its own token per call, so there’s nothing to rotate by hand.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`consolidated-grant-script`,children:`Consolidated grant script`}),`\n`,_jsx(_components.p,{children:`All grants above, in one pass (substitute your real values for every placeholder):`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`15`,language:`sql`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`sql`,children:_jsxs(_components.code,{language:`sql`,numberOfLines:`15`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`-- 1. Catalog \u0026 schema metadata grants`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`GRANT`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` USE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` CATALOG`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` ON`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` CATALOG`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`CATALOG_NAME`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` TO`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\" `\u003cSERVICE_PRINCIPAL_APP_ID>`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`GRANT`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` USE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` SCHEMA`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` ON`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` SCHEMA`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`CATALOG_NAME`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`SCHEMA_NAME`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` TO`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\" `\u003cSERVICE_PRINCIPAL_APP_ID>`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`GRANT`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` EXTERNAL`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` USE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` SCHEMA`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` ON`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` SCHEMA`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`CATALOG_NAME`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`SCHEMA_NAME`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` TO`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\" `\u003cSERVICE_PRINCIPAL_APP_ID>`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`GRANT`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` SELECT`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` ON`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` SCHEMA`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`CATALOG_NAME`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`SCHEMA_NAME`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` TO`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\" `\u003cSERVICE_PRINCIPAL_APP_ID>`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`GRANT`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` CREATE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` TABLE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` ON`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` SCHEMA`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`CATALOG_NAME`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`SCHEMA_NAME`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` TO`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\" `\u003cSERVICE_PRINCIPAL_APP_ID>`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`-- 2. Storage credential grant`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`GRANT`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` READ`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` FILES `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`ON`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` STORAGE `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`CREDENTIAL`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\" `\u003cSTORAGE_CREDENTIAL_NAME>`\"}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` TO`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\" `\u003cSERVICE_PRINCIPAL_APP_ID>`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`-- 3. Read grant per source external location (repeat for each additional read container)`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`GRANT`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` READ`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` FILES `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`ON`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` EXTERNAL`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` LOCATION`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\" `\u003cREAD_EXTERNAL_LOCATION_NAME_1>`\"}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` TO`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\" `\u003cSERVICE_PRINCIPAL_APP_ID>`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`-- 4. Managed storage (write) external location grant — also covers exception-JSON staging`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`GRANT`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` READ`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` FILES, WRITE FILES `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`ON`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` EXTERNAL`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` LOCATION`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\" `\u003cWRITE_EXTERNAL_LOCATION_NAME>`\"}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` TO`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\" `\u003cSERVICE_PRINCIPAL_APP_ID>`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`databricks-workspace-access`,children:`Databricks Workspace Access`}),`\n`,_jsx(Heading,{level:`3`,id:`execution-identity`,children:`Execution identity`}),`\n`,_jsxs(_components.p,{children:[`Prizm authenticates using an `,_jsx(_components.strong,{children:`OAuth service principal`}),` — a Databricks service principal with a client ID and OAuth secret, scoped only to what Prizm needs. Create it under Account Console → User management → Service principals, generate a secret on its Secrets tab, and store both values in a secrets manager.`]}),`\n`,_jsx(Heading,{level:`3`,id:`notebook-paths`,children:`Notebook paths`}),`\n`,_jsx(_components.p,{children:`Two notebooks are deployed to workspace paths your team agrees on:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{style:{textAlign:`left`},children:`Notebook`}),_jsx(_components.th,{style:{textAlign:`left`},children:`Purpose`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.code,{children:`adls_uc_iceberg_materializer`})}),_jsx(_components.td,{style:{textAlign:`left`},children:`Reads each onboarded source file and creates the corresponding Iceberg-compatible Delta table`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.code,{children:`adls_uc_exception_workflow`})}),_jsxs(_components.td,{style:{textAlign:`left`},children:[`Writes exception records to a dedicated exception table (created once, reused every run). Also runs the `,_jsx(_components.code,{children:`STAGE_EXCEPTION_JSON`}),` job type for exception/metadata JSON staging — not a separate notebook`]})]})]})]}),`\n`,_jsxs(_components.p,{children:[`The execution identity needs `,_jsx(_components.code,{children:`CAN_RUN`}),` (minimum) or `,_jsx(_components.code,{children:`CAN_MANAGE`}),` permission on both paths.`]}),`\n`,_jsx(Heading,{level:`3`,id:`compute`,children:`Compute`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{style:{textAlign:`left`},children:`Requirement`}),_jsx(_components.th,{style:{textAlign:`left`},children:`Minimum`}),_jsx(_components.th,{style:{textAlign:`left`},children:`Recommended`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`Databricks Runtime`}),_jsx(_components.td,{style:{textAlign:`left`},children:`14.3 LTS (must support Unity Catalog + Delta UniForm)`}),_jsx(_components.td,{style:{textAlign:`left`},children:`16.4 LTS`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`Node Type`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Standard_D4s_v3 / m4.xlarge`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Standard_D4s_v3 / m4.xlarge or higher`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`Min / Max Workers`}),_jsx(_components.td,{\"data-numeric\":`true`,style:{textAlign:`left`},children:`2 / 16`}),_jsx(_components.td,{\"data-numeric\":`true`,style:{textAlign:`left`},children:`2 / 16`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`Memory per Node`}),_jsx(_components.td,{\"data-numeric\":`true`,style:{textAlign:`left`},children:`8 GB`}),_jsx(_components.td,{\"data-numeric\":`true`,style:{textAlign:`left`},children:`16 GB`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`Cores per Node`}),_jsx(_components.td,{\"data-numeric\":`true`,style:{textAlign:`left`},children:`2`}),_jsx(_components.td,{\"data-numeric\":`true`,style:{textAlign:`left`},children:`4`})]})]})]}),`\n`,_jsx(_components.p,{children:`Provide either an existing all-purpose/job cluster ID, or permission for Prizm to launch a job cluster automatically with an agreed instance type, DBR version, and pool/AZ constraints.`}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`Approximate load handling: a 100 MB / ~1M row file scans in 1–3 minutes; a 10 GB / ~100M row file takes roughly 30–90 minutes, depending on worker count. Actual timings vary with file format, column count, and configured checks.`})}),`\n`,_jsx(Heading,{level:`2`,id:`submitting-credentials-to-prizm`,children:`Submitting Credentials to Prizm`}),`\n`,_jsx(_components.p,{children:`Return credentials through a secure channel only — never by email, chat, or in a shared notebook cell.`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Accepted delivery methods:`}),` Azure Key Vault (preferred — grant Prizm’s service principal Get/List access on the specific secrets, share only the vault URI and secret names), Prizm’s secure credential intake form, or a password-protected secrets-manager entry with the password relayed out-of-band.`]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`Treat any credential that has ever been pasted into a notebook cell, chat message, or shared document as compromised — rotate it before use, even if submitting through Key Vault going forward.`})}),`\n`,_jsx(Heading,{level:`2`,id:`setting-up-the-connection`,children:`Setting Up the Connection`}),`\n`,_jsx(_components.p,{children:`Steps 1–3 happen in the Prizm portal; Steps 4–5 happen in Databricks.`}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`Configure Your ADLS Source`,children:[_jsxs(_components.p,{children:[`On the `,_jsx(_components.strong,{children:`Source`}),` page, click the `,_jsx(_components.strong,{children:`+`}),` icon next to the source list, select `,_jsx(_components.strong,{children:`Azure Data Lake Storage`}),`, and complete:`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{style:{textAlign:`left`},children:`Field`}),_jsx(_components.th,{style:{textAlign:`left`},children:`Required`}),_jsx(_components.th,{style:{textAlign:`left`},children:`Notes`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`Connection Name`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Required`}),_jsxs(_components.td,{style:{textAlign:`left`},children:[`e.g. `,_jsx(_components.code,{children:`adls-finance-prod`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`Description`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Optional`}),_jsx(_components.td,{style:{textAlign:`left`}})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`Tenant ID`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Required`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Your Azure AD tenant ID`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`Authentication Type`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Required`}),_jsxs(_components.td,{style:{textAlign:`left`},children:[_jsx(_components.strong,{children:`Service Principal`}),` (+ Storage Account Name, Client ID, Client Secret) or `,_jsx(_components.strong,{children:`Storage Access Key`}),` (+ Storage Account Name, Storage Access Key)`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`Use Vault`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Optional`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Pull credentials from a configured vault instead of entering directly`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`File Type`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Required`}),_jsx(_components.td,{style:{textAlign:`left`},children:`csv, parquet, or delta`})]})]})]}),_jsx(_components.p,{children:`Prizm validates credentials on save and uses them both to read files and to list containers in the account. If no containers appear, confirm list access on the storage account.`}),_jsx(Frame,{caption:`ADLS source details. Service Principal is the default authentication type`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/dqlabs/-llXdpktU4fg82jU/images/sources/adls/form-top.png?fit=max\u0026auto=format\u0026n=-llXdpktU4fg82jU\u0026q=85\u0026s=bccb12c96a539e7823c162dc4b35db1d`,alt:`The Azure Data Lake Storage Source Details form`,\"data-og-width\":`1339`,width:`1339`,\"data-og-height\":`640`,height:`640`,\"data-path\":`images/sources/adls/form-top.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/dqlabs/-llXdpktU4fg82jU/images/sources/adls/form-top.png?w=280\u0026fit=max\u0026auto=format\u0026n=-llXdpktU4fg82jU\u0026q=85\u0026s=2ea93943671c521b335c4ee6bf071da7 280w, https://mintcdn.com/dqlabs/-llXdpktU4fg82jU/images/sources/adls/form-top.png?w=560\u0026fit=max\u0026auto=format\u0026n=-llXdpktU4fg82jU\u0026q=85\u0026s=07568ae098ebc153a91dd535285d4ffc 560w, https://mintcdn.com/dqlabs/-llXdpktU4fg82jU/images/sources/adls/form-top.png?w=840\u0026fit=max\u0026auto=format\u0026n=-llXdpktU4fg82jU\u0026q=85\u0026s=7f692d9b3d8a0259e62ece384b2cf89f 840w, https://mintcdn.com/dqlabs/-llXdpktU4fg82jU/images/sources/adls/form-top.png?w=1100\u0026fit=max\u0026auto=format\u0026n=-llXdpktU4fg82jU\u0026q=85\u0026s=5a6e4abe796f6e0acce16240f9e9dc1e 1100w, https://mintcdn.com/dqlabs/-llXdpktU4fg82jU/images/sources/adls/form-top.png?w=1650\u0026fit=max\u0026auto=format\u0026n=-llXdpktU4fg82jU\u0026q=85\u0026s=1362900a8e79da41b99d7a91b48bd08b 1650w, https://mintcdn.com/dqlabs/-llXdpktU4fg82jU/images/sources/adls/form-top.png?w=2500\u0026fit=max\u0026auto=format\u0026n=-llXdpktU4fg82jU\u0026q=85\u0026s=c18a01c7bc74dabdc77056f45fbf9375 2500w`})}),_jsx(Frame,{caption:`Tenant ID, Client ID, Client Secret and File Type`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/dqlabs/-llXdpktU4fg82jU/images/sources/adls/form-bottom.png?fit=max\u0026auto=format\u0026n=-llXdpktU4fg82jU\u0026q=85\u0026s=0c6b4cfe56441e6e5d65844eccb88885`,alt:`The Azure Data Lake Storage credential fields and File Type dropdown`,\"data-og-width\":`1339`,width:`1339`,\"data-og-height\":`668`,height:`668`,\"data-path\":`images/sources/adls/form-bottom.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/dqlabs/-llXdpktU4fg82jU/images/sources/adls/form-bottom.png?w=280\u0026fit=max\u0026auto=format\u0026n=-llXdpktU4fg82jU\u0026q=85\u0026s=2d6b4114b961070cafa0922921085832 280w, https://mintcdn.com/dqlabs/-llXdpktU4fg82jU/images/sources/adls/form-bottom.png?w=560\u0026fit=max\u0026auto=format\u0026n=-llXdpktU4fg82jU\u0026q=85\u0026s=79a5e21a2effc16c171d93cfd3921cde 560w, https://mintcdn.com/dqlabs/-llXdpktU4fg82jU/images/sources/adls/form-bottom.png?w=840\u0026fit=max\u0026auto=format\u0026n=-llXdpktU4fg82jU\u0026q=85\u0026s=6671305bab4ec5313b94b3b54b0da27c 840w, https://mintcdn.com/dqlabs/-llXdpktU4fg82jU/images/sources/adls/form-bottom.png?w=1100\u0026fit=max\u0026auto=format\u0026n=-llXdpktU4fg82jU\u0026q=85\u0026s=8ca6abb559ff572a41618d50488367a4 1100w, https://mintcdn.com/dqlabs/-llXdpktU4fg82jU/images/sources/adls/form-bottom.png?w=1650\u0026fit=max\u0026auto=format\u0026n=-llXdpktU4fg82jU\u0026q=85\u0026s=8a27c1ff1bd9f619ab5bcf191792348a 1650w, https://mintcdn.com/dqlabs/-llXdpktU4fg82jU/images/sources/adls/form-bottom.png?w=2500\u0026fit=max\u0026auto=format\u0026n=-llXdpktU4fg82jU\u0026q=85\u0026s=fc1df5f1682b0e66c0868b8947fdd154 2500w`})})]}),_jsxs(Step,{title:`Choose Your Compute Engine`,children:[_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{style:{textAlign:`left`},children:`Option`}),_jsx(_components.th,{style:{textAlign:`left`},children:`Result`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsxs(_components.td,{style:{textAlign:`left`},children:[_jsx(_components.strong,{children:`Prizm Spark`}),` (default)`]}),_jsx(_components.td,{style:{textAlign:`left`},children:`No further setup — skip to Monitoring`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.strong,{children:`Use Databricks Spark Cluster`})}),_jsx(_components.td,{style:{textAlign:`left`},children:`Continue to Step 3`})]})]})]}),_jsx(Warning,{children:_jsx(_components.p,{children:`Keep your Databricks cluster running during setup — a stopped cluster will not appear in the dropdown.`})})]}),_jsxs(Step,{title:`Connect Your Databricks Cluster`,children:[_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{style:{textAlign:`left`},children:`Field`}),_jsx(_components.th,{style:{textAlign:`left`},children:`Required`}),_jsx(_components.th,{style:{textAlign:`left`},children:`Notes`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`Platform Type`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Required`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Databricks Spark`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`Databricks Server`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Required`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Your workspace URL`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`Catalog Name`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Required`}),_jsx(_components.td,{style:{textAlign:`left`},children:`The Unity Catalog catalog created above`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`Schema Name`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Required`}),_jsx(_components.td,{style:{textAlign:`left`},children:`The Unity Catalog schema created above`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`Use Vault`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Optional`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Pull Client ID/Secret from vault`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`Client ID and Client Secret`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Required`}),_jsx(_components.td,{style:{textAlign:`left`},children:`The Databricks execution identity`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`Notebook Path`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Required`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Path to the generic notebook (Step 4)`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`Spark Cluster`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Required`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Selected from dropdown`})]})]})]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Scope the crawl`}),` with Containers to Include, Root Directory Path, and Include/Exclude Folder Patterns (glob-style, e.g. `,_jsx(_components.code,{children:`gold/*`}),`, `,_jsx(_components.code,{children:`*/_staging/*`}),`). Excludes apply after includes are resolved.`]}),_jsx(Note,{children:_jsx(_components.p,{children:`The container dropdown lists every container in the account, not just ones your credentials can read — Prizm can’t filter this for a service principal or access token. Selecting an unreadable container shows a toast and auto-removes it from your selection.`})}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Crawl limits:`}),` Partition Depth (how many subfolder levels to scan; 0 = root only), Max Files Per Directory, and an Incremental Mode toggle (scan only files changed since the last crawl).`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Delta Lake tables:`}),` when a folder contains a `,_jsx(_components.code,{children:`_delta_log`}),`, Prizm’s technical catalog step identifies it as a Delta table and catalogs the whole table as one asset (named after the table folder) instead of one asset per part file — reading it via Spark’s Delta format at the table root rather than as standalone Parquet. Updates trigger incremental rematerialization and metric refresh the same way as other ADLS assets. Plain Parquet folders without a `,_jsx(_components.code,{children:`_delta_log`}),` are unaffected.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`External storage details (Iceberg tables):`}),` if Iceberg tables in this source live in a `,_jsx(_components.em,{children:`different`}),` storage account than the one configured above, toggle `,_jsx(_components.strong,{children:`Use External Storage Details`}),` and, if needed, `,_jsx(_components.strong,{children:`Override External Storage Details`}),` to enter separate Storage Provider, Tenant ID, Client ID/Secret (or Storage Account Key/SAS Token), Storage Account Name, Resource Group, Container, and Directory Path. This is separate from the Unity Catalog materialization flow — it governs where Prizm `,_jsx(_components.em,{children:`reads`}),` existing Iceberg tables, not where it `,_jsx(_components.em,{children:`writes`}),` new ones.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Advanced options:`}),` define per-asset file-matching rules (Asset Name, File Path, File Pattern) layered on top of Include/Exclude.`]})]}),_jsxs(Step,{title:`Set Up the Generic Notebook`,children:[_jsx(_components.p,{children:`A single generic notebook is used for quality-check jobs (separate from the two Unity Catalog notebooks above — all three run independently).`}),_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Import the notebook file (provided by your Prizm account team) into your Databricks workspace via Workspace → right-click → Import.`}),`\n`,_jsx(_components.li,{children:`Generate an API token: Prizm platform → your organization → Tokens → Create Token.`}),`\n`,_jsx(_components.li,{children:`Get your MCP host value from your Prizm account team.`}),`\n`,_jsxs(_components.li,{children:[`Add the token and MCP host to the notebook’s designated fields — or, better, store them as Databricks secrets:`,`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`databricks`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` secrets`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` create-scope`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"prizm_notebook_secrets\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`databricks`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` secrets`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` put-secret`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --json`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '{\"scope\": \"prizm_notebook_secrets\", \"key\": \"access-token\", \"string_value\": \"\u003cyour-api-token>\"}'`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`databricks`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` secrets`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` put-secret`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --json`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '{\"scope\": \"prizm_notebook_secrets\", \"key\": \"mcp-host\", \"string_value\": \"\u003cyour-mcp-host-value>\"}'`})]}),`\n`]})})}),`\n`,`and reference them instead of pasting values directly: `,_jsx(_components.code,{children:`dbutils.secrets.get(scope=\"prizm_notebook_secrets\", key=\"access-token\")`}),`.`]}),`\n`,_jsx(_components.li,{children:`Save the notebook to the path entered in Step 3.`}),`\n`]}),_jsx(Warning,{children:_jsx(_components.p,{children:`Pasting the API token and MCP host directly into the notebook stores them in plain text — treat the notebook as a credential and restrict access accordingly.`})})]}),_jsx(Step,{title:`Service Principal \u0026 Databricks CLI Configuration`,children:_jsx(CodeBlock,{filename:``,numberOfLines:`13`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`13`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Create Databricks secret scope`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`databricks`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` secrets`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` create-scope`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`SECRET_SCOPE_NAM`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`E`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -p`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`DATABRICKS_PROFIL`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`E`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Store Service Principal Client ID and Secret`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`databricks`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` secrets`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` put-secret`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`SECRET_SCOPE_NAM`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`E`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` adls-client-id`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -p`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`DATABRICKS_PROFIL`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`E`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`databricks`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` secrets`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` put-secret`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`SECRET_SCOPE_NAM`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`E`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` adls-client-secret`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -p`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`DATABRICKS_PROFIL`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`E`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Set ACL permission for the Service Principal`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`databricks`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` secrets`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` put-acl`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`SECRET_SCOPE_NAM`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`E`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"\u003cSERVICE_PRINCIPAL_APP_ID>\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` READ`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -p`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`DATABRICKS_PROFIL`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`E`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`})]}),`\n`]})})})})]}),`\n`,_jsx(Heading,{level:`2`,id:`monitoring-your-jobs`,children:`Monitoring Your Jobs`}),`\n`,_jsxs(_components.p,{children:[`Every job Prizm triggers appears in Databricks under `,_jsx(_components.strong,{children:`Jobs \u0026 Pipelines`}),`, named by run date, a static keyword, and the source file name. Job status and logs behave like any other Databricks job. Once a job finishes, results return to Prizm automatically via webhook — no manual step required.`]}),`\n`,_jsx(Heading,{level:`2`,id:`pre-go-live-validation-checklist`,children:`Pre-Go-Live Validation Checklist`}),`\n`,_jsx(_components.p,{children:`Before the first production run of Iceberg materialization, confirm from within Databricks:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`SHOW STORAGE CREDENTIALS;`}),` lists the credential from setup`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`SHOW EXTERNAL LOCATIONS;`}),` lists both locations with the correct URLs`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`DESCRIBE EXTERNAL LOCATION \u003cname>;`}),` plus `,_jsx(_components.strong,{children:`Test connection`}),` on each confirms read / read-write access`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`SHOW SCHEMAS IN \u003ccatalog_name>;`}),` confirms the target catalog/schema exist`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`SHOW GRANTS ON CATALOG \u003ccatalog_name>;`}),`, `,_jsx(_components.code,{children:`SHOW GRANTS ON SCHEMA ...;`}),`, `,_jsx(_components.code,{children:`SHOW GRANTS ON EXTERNAL LOCATION ...;`}),` confirm the execution identity’s grants`]}),`\n`,_jsx(_components.li,{children:`The execution identity can list/attach to the designated cluster (or launch a job cluster per the agreed policy)`}),`\n`,_jsxs(_components.li,{children:[`A manual test run of a small known file succeeds: the table appears under `,_jsx(_components.code,{children:`\u003ccatalog>.\u003cschema>`}),`, `,_jsx(_components.code,{children:`DESCRIBE DETAIL`}),` shows Iceberg-compatible properties, and the webhook payload reaches Prizm with a success status`]}),`\n`,_jsxs(_components.li,{children:[`External data access is enabled on the metastore, the Trino principal has `,_jsx(_components.code,{children:`EXTERNAL USE SCHEMA`}),`, and Trino can list/query the table via the Iceberg REST endpoint`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Once confirmed, notify your Prizm implementation contact to schedule production onboarding.`}),`\n`,_jsx(Heading,{level:`2`,id:`next-steps`,children:`Next Steps`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`What We Collect`,icon:`database`,href:`/sources/adls/what-we-collect`,children:_jsx(_components.p,{children:`Job types, compute metric types, and Delta Lake table handling.`})}),_jsx(Card,{title:`FAQ`,icon:`circle-question`,href:`/sources/adls/faq`,children:_jsx(_components.p,{children:`Common questions and troubleshooting.`})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"ADLS Setup","description":"Prerequisites, authentication, Unity Catalog configuration, and step-by-step instructions for connecting ADLS to Prizm — with or without your own Databricks cluster.","icon":"plug","href":"/sources/adls/setup"}}},"mdxSourceWithNoJs":null,"noJsSplices":[[1133,1903,""]]},"mdxExtracts":{"tableOfContents":[{"title":"Prerequisites Checklist","slug":"prerequisites-checklist","depth":2,"children":[]},{"title":"Authentication Setup (Azure)","slug":"authentication-setup-azure","depth":2,"children":[]},{"title":"Unity Catalog Setup","slug":"unity-catalog-setup","depth":2,"children":[{"title":"External locations","slug":"external-locations","depth":3,"children":[]},{"title":"Exception Staging via a Unity Catalog Volume","slug":"exception-staging-via-a-unity-catalog-volume","depth":3,"children":[]},{"title":"Catalog and schema","slug":"catalog-and-schema","depth":3,"children":[]},{"title":"Trino / external engine access","slug":"trino-/-external-engine-access","depth":3,"children":[]},{"title":"Consolidated grant script","slug":"consolidated-grant-script","depth":3,"children":[]}]},{"title":"Databricks Workspace Access","slug":"databricks-workspace-access","depth":2,"children":[{"title":"Execution identity","slug":"execution-identity","depth":3,"children":[]},{"title":"Notebook paths","slug":"notebook-paths","depth":3,"children":[]},{"title":"Compute","slug":"compute","depth":3,"children":[]}]},{"title":"Submitting Credentials to Prizm","slug":"submitting-credentials-to-prizm","depth":2,"children":[]},{"title":"Setting Up the Connection","slug":"setting-up-the-connection","depth":2,"children":[]},{"title":"Monitoring Your Jobs","slug":"monitoring-your-jobs","depth":2,"children":[]},{"title":"Pre-Go-Live Validation Checklist","slug":"pre-go-live-validation-checklist","depth":2,"children":[]},{"title":"Next Steps","slug":"next-steps","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"dqlabs","siteName":"DQLabs PRIZM","title":"ADLS Setup - DQLabs PRIZM","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-21T16:07:33.412Z","originalFileLocation":"sources/adls/setup.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Prerequisites, authentication, Unity Catalog configuration, and step-by-step instructions for connecting ADLS to Prizm — with or without your own Databricks cluster.\">\u003cmeta data-mint-head name=\"application-name\" content=\"DQLabs PRIZM\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003cmeta data-mint-head name=\"robots\" content=\"index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/jpeg\" sizes=\"180x180\" href=\"https://media.brand.dev/9afdd2b1-c5b5-4aba-87dd-63e926be4e0e.jpg\">\u003clink data-mint-head rel=\"icon\" type=\"image/jpeg\" sizes=\"32x32\" href=\"https://media.brand.dev/9afdd2b1-c5b5-4aba-87dd-63e926be4e0e.jpg\">\u003clink data-mint-head rel=\"icon\" type=\"image/jpeg\" sizes=\"16x16\" href=\"https://media.brand.dev/9afdd2b1-c5b5-4aba-87dd-63e926be4e0e.jpg\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/jpeg\" href=\"https://media.brand.dev/9afdd2b1-c5b5-4aba-87dd-63e926be4e0e.jpg\">\u003cmeta data-mint-head property=\"og:title\" content=\"ADLS Setup - DQLabs PRIZM\">\u003cmeta data-mint-head property=\"og:description\" content=\"Prerequisites, authentication, Unity Catalog configuration, and step-by-step instructions for connecting ADLS to Prizm — with or without your own Databricks cluster.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"DQLabs PRIZM\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.dqlabs.ai/sources/adls/setup\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://dqlabs.mintlify.site/_mintlify/api/og/v2?division=ADLS\u0026amp;title=ADLS+Setup\u0026amp;description=Prerequisites%2C+authentication%2C+Unity+Catalog+configuration%2C+and+step-by-step+instructions+for+connecting+ADLS+to+Prizm+%E2%80%94+with+or+without+your+own+Databricks+clu\u0026amp;theme=427ee605c16ad5234d5bc748\u0026amp;signature=6ceefb10f4c677eb91d803b31dedfee66993d16bf7f162ea878d85734329183d\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"ADLS Setup - DQLabs PRIZM\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Prerequisites, authentication, Unity Catalog configuration, and step-by-step instructions for connecting ADLS to Prizm — with or without your own Databricks cluster.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://dqlabs.mintlify.site/_mintlify/api/og/v2?division=ADLS\u0026amp;title=ADLS+Setup\u0026amp;description=Prerequisites%2C+authentication%2C+Unity+Catalog+configuration%2C+and+step-by-step+instructions+for+connecting+ADLS+to+Prizm+%E2%80%94+with+or+without+your+own+Databricks+clu\u0026amp;theme=427ee605c16ad5234d5bc748\u0026amp;signature=6ceefb10f4c677eb91d803b31dedfee66993d16bf7f162ea878d85734329183d\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"https://mintlify.s3.us-west-1.amazonaws.com/dqlabs/_generated/favicon/browserconfig.xml?v=3\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"DQLabs PRIZM\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#e40404\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.dqlabs.ai/sources/adls/setup\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/sources/adls/setup.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.dqlabs.ai/#organization\",\"name\":\"DQLabs Inc\",\"url\":\"https://docs.dqlabs.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://media.brand.dev/332adc35-5bc4-4d2b-bf78-256aa4a5e414.svg\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.dqlabs.ai#website\",\"name\":\"DQLabs PRIZM\",\"url\":\"https://docs.dqlabs.ai\",\"publisher\":{\"@id\":\"https://docs.dqlabs.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.dqlabs.ai/sources/adls/setup#webpage\",\"url\":\"https://docs.dqlabs.ai/sources/adls/setup\",\"name\":\"ADLS Setup\",\"description\":\"Prerequisites, authentication, Unity Catalog configuration, and step-by-step instructions for connecting ADLS to Prizm — with or without your own Databricks cluster.\",\"dateModified\":\"2026-10-21T16:07:33.412Z\",\"isPartOf\":{\"@id\":\"https://docs.dqlabs.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.dqlabs.ai/sources/adls/setup#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.dqlabs.ai/sources/adls/setup#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Data Sources\",\"item\":\"https://docs.dqlabs.ai/sources/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"ADLS\",\"item\":\"https://docs.dqlabs.ai/sources/adls/overview\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"ADLS Setup\",\"item\":\"https://docs.dqlabs.ai/sources/adls/setup\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.dqlabs.ai/sources/adls/setup#article\",\"headline\":\"ADLS Setup\",\"name\":\"ADLS Setup\",\"description\":\"Prerequisites, authentication, Unity Catalog configuration, and step-by-step instructions for connecting ADLS to Prizm — with or without your own Databricks cluster.\",\"url\":\"https://docs.dqlabs.ai/sources/adls/setup\",\"mainEntityOfPage\":{\"@id\":\"https://docs.dqlabs.ai/sources/adls/setup#webpage\"},\"dateModified\":\"2026-10-21T16:07:33.412Z\",\"publisher\":{\"@id\":\"https://docs.dqlabs.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.dqlabs.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"DQLabs PRIZM\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"DQLabs Inc\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/sources/adls/setup.md","siteName":"DQLabs PRIZM","nav":{"global":null,"tabs":[{"tab":"Documentation","icon":"dochub","groups":[{"group":"Get Started","icon":"running","pages":[{"title":"What is PRIZM? ","icon":"triangle","href":"/introduction"},{"title":"Sign in \u0026 Invite your team","icon":"user-check","href":"/quickstart"},{"title":"Get up and running with PRIZM: a step-by-step guide","icon":"rocket-launch","href":"/login"}]},{"group":"Core Concepts","icon":"apple-core","pages":[{"title":"Assets: Discover and manage your context in PRIZM","icon":"album-collection","mode":"wide","href":"/concepts/assets"},{"title":"Metrics: Monitor data quality and pipeline health in PRIZM","icon":"badge-check","href":"/concepts/metrics"},{"title":"Alerts: Automatic data drift and quality notifications","icon":"bolt-lightning","href":"/concepts/alerts"},{"title":"Issues: Manage data problems from detection to fix","icon":"bug","href":"/concepts/issues"}]},{"group":"Platform","icon":"laptop-code","pages":[{"title":"Platform Overview","icon":"grid","href":"/platform/overview"},{"title":"Multi-Agent Architecture","icon":"network-wired","href":"/platform/multi-agent-architecture"},{"title":"Autonomous Intelligence","icon":"brain","href":"/platform/autonomous-intelligence"},{"title":"AI \u0026 ML Capabilities","icon":"user-robot","href":"/platform/ai-and-ml-capabilities"},{"title":"Converse — AI Chat Interface","icon":"comments","href":"/platform/converse"},{"title":"AI Stewardship","icon":"robot","href":"/platform/ai-stewardship"}]},{"group":"Architecture","icon":"crate-apple","pages":[{"title":"Architecture Overview","icon":"server","href":"/architecture/overview"},{"title":"Criticality Scoring","icon":"star-sharp","href":"/architecture/criticality"},{"group":"Asset","icon":"album-collection","pages":[{"title":"Asset Overview","icon":"table-rows","href":"/architecture/asset"},{"title":"Asset Detail","icon":"table-rows","href":"/architecture/asset-details"},{"title":"Asset Type","icon":"computer-classic","href":"/architecture/asset-type"}]},{"group":"Entities (Child Objects)","icon":"list-tree","pages":[{"title":"Entities","icon":"objects-column","href":"/architecture/entities"},{"title":"Entity List","icon":"list-ul","href":"/architecture/entity-list"},{"title":"Attribute","icon":"table-columns-add-after","href":"/architecture/attribute"}]},{"group":"Profiling","icon":"creative-commons-sampling","pages":[{"title":"Data Profiling","icon":"magnifying-glass-chart","href":"/architecture/data-profiling"},{"title":"Profile Insights","icon":"box-isometric-tape","href":"/architecture/profile-insights"}]},{"group":"Metric","icon":"box-isometric-tape","pages":[{"title":"Metric Overview","icon":"chart-line","href":"/architecture/metric"},{"group":"Metric Types","icon":"shapes","pages":[{"group":"Operational","icon":"gears","pages":[{"group":"Volume","icon":"database","pages":[{"title":"Overview","icon":"circle-info","href":"/architecture/metrics/volume/overview"},{"title":"Configure","icon":"sliders","href":"/architecture/metrics/volume/configure"}]},{"group":"Freshness","icon":"clock","pages":[{"title":"Overview","icon":"circle-info","href":"/architecture/metrics/freshness/overview"},{"title":"Configure","icon":"sliders","href":"/architecture/metrics/freshness/configure"}]},{"group":"Schema","icon":"table-columns","pages":[{"title":"Overview","icon":"circle-info","href":"/architecture/metrics/schema/overview"},{"title":"Configure","icon":"sliders","href":"/architecture/metrics/schema/configure"}]}]},{"group":"Performance","icon":"gauge-high","pages":[{"group":"Credits","icon":"coins","pages":[{"title":"Overview","icon":"circle-info","href":"/architecture/metrics/credits/overview"},{"title":"Configure","icon":"sliders","href":"/architecture/metrics/credits/configure"}]},{"group":"Queries","icon":"bolt","pages":[{"title":"Overview","icon":"circle-info","href":"/architecture/metrics/queries/overview"},{"title":"Configure","icon":"sliders","href":"/architecture/metrics/queries/configure"}]},{"group":"Usage","icon":"chart-simple","pages":[{"title":"Overview","tag":"Ready For Review","icon":"circle-info","href":"/architecture/metrics/usage/overview"}]}]},{"group":"Structural","icon":"cubes","pages":[{"group":"Distribution","icon":"chart-column","pages":[{"title":"Overview","icon":"circle-info","href":"/architecture/metrics/distribution/overview"},{"title":"Configure","icon":"sliders","href":"/architecture/metrics/distribution/configure"}]},{"group":"Frequency","icon":"wave-square","pages":[{"title":"Overview","icon":"circle-info","href":"/architecture/metrics/frequency/overview"},{"title":"Configure","icon":"sliders","href":"/architecture/metrics/frequency/configure"}]},{"group":"Pattern","icon":"braille","pages":[{"title":"Overview","icon":"circle-info","href":"/architecture/metrics/pattern/overview"},{"title":"Configure","icon":"sliders","href":"/architecture/metrics/pattern/configure"}]},{"group":"Statistics","icon":"calculator","pages":[{"title":"Overview","icon":"circle-info","href":"/architecture/metrics/statistics/overview"},{"title":"Configure","icon":"sliders","href":"/architecture/metrics/statistics/configure"}]}]},{"group":"Business","icon":"briefcase","pages":[{"group":"Conditional","icon":"code-branch","pages":[{"title":"Overview","icon":"circle-info","href":"/architecture/metrics/conditional/overview"},{"title":"Setup","icon":"gear","href":"/architecture/metrics/conditional/setup"},{"title":"Use Cases","icon":"lightbulb","href":"/architecture/metrics/conditional/usecases"}]},{"group":"Query","icon":"terminal","pages":[{"title":"Overview","icon":"lightbulb","href":"/architecture/metrics/query/usecases"},{"title":"Setup","icon":"gear","href":"/architecture/metrics/query/setup"},{"title":"Use Cases","icon":"lightbulb","href":"/architecture/metrics/query/examples"}]},{"group":"Standalone","icon":"cube","pages":[{"title":"Overview","icon":"circle-info","href":"/architecture/metrics/standalone/overview"},{"title":"Setup","icon":"gear","href":"/architecture/metrics/standalone/setup"},{"title":"Use Cases","icon":"lightbulb","href":"/architecture/metrics/standalone/usecases"}]},{"group":"Behavioural","icon":"person-running","pages":[{"title":"Overview","icon":"circle-info","href":"/architecture/metrics/behavioural/overview"},{"title":"Setup","icon":"gear","href":"/architecture/metrics/behavioural/setup"},{"title":"Use Cases","icon":"lightbulb","href":"/architecture/metrics/behavioural/usecases"}]}]},{"group":"Reconciliation","icon":"scale-balanced","pages":[{"group":"Comparison","icon":"code-compare","pages":[{"title":"Overview","icon":"circle-info","href":"/architecture/metrics/comparison/overview"},{"title":"Setup","icon":"gear","href":"/architecture/metrics/comparison/setup"},{"title":"Use Cases","icon":"lightbulb","href":"/architecture/metrics/comparison/usecases"}]},{"group":"Lookup","icon":"magnifying-glass","pages":[{"title":"Overview","icon":"circle-info","href":"/architecture/metrics/lookup/overview"},{"title":"Setup","icon":"gear","href":"/architecture/metrics/lookup/setup"},{"title":"Use Cases","icon":"lightbulb","href":"/architecture/metrics/lookup/usecases"}]}]},{"group":"Semantic","icon":"folder-open","pages":[{"title":"Semantic Metrics","sidebarTitle":"overview","icon":"folder-open","href":"/architecture/metrics/semantic/overview"}]},{"group":"Metric Template","icon":"copy","pages":[{"title":"Overview","icon":"circle-info","href":"/architecture/metrics/metric-template/overview"},{"title":"Setup","icon":"gear","href":"/architecture/metrics/metric-template/setup"}]}]},{"title":"Anomaly Detection","icon":"wave-pulse","href":"/architecture/anomaly-detection"},{"title":"Metric Results","icon":"chart-simple","href":"/architecture/metric-result"},{"title":"Pipeline Metric","icon":"diagram-project","href":"/architecture/pipeline-metric"}]},{"group":"Lineage","icon":"arrow-left-arrow-right","pages":[{"title":"Lineage","icon":"diagram-project","href":"/architecture/lineage"},{"title":"Lineage Extraction","icon":"arrows-left-right","href":"/architecture/lineage-extraction"}]},{"title":"Usage","icon":"users","href":"/architecture/usage"},{"group":"Logs","icon":"money-check-pen","pages":[{"title":"Logging Overview","icon":"book-open-lines","href":"/architecture/log/logging-overview"},{"title":"Asset Audit","icon":"block-quote","href":"/architecture/log/asset-audit"},{"title":"Audit Log","icon":"train-track","href":"/architecture/log/audit-log"},{"title":"Activity Log","icon":"user-pen","href":"/architecture/log/activity-log"}]},{"group":"Command Center","icon":"terminal","pages":[{"title":"Overview","icon":"terminal","href":"/architecture/command-center/overview"},{"title":"Jobs","icon":"briefcase","href":"/architecture/command-center/jobs"},{"title":"Schedules","icon":"calendar","href":"/architecture/command-center/schedule"},{"title":"Utility: Import and Export","sidebarTitle":"Utility","icon":"arrows-left-right","href":"/architecture/command-center/utility"}]},{"title":"Documentation","icon":"file-doc","href":"/architecture/documentation"},{"title":"Scoring","icon":"star","href":"/architecture/score"},{"group":"Semantics","icon":"sitemap","pages":[{"title":"Overview","icon":"book-open","href":"/architecture/semantics/overview"},{"title":"Domain","icon":"globe","href":"/architecture/semantics/domain"},{"title":"Product","icon":"box","href":"/architecture/semantics/product"},{"title":"Application","icon":"window-maximize","href":"/architecture/semantics/application"},{"title":"Tag","icon":"tag","href":"/architecture/semantics/tag"},{"title":"Glossary","icon":"book","href":"/architecture/semantics/glossary"}]},{"group":"Exceptions","icon":"triangle-exclamation","pages":[{"title":"Exceptions Overview","icon":"triangle-exclamation","href":"/architecture/exceptions/overview"},{"title":"Exception Records","icon":"table-list","href":"/architecture/exceptions/exception-records"},{"title":"Notifications","icon":"bell","href":"/architecture/exceptions/notifications"},{"title":"Exception Dashboard","icon":"gauge","href":"/architecture/exceptions/exception-dashboard"}]},{"group":"Alerts","icon":"sensor-alert","pages":[{"title":"Alerts Overview","icon":"bell","href":"/architecture/alerts/overview"},{"title":"Alert Detail","icon":"circle-info","href":"/architecture/alerts/details"},{"title":"Alert Management","icon":"sliders","href":"/architecture/alerts/management"},{"title":"Alert Thresholds","icon":"gauge-high","href":"/architecture/alerts/thresholds"}]},{"title":"Actions","icon":"bolt","href":"/architecture/actions"},{"title":"SLA","icon":"stopwatch","href":"/architecture/sla"},{"group":"Dashboard","icon":"gauge","pages":[{"title":"Quality Dashboard","sidebarTitle":"quality-dashboard","icon":"shield-check","href":"/architecture/Quality-dashboard"},{"title":"Catalog Dashboard","icon":"book-open","href":"/architecture/catalog-dashboard"},{"title":"Observability Dashboard — Data","sidebarTitle":"Observability: Data","icon":"database","href":"/architecture/observability-data-dashboard"},{"title":"Observability Dashboard — Pipeline","sidebarTitle":"Observability: Pipeline","icon":"diagram-project","href":"/architecture/observability-pipeline-dashboard"},{"title":"Observability Dashboard — Report","sidebarTitle":"Observability: Report","icon":"chart-pie","href":"/architecture/observability-report-dashboard"}]}]},{"group":"Data Sources","icon":"sourcetree","pages":[{"title":"Data Sources Overview","icon":"database","href":"/sources/overview"},{"group":"ADLS","icon":"microsoft","pages":[{"title":"ADLS Overview","icon":"microsoft","description":"What the Azure Data Lake Storage connector covers, the two ways Prizm can process your files, and what Unity Catalog Iceberg materialization adds.","href":"/sources/adls/overview"},{"title":"ADLS Setup","icon":"plug","href":"/sources/adls/setup"},{"title":"What We Collect","description":"Job types, compute metric types, and how Prizm handles Delta Lake tables and Iceberg materialization for ADLS.","icon":"list-check","href":"/sources/adls/what-we-collect"},{"title":"FAQ","icon":"circle-question","href":"/sources/adls/faq"}]},{"group":"Snowflake","icon":"snowflake","pages":[{"title":"Snowflake Overview","icon":"snowflake","href":"/sources/snowflake/overview"},{"title":"Snowflake Setup","icon":"plug","href":"/sources/snowflake/setup"},{"title":"What Prizm Collects from Snowflake","icon":"database","href":"/sources/snowflake/what-we-collect"},{"title":"Snowflake FAQ","icon":"question","href":"/sources/snowflake/faq"}]},{"group":"Oracle","icon":"database","pages":[{"title":"Oracle Overview","icon":"database","href":"/sources/oracle/overview"},{"title":"Oracle Setup","icon":"plug","href":"/sources/oracle/setup"},{"title":"What We Collect","icon":"list-check","href":"/sources/oracle/what-we-collect"},{"title":"FAQ","icon":"circle-question","href":"/sources/oracle/faq"}]},{"group":"Sigma","icon":"chart-mixed","hidden":true,"pages":[{"title":"Sigma Overview","icon":"chart-mixed","href":"/sources/sigma/overview"},{"title":"Sigma Setup","icon":"plug","href":"/sources/sigma/setup"},{"title":"What We Collect","icon":"list-check","href":"/sources/sigma/what-we-collect"},{"title":"FAQ","icon":"circle-question","href":"/sources/sigma/faq"}]},{"group":"BigQuery","icon":"google","pages":[{"title":"BigQuery Overview","sidebarTitle":"Overview","icon":"database","href":"/sources/bigquery/overview"},{"title":"BigQuery Setup","sidebarTitle":"Setup","icon":"plug","href":"/sources/bigquery/setup"},{"title":"BigQuery — What We Collect","sidebarTitle":"What We Collect","icon":"database","href":"/sources/bigquery/what-we-collect"},{"title":"BigQuery FAQ","sidebarTitle":"FAQ","icon":"circle-question","href":"/sources/bigquery/faq"}]},{"group":"Databricks","icon":"fire","pages":[{"title":"Databricks Overview","icon":"fire","href":"/sources/databricks/overview"},{"title":"Setup","icon":"plug","href":"/sources/databricks/setup"},{"title":"What Prizm Collects from Databricks","icon":"database","href":"/sources/databricks/what-we-collect"},{"title":"FAQ","icon":"question","href":"/sources/databricks/faq"}]},{"group":"SQL Server","icon":"server","pages":[{"title":"SQL Server Overview","icon":"database","href":"/sources/sql/overview"},{"title":"Setup","icon":"plug","href":"/sources/sql/setup"},{"title":"What Prizm Collects from SQL Server","icon":"database","href":"/sources/sql/what-we-collect"},{"title":"FAQ","icon":"question","href":"/sources/sql/faq"}]},{"group":"dbt","icon":"cube","pages":[{"title":"dbt Overview","icon":"cube","href":"/sources/dbt/overview"},{"title":"Setup","icon":"plug","href":"/sources/dbt/setup"},{"title":"What Prizm Collects from dbt","icon":"database","href":"/sources/dbt/what-prizm-collects"},{"title":"FAQ","icon":"question","href":"/sources/dbt/faq"}]},{"group":"Tableau","icon":"chart-column","pages":[{"title":"Tableau Overview","icon":"chart-bar","href":"/sources/tableau/overview"},{"title":"Tableau Setup","icon":"plug","href":"/sources/tableau/setup"},{"title":"What Prizm Collects from Tableau","icon":"database","href":"/sources/tableau/what-we-collect"},{"title":"Tableau FAQ","icon":"question","href":"/sources/tableau/faq"}]},{"group":"Power BI","icon":"chart-pie","pages":[{"title":"Overview","icon":"chart-bar","href":"/sources/powerbi/overview"},{"title":"Setup","icon":"plug","href":"/sources/powerbi/setup"},{"title":"What We Collect","icon":"database","href":"/sources/powerbi/what-we-collect"},{"title":"FAQ","icon":"circle-question","href":"/sources/powerbi/faq"}]},{"group":"Apache Airflow","icon":"wind","pages":[{"title":"Airflow Overview","icon":"wind","href":"/sources/airflow/overview"},{"title":"Setup","icon":"plug","href":"/sources/airflow/setup"},{"title":"What We Collect","icon":"database","href":"/sources/airflow/what-we-collect"},{"title":"Plugin Setup","icon":"puzzle-piece","href":"/sources/airflow/plugin-setup"}]},{"group":"SAP HANA","icon":"memory","pages":[{"title":"SAP HANA Overview","sidebarTitle":"Overview","icon":"database","href":"/sources/sap-hana/overview"},{"title":"SAP HANA Setup","sidebarTitle":"Setup","icon":"plug","href":"/sources/sap-hana/setup"},{"title":"SAP HANA — What We Collect","sidebarTitle":"What We Collect","icon":"database","href":"/sources/sap-hana/what-we-collect"},{"title":"SAP HANA FAQ","sidebarTitle":"FAQ","icon":"circle-question","href":"/sources/sap-hana/faq"}]},{"group":"Azure Data Factory","icon":"diagram-project","hidden":true,"pages":[{"title":"Azure Data Factory Overview","sidebarTitle":"Overview","icon":"database","href":"/sources/adf/overview"},{"title":"Azure Data Factory Setup","sidebarTitle":"Setup","icon":"plug","href":"/sources/adf/setup"},{"title":"Azure Data Factory — What We Collect","sidebarTitle":"What We Collect","icon":"database","href":"/sources/adf/what-we-collect"},{"title":"Azure Data Factory FAQ","sidebarTitle":"FAQ","icon":"circle-question","href":"/sources/adf/faq"}]},{"group":"Azure Synapse","icon":"warehouse","pages":[{"title":"Azure Synapse Overview","sidebarTitle":"Overview","icon":"database","href":"/sources/synapse/overview"},{"title":"Azure Synapse Setup","sidebarTitle":"Setup","icon":"plug","href":"/sources/synapse/setup"},{"title":"Azure Synapse — What We Collect","sidebarTitle":"What We Collect","icon":"database","href":"/sources/synapse/what-we-collect"},{"title":"Azure Synapse FAQ","sidebarTitle":"FAQ","icon":"circle-question","href":"/sources/synapse/faq"},{"title":"Pipelines","tag":"Internal","icon":"diagram-project","href":"/sources/synapse/pipelines"}]},{"group":"Salesforce Data Cloud","icon":"salesforce","pages":[{"title":"Salesforce Data Cloud Overview","sidebarTitle":"Overview","icon":"database","href":"/sources/salesforce-data-cloud/overview"},{"title":"Salesforce Data Cloud Setup","sidebarTitle":"Setup","icon":"plug","href":"/sources/salesforce-data-cloud/setup"},{"title":"Salesforce Data Cloud — What We Collect","sidebarTitle":"What We Collect","icon":"database","href":"/sources/salesforce-data-cloud/what-we-collect"},{"title":"Salesforce Data Cloud FAQ","sidebarTitle":"FAQ","icon":"circle-question","href":"/sources/salesforce-data-cloud/faq"}]},{"group":"WhereScape","icon":"diagram-project","pages":[{"title":"WhereScape Overview","sidebarTitle":"Overview","icon":"database","href":"/sources/wherescape/overview"},{"title":"WhereScape Setup","sidebarTitle":"Setup","icon":"plug","href":"/sources/wherescape/setup"},{"title":"WhereScape — What We Collect","sidebarTitle":"What We Collect","icon":"database","href":"/sources/wherescape/what-we-collect"},{"title":"WhereScape FAQ","sidebarTitle":"FAQ","icon":"circle-question","href":"/sources/wherescape/faq"}]},{"group":"Salesforce Marketing","icon":"salesforce","pages":[{"title":"Salesforce Marketing Overview","sidebarTitle":"Overview","icon":"database","href":"/sources/salesforce-marketing/overview"},{"title":"Salesforce Marketing Setup","sidebarTitle":"Setup","icon":"plug","href":"/sources/salesforce-marketing/setup"},{"title":"Salesforce Marketing — What We Collect","sidebarTitle":"What We Collect","icon":"database","href":"/sources/salesforce-marketing/what-we-collect"},{"title":"Salesforce Marketing FAQ","sidebarTitle":"FAQ","icon":"circle-question","href":"/sources/salesforce-marketing/faq"}]}]},{"group":"Integrations","icon":"connectdevelop","pages":[{"group":"Alation","icon":"book-open","pages":[{"title":"Overview","icon":"circle-info","href":"/integrations/alation/overview"},{"title":"Setup","icon":"gear","href":"/integrations/alation/setup"},{"title":"Integration","icon":"plug","href":"/integrations/alation/integration"}]},{"group":"Collibra","icon":"book-open","pages":[{"title":"Overview","icon":"circle-info","href":"/integrations/collibra/overview"},{"title":"Setup","icon":"gear","href":"/integrations/collibra/setup"}]},{"group":"Atlan","icon":"book-open","pages":[{"title":"Overview","tag":"Private","icon":"circle-info","href":"/integrations/atlan/overview"},{"title":"Setup","tag":"Private","icon":"gear","href":"/integrations/atlan/setup"}]},{"group":"Microsoft Purview","icon":"book-open","pages":[{"title":"Overview","icon":"circle-info","href":"/integrations/purview/overview"},{"title":"Setup","icon":"gear","href":"/integrations/purview/setup"}]},{"group":"Collaboration","icon":"people-group","pages":[{"group":"Jira","icon":"jira","pages":[{"title":"Overview","icon":"circle-info","href":"/integrations/jira/overview"},{"title":"Setup","icon":"gear","href":"/integrations/jira/setup"},{"title":"Integration","icon":"plug","href":"/integrations/jira/integration"}]},{"group":"Service Now","icon":"ticket","pages":[{"title":"Overview","icon":"circle-info","href":"/integrations/servicenow/overview"},{"title":"Setup","icon":"gear","href":"/integrations/servicenow/setup"},{"title":"Integration","icon":"plug","href":"/integrations/servicenow/integration"}]},{"group":"Github Action","icon":"circle-play","pages":[{"title":"Overview","icon":"circle-info","href":"/integrations/githubaction/overview"},{"title":"Setup","icon":"gear","href":"/integrations/githubaction/setup"},{"title":"Integration","icon":"plug","href":"/integrations/githubaction/integrations"}]},{"group":"Github App","icon":"github","pages":[{"title":"Overview","icon":"circle-info","href":"/integrations/githubapp/overview"},{"title":"Setup","icon":"gear","href":"/integrations/githubapp/setup"},{"title":"Integration","icon":"arrows-left-right","href":"/integrations/githubapp/integrations"}]}]},{"group":"Notification","icon":"bell","pages":[{"group":"Email","icon":"envelope","pages":[{"title":"Overview","icon":"circle-info","href":"/integrations/email/overview"},{"title":"Setup","icon":"gear","href":"/integrations/email/setup"}]},{"group":"Google Chat","icon":"google","pages":[{"title":"Overview","icon":"circle-info","href":"/integrations/googlechat/overview"},{"title":"Setup","icon":"gear","href":"/integrations/googlechat/setup"}]},{"group":"Microsoft Team","icon":"microsoft","pages":[{"title":"Overview","icon":"circle-info","href":"/integrations/teams/overview"},{"title":"Setup","icon":"gear","href":"/integrations/teams/setup"}]},{"group":"Slack","icon":"slack","pages":[{"title":"Overview","icon":"circle-info","href":"/integrations/slack/overview"},{"title":"Setup","icon":"gear","href":"/integrations/slack/setup"}]}]},{"group":"Vault","icon":"vault","pages":[{"group":"Azure Key Vault","icon":"key","pages":[{"title":"Overview","icon":"circle-info","href":"/integrations/azure-key-vault/overview"},{"title":"Prerequisites","icon":"list-check","href":"/integrations/azure-key-vault/prerequisites"},{"title":"Setup","icon":"gear","href":"/integrations/azure-key-vault/setup"}]},{"group":"HashiCorp Vault","icon":"vault","pages":[{"title":"Overview","icon":"circle-info","href":"/integrations/hashicorp-vault/overview"},{"title":"Prerequisites","icon":"list-check","href":"/integrations/hashicorp-vault/prerequisites"},{"title":"Setup","icon":"gear","href":"/integrations/hashicorp-vault/setup"}]},{"group":"AWS Secret Manager","icon":"aws","pages":[{"title":"Overview","icon":"circle-info","href":"/integrations/aws-secret-manager/overview"},{"title":"Prerequisites","icon":"list-check","href":"/integrations/aws-secret-manager/prerequisites"},{"title":"Setup","icon":"gear","href":"/integrations/aws-secret-manager/setup"}]}]}]},{"group":"Security \u0026 Access Control","icon":"user-lock","pages":[{"title":"Security Overview","icon":"shield","href":"/security/overview"},{"title":"RBAC","icon":"user-shield","href":"/security/rbac"},{"group":"SSO integration","icon":"right-to-bracket","pages":[{"title":"SSO Integration Overview","icon":"key","href":"/security/sso"},{"title":"Azure Active Directory/Entra ID","icon":"microsoft","href":"/security/sso/azure"},{"title":"Okta","icon":"id-badge","href":"/security/sso/okta"},{"title":"IBM Verify","icon":"shield-check","href":"/security/sso/ibm-verify"},{"title":"Ping Identity","icon":"fingerprint","href":"/security/sso/ping-identity"},{"title":"SCIM Integration","icon":"users-gear","tag":"Ready for review","href":"/security/sso/scim"}]},{"title":"Data Protection","icon":"shield-halved","href":"/security/data-protection"},{"title":"AI Governance","icon":"user-robot","href":"/security/aigovernance"},{"title":"Compliance","icon":"certificate","href":"/security/compliance"}]},{"group":"Deployment","icon":"octopus-deploy","pages":[{"title":"Deployment Overview","icon":"rectangle-terminal","href":"/deployment/overview"},{"group":"Hybrid","icon":"cloud","pages":[{"group":"Azure Agent Outbound","icon":"microsoft","pages":[]},{"group":"AWS Agent Outbound","icon":"aws","pages":[]},{"group":"GCP Agent Outbound","icon":"google","pages":[]},{"group":"On Prem Agent Outbound","icon":"container-storage","pages":[]}]},{"group":"Customer Hosted","icon":"building","pages":[{"group":"Online","icon":"wifi","pages":[]},{"group":"Offline(Private)","icon":"lock","pages":[]}]}]},{"group":"Help","icon":"hands-helping","pages":[{"title":"FAQ","icon":"circle-question","href":"/faq"},{"title":"Troubleshooting","icon":"wrench","href":"/help/troubleshooting"},{"title":"Glossary","icon":"book","href":"/help/glossary"}]},{"group":"Settings","icon":"cog","pages":[{"title":"Platform","icon":"layer-group","href":"/Platform"},{"title":"Security","icon":"lock","href":"/settings"},{"title":"Remediation","icon":"screwdriver-wrench","href":"/remediation"},{"title":"Color Mode","icon":"palette","href":"/color-mode"},{"title":"Overview","icon":"building","href":"/organization-overview"}]},{"group":"MCP","icon":"plug","pages":[{"title":"MCP Access Tokens","icon":"key","href":"/ai/mcp-access-tokens"}]},{"group":"Release Notes","icon":"clipboard-list","pages":[{"title":"1.3.3 Release Notes","icon":"tag","href":"/Release_Notes_v1.3.3"},{"title":"1.3.4 Release Notes","icon":"tag","href":"/Release_Notes_v1.3.4"},{"title":"1.4.1 Release Notes","icon":"tag","href":"/Release_Notes_v1.4.1"}]},{"group":"Placeholder reference - might remove","icon":"box-archive","hidden":true,"pages":[{"title":"security","icon":"shield","href":"/introduction/security"},{"title":"What is Prizm?","icon":"sparkles","href":"/introduction/overview"},{"title":"Key Concepts","icon":"lightbulb","href":"/introduction/key-concepts"},{"title":"Quick Start","icon":"rocket","href":"/introduction/quick-start"},{"group":"Data Quality","icon":"shield-check","pages":[{"title":"Data Quality Overview","icon":"shield-check","href":"/data-quality/overview"},{"title":"Quality Metrics","icon":"shield-check","href":"/data-quality/metrics"},{"title":"Quality Scoring","icon":"star","href":"/data-quality/scoring"},{"title":"Exception Management","icon":"triangle-exclamation","href":"/data-quality/exceptions"},{"title":"YAML Metrics - DQaC","icon":"code","href":"/data-quality/yaml-dqac"}]},{"group":"AI-Powered Experiences","icon":"robot","pages":[{"title":"AI-Powered Experiences","icon":"wand-magic-sparkles","href":"/ai/overview"},{"title":"GPT Prompts","icon":"wand-magic-sparkles","href":"/ai/gpt-prompts"},{"title":"Model Configuration","icon":"sliders","href":"/ai/model-configuration"},{"title":"Converse MCP Tools","icon":"plug","href":"/ai/converse-mcp"},{"title":"AI Recommendations","icon":"lightbulb","href":"/ai/recommendations"},{"title":"Glossary Generation","icon":"book","href":"/ai/glossary-generation"}]},{"group":"Guides","icon":"notes-sticky","pages":[{"title":"Navigate the PRIZM dashboard, nav bar, and search","icon":"compass","href":"/guides/navigating-dashboard"},{"title":"Search and discover assets across your data ecosystem","icon":"magnifying-glass","href":"/guides/searching-assets"},{"title":"Explore asset details, schema, lineage, and metrics","icon":"table","href":"/guides/asset-details"},{"title":"View, triage, and respond to PRIZM data quality alerts","icon":"bell","href":"/guides/managing-alerts"},{"title":"Track and resolve data quality issues with PRIZM Issues","icon":"bug","href":"/guides/tracking-issues"},{"title":"Explore insights with Analytics","icon":"chart-bar","href":"/guides/analytics"},{"title":"Use the PRIZM AI Chat Assistant to explore your data","icon":"comments","href":"/guides/chat-assistant"}]},{"group":"Architecture","icon":"sitemap","pages":[{"title":"Audience","icon":"users-gear","href":"/architecture/audience"},{"title":"Infrastructure","icon":"cloud","href":"/architecture/infrastructure"},{"title":"Data Model","icon":"table","href":"/architecture/data-model"},{"title":"Context Module","icon":"brain","href":"/architecture/context"},{"title":"Notifications","icon":"bell","href":"/architecture/notifications"},{"title":"Scheduling","icon":"calendar","href":"/architecture/scheduling"},{"title":"Impact Analysis","icon":"explosion","href":"/lineage/impact-analysis"}]}]}]},{"tab":"API Reference","icon":"code","pages":[{"title":"API Reference","href":"/api-reference/overview"}]}]},"basePath":"","title":"ADLS Setup - DQLabs PRIZM","buildId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","deploymentId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-u3J1-UOn.js","DynamicMarkdown-B-f2cqXQ.js","zoom-image-lightbox-DTFzvaXJ.js","lightbox-handle-r17bVUz3.js"]}