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égiaExemplo
Por camada Medalhãobronze, silver, gold
Por ambientedev, staging, prod
Por domíniomarketing, financeiro, operacoes
Por fontesalesforce_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:

PrivilegeEscopo
USE CATALOGCatalog
USE SCHEMASchema
SELECTTable, View
MODIFYTable (INSERT, UPDATE, DELETE)
CREATE TABLESchema
READ VOLUMEVolume
WRITE VOLUMEVolume
ALL PRIVILEGESQualquer 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