用途
本技能用于在 Databricks 工作区中配置 Unity Catalog 全流程:元存储、存储凭据、外部位置、目录、模式以及授权。用户提出配置 Unity Catalog、创建元存储、设置目录与模式、配置外部位置等需求时可使用。
主要能力
- 通过 Terraform 模板实施 UC:新工作区随完整工作区模板(*-workspace-full)一并部署;已有工作区使用仅 UC 模板,按云分为 azure-unity-catalog、aws-unity-catalog、gcp-unity-catalog。
- 通过 SDK/API 实施 UC(不使用 Terraform):创建元存储、配置数据访问、将元存储绑定到工作区、创建目录与模式、授予权限。
- 资源命名:所有资源名使用 <prefix> 占位符,部署前须替换为唯一值(如客户名、项目名或工作区名),并回读确认。禁止照字面使用 <prefix>,也禁止在同一云账户的多次部署中复用前缀。
- 交互规范:需求不明确时追问,需求清晰时立即执行;对部分做法有中等强度的提示与硬性拒绝。
- 远程变更审批门:创建、修改或删除任何远程资源(元存储、目录、模式、外部位置、存储凭据、授权,以及任何 terraform apply 或 databricks 创建/删除/更新命令)前,须展示一份计划并获得明确批准,包含目标(账户/工作区/元存储、--profile 或 host、云)与变更集(本次任务全部资源的批量清单)。批准后仅执行已批准范围;范围变更需重新展示并重新批准。清理仅限本会话由本工作流创建的资源,且须向用户报告。
推荐默认实践
- 每个区域一个元存储,供该区域所有工作区共享,不在同一区域创建多个元存储。
- 孤儿元存储现实检查:沙箱/共享租户账户中常存在区域内孤儿元存储;部署前先列出区域元存储并检查。发现孤儿时不得静默复用,可从三种恢复路径中选择:(a) 请客户接管最干净的一个并复用;(b) 请客户删除孤儿(databricks account metastores delete <id> --force)并新建;(c) 用带日期的新名称(<prefix>-metastore-<region>-<date>)新建并在记录中说明孤儿被保留。
- 自管元存储并使用自有存储:自行部署 S3 桶、ADLS 容器或 GCS 桶,生产环境不依赖托管(vending machine)存储。
- 按环境分目录并配置专用存储账户/桶:dev/stg/prod 各目录使用各自存储账户/S3 桶/GCS 桶;多环境下此为必需,禁止跨目录共享单一存储账户。
- 工作区绑定:生产目录仅在生产工作区可见,目录设置 isolation_mode = "ISOLATED",并用 databricks_workspace_binding 绑定,绑定类型 BINDING_TYPE_READ_WRITE;不使用原始 API 调用或 null_resource 加 local-exec。该资源同样适用于 storage_credential 与 external_location 类型。dev 与 stg 目录可保持 OPEN。
- 使用外部位置而非托管存储:在目录上使用 MANAGED LOCATION 指向外部位置;生产数据不存入 DBFS。
- 采用 Medallion 模式:每个目录默认创建 bronze/silver/gold 模式。
- 所有名称使用下划线而非连字符(如 fraud_poc 而非 fraud-poc);从前缀派生名称时使用 replace(name, "-", "_")。
- 所有授权面向账户级 SCIM 组,不使用个人用户授权或工作区本地组;作业使用服务主体而非用户身份;CI/CD 按环境使用各自服务主体。
- 使用现代权限名:USE_CATALOG(非 USAGE)、USE_SCHEMA(非 USAGE)、CREATE_TABLE(非 CREATE);旧名称会被 API 拒绝。
使用方式
- Terraform 路径:编写 Terraform 前按顺序查阅参考模式:https://github.com/databricks-solutions/technical-services-solutions(路径 workspace-setup/terraform-examples/,建议起点)、https://github.com/databricks/terraform-databricks-sra、https://github.com/databricks/terraform-databricks-examples。确定云后读取本技能目录下对应文件:Azure 读 AZURE.md,AWS 读 AWS.md,GCP 读 GCP.md。
- SDK/API 路径(无 Terraform):第一步用账户 API 创建元存储(每区域一个,先检查是否已存在):PUT /api/2.1/accounts/{account_id}/metastores,请求体含 name、storage_root、region。第二步按云读取对应文件配置数据访问(IAM 角色、访问连接器或 GCP 服务账户)。第三步将元存储绑定到工作区:PUT /api/2.1/accounts/{account_id}/workspaces/{workspace_id}/metastore,请求体 {"metastore_id": "..."}。第四步创建工作区 API 目录与模式(元存储绑定后会自动创建 main 目录,自有目录须换名):CREATE CATALOG dev MANAGED LOCATION 's3://<prefix>-catalog-dev/'; CREATE SCHEMA dev.bronze; CREATE SCHEMA dev.silver; CREATE SCHEMA dev.gold。第五步授予权限:GRANT USE_CATALOG ON CATALOG dev TO
data-engineers; GRANT USE_SCHEMA, CREATE_TABLE, CREATE_FUNCTION ON SCHEMA dev.bronze TOdata-engineers; GRANT USE_SCHEMA, SELECT ON SCHEMA dev.gold TOdata-analysts。 - 外部位置卫生:每个环境一个存储账户/桶(<prefix>-catalog-dev、<prefix>-catalog-stg、<prefix>-catalog-prod);每个云身份一个存储凭据,同一 IAM 角色/访问连接器/服务账户可访问所有桶时可复用;每个桶/容器一个外部位置,各映射单一存储路径;使用 CREATE CATALOG ... MANAGED LOCATION(SQL)而非 REST API 的 storage_root。为账户用户授予每个目录的 USE_CATALOG + USE_SCHEMA + SELECT 基础读权限,否则即使 isolation_mode = OPEN 目录也不会出现在 UI 中。
- 部署后检查清单:元存储已附加到工作区;存储凭据已创建并标记为默认;外部位置已创建(每桶/容器一个);按环境目录已创建且 MANAGED LOCATION 指向外部位置;每个目录已创建 Medallion 模式;UC 权限授予账户级组;人类管理员显式获权(当部署服务主体为所有者时,人类管理员甚至工作区管理员无法在 UI 看到这些对象,须用 databricks_grants 给予人类管理员 SCIM 组对应目录的 ALL_PRIVILEGES 与各外部位置的 MANAGE,或转移所有权);在经典计算(1+ worker)与无服务器 SQL 上用测试查询验证,如 spark.sql("SELECT * FROM dev.bronze.test_table") 与在 SQL 仓库运行同一查询。若经典计算报错 "Databricks Default Storage cannot be accessed using Classic Compute",说明在使用 vending machine 存储,需部署自管元存储。
- 交叉链接:工作区创建参见 platform-provisioning 技能;组、用户、服务主体与 RBAC 参见 identity-governance 技能;私有网络参见 private-networking 技能。
适用场景与限制
- 适用:新建工作区随工作区模板部署 UC;已有工作区且基础设施未由 Terraform 管理时用 SDK/API 配置;生产环境按环境目录、专用存储账户与账户级组授权的治理需求。
- 限制与硬性停止项:禁止按环境目录共享单一存储账户/桶;禁止将生产数据置于 DBFS;禁止将工作区本地组用作 UC 授权主体(UC 需要账户级 SCIM 组)。对生产使用 vending machine 元存储仅作强烈警告后仍可由用户选择。技能中提及 SECURITY.md 涉及自动批准/无头模式,但文档未给出细节。
关于具体价格、收费、平台支持范围、性能指标或未提及的使用步骤,资料未提供,暂未提供。