2. Unity Catalog基础操作
Unity Catalog 是 Databricks 平台上统一的元数据与权限治理层。理解它的对象层级,是后续做数据质量校验、血缘分析和权限审计的前提。Unity Catalog 采用严格的三级命名空间结构,并在其之上挂载一个账户级的 Metastore,形成“一个 Metastore → 多个 Catalog → 多个 Schema → 多个 Table/View”的树状层次。每个对象都有唯一的全限定名,格式为 catalog.schema.object,例如 sales_prod.retail.orders。
需要特别区分的是:Metastore 本身不参与三段式命名,它是账户级容器,负责把存储位置、权限模型和跨工作区的元数据统一起来。一个 Databricks 账户在一个区域(region)内通常只挂载一个 Unity Catalog Metastore,多个工作区可以共享同一个 Metastore,从而共享同一套 Catalog 与权限。Catalog 是数据域或环境的第一层隔离边界,常见做法是按环境(dev/prod)或按业务域(sales/marketing)划分。Schema 在旧概念中常被称为 Database,是表与视图的直接容器,也是权限授予最常用的粒度。Table 与 View 是最终被查询的对象,其中 Table 有物理数据,View 只保存查询定义。
用 SQL 创建与管理对象
Unity Catalog 的对象都可以用标准 SQL DDL 创建。下面是一段可直接在 Databricks SQL Warehouse 或 Notebook 中执行的示例,演示从 Catalog 到 View 的完整创建链路。示例中的名称与路径均为教学假设,实际使用时需替换为你的存储位置。
-- 1. 创建 Catalog(需在 Metastore 已挂载的前提下)
CREATE CATALOG IF NOT EXISTS sales_prod
COMMENT '销售生产域';
-- 2. 在 Catalog 下创建 Schema
CREATE SCHEMA IF NOT EXISTS sales_prod.retail
COMMENT '零售主题数据';
-- 3. 创建托管表(Managed Table)
CREATE TABLE IF NOT EXISTS sales_prod.retail.orders (
order_id BIGINT,
customer_id BIGINT,
order_ts TIMESTAMP,
amount DECIMAL(12,2),
status STRING
)
COMMENT '订单明细表';
-- 4. 创建视图,只保存查询定义
CREATE OR REPLACE VIEW sales_prod.retail.v_orders_clean AS
SELECT order_id, customer_id, order_ts, amount
FROM sales_prod.retail.orders
WHERE status = 'PAID' AND amount > 0;
-- 5. 查看层级与元数据
SHOW CATALOGS;
SHOW SCHEMAS IN sales_prod;
SHOW TABLES IN sales_prod.retail;
DESCRIBE EXTENDED sales_prod.retail.orders;
执行 SHOW CATALOGS 会列出当前 Metastore 下所有 Catalog;SHOW SCHEMAS IN sales_prod 列出该 Catalog 下的 Schema;SHOW TABLES IN sales_prod.retail 则同时返回表和视图,并通过 isTemporary 等字段区分类型。DESCRIBE EXTENDED 会输出表的存储位置、表类型(MANAGED / EXTERNAL)、创建者、所有者等治理信息,这些字段在后续做元数据审计时非常关键。
用 Catalog Explorer 进行可视化操作
Catalog Explorer 是 Databricks 工作区左侧导航中的图形化入口,适合不写 SQL 也能完成对象浏览与创建。进入后可以看到一棵可展开的树:顶层是当前 Metastore 下的 Catalog 列表,展开某个 Catalog 会显示其 Schema,再展开 Schema 会显示 Table 与 View。点击任意对象,右侧会展示 Overview、Sample Data、Details、Permissions、Lineage 等标签页。
在 Catalog Explorer 中创建对象的典型路径是:点击 Create 按钮,选择 Catalog、Schema 或 Table。创建 Table 时可以选择从文件上传、从已有表复制结构,或直接写 SQL。创建完成后,可以在 Permissions 标签页直接授予 USE CATALOG、USE SCHEMA、SELECT、MODIFY 等权限,无需手写 GRANT 语句。Lineage 标签页会展示该表上下游的读写关系,这是排查数据质量问题来源时最直观的工具之一。
SHOW TABLES 立刻可见;反之亦然。两者只是交互方式不同,不存在数据不一致的问题。层级关系带来的三个实践要点
- 命名必须完整。在 Unity Catalog 中查询表时,推荐始终使用三段式全限定名。虽然可以通过
USE CATALOG和USE SCHEMA设置当前上下文后使用短名,但在跨团队协作和作业调度中,全限定名能避免歧义。 - 权限按层级继承。在 Catalog 上授予
USE CATALOG,其下所有 Schema 都可见;在 Schema 上授予SELECT,其下所有表都可读。因此授权时应遵循最小权限原则,优先在 Schema 粒度授予,必要时再细化到表。 - View 与 Table 的治理差异。View 不存储数据,其权限校验会同时检查 View 定义本身和底层表的访问权限。若用户能查 View 但无权访问底层表,查询仍会失败。这一点在做数据脱敏视图时尤其需要注意。
DROP CATALOG ... CASCADE 前,务必确认没有下游作业依赖,并优先使用 RESTRICT 做保护性删除。