Unity Catalog (UC) é a camada de governança centralizada do Databricks. Fornece um metastore unificado para tabelas, views, volumes e funções em todos os workspaces de um account Databricks, com controle de acesso fino, auditoria e linhagem de dados automática.
Hierarquia de objetos
Account Databricks
└── Metastore (1 por região, associado a um account)
└── Catalog (agrupamento de schemas, ex: bronze, silver, gold, sandbox)
└── Schema (= database)
├── Tables (Delta, Parquet, CSV externos)
├── Views
├── Volumes (arquivos não tabulares)
└── Functions
Notação de três partes: catalog.schema.tabela
SELECT * FROM gold.vendas.kpis_diarios;
USE CATALOG silver;
USE SCHEMA pedidos;Metastore
O metastore é o repositório central de metadados (schemas, localizações, permissões). Um único metastore serve todos os workspaces de um account em uma região.
- Antes do Unity Catalog, cada workspace tinha seu próprio metastore Hive, sem compartilhamento entre workspaces
- Com UC, todos os workspaces compartilham o mesmo catálogo de dados
- O metastore armazena metadados; os dados ficam no object storage configurado como Metastore Storage Root
Catalogs
Catalogs são o nível mais alto de organização. Estratégias comuns:
| Estratégia | Exemplo |
|---|---|
| Por camada Medalhão | bronze, silver, gold |
| Por ambiente | dev, staging, prod |
| Por domínio | marketing, financeiro, operacoes |
| Por fonte | salesforce_catalog, erp_catalog |
CREATE CATALOG IF NOT EXISTS gold
COMMENT 'Camada Gold, dados agregados prontos para consumo'
MANAGED LOCATION 's3://lake/unity-catalog/gold/';Tipos de tabela
Managed Table
O UC gerencia tanto metadados quanto dados físicos. Ao fazer DROP TABLE, os dados são apagados.
CREATE TABLE silver.pedidos.fato_pedidos (
pedido_id BIGINT NOT NULL,
cliente_id BIGINT,
data_pedido DATE,
valor_total DECIMAL(10,2)
) COMMENT 'Tabela fato de pedidos, camada Silver';External Table
UC gerencia apenas metadados. Os dados ficam em uma location externa. DROP TABLE não apaga os dados.
CREATE TABLE bronze.crm.clientes_raw
USING DELTA
LOCATION 's3://lake/bronze/crm/clientes/'
COMMENT 'Dados brutos de clientes do CRM';External tables exigem uma External Location registrada no UC apontando para o storage.
Controle de Acesso (ACL)
UC usa um modelo RBAC/ABAC hierárquico. Permissões se propagam da hierarquia.
-- Permissões em catalog
GRANT USE CATALOG ON CATALOG gold TO `time-bi`;
GRANT USE SCHEMA ON SCHEMA gold.vendas TO `time-bi`;
-- Permissões em tabela
GRANT SELECT ON TABLE gold.vendas.kpis_diarios TO `time-bi`;
GRANT MODIFY ON TABLE silver.pedidos.fato_pedidos TO `engenharia-dados`;
-- Permissões em volume
GRANT READ VOLUME ON VOLUME bronze.arquivos.uploads TO `time-bi`;
GRANT WRITE VOLUME ON VOLUME bronze.arquivos.uploads TO `engenharia-dados`;
-- Revogar
REVOKE SELECT ON TABLE gold.vendas.kpis_diarios FROM `time-bi`;
-- Ver permissões
SHOW GRANTS ON TABLE gold.vendas.kpis_diarios;Principais privileges:
| Privilege | Escopo |
|---|---|
USE CATALOG | Catalog |
USE SCHEMA | Schema |
SELECT | Table, View |
MODIFY | Table (INSERT, UPDATE, DELETE) |
CREATE TABLE | Schema |
READ VOLUME | Volume |
WRITE VOLUME | Volume |
ALL PRIVILEGES | Qualquer objeto |
Row-Level e Column-Level Security
-- Mascaramento de coluna (Column Masking)
CREATE FUNCTION silver.mascarar_cpf(cpf STRING)
RETURN IF(is_member('engenharia-dados'), cpf, '***.***.***-**');
ALTER TABLE silver.clientes.dados
ALTER COLUMN cpf SET MASK silver.mascarar_cpf;
-- Filtro de linha (Row Filter)
CREATE FUNCTION silver.filtrar_por_regiao(regiao STRING)
RETURN is_member('admin') OR regiao = current_user_region();
ALTER TABLE silver.vendas.fato_vendas
SET ROW FILTER silver.filtrar_por_regiao ON (regiao);Linhagem automática
Unity Catalog captura automaticamente a linhagem de tabelas e colunas para operações feitas via Spark e SQL no Databricks.
- Sem configuração extra, apenas use tabelas UC
- Visualizável na UI:
Catalog > tabela > Lineage - API disponível para integração com ferramentas externas de catalogação
Tags e comentários
-- Comentário em tabela e colunas
COMMENT ON TABLE silver.pedidos.fato_pedidos IS 'Tabela fato normalizada de pedidos';
ALTER TABLE silver.pedidos.fato_pedidos
ALTER COLUMN cliente_id COMMENT 'FK para dimensão clientes';
-- Tags (para descoberta e classificação)
ALTER TABLE silver.pedidos.fato_pedidos
SET TAGS ('domínio' = 'comercial', 'pii' = 'false', 'sla' = 'diário');Ver também: databricks | databricks-volumes | databricks-delta-lake | databricks-asset-bundles