(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa
Modelação de Dados (Kimball)
Modelação de Dados (Kimball) 1 min

Data Vault 2.0: flexibilidade e rastreabilidade para warehouses modernos

João Barros 13 de August de 2025 1 min de leitura

O Data Vault 2.0 é uma metodologia de modelação para raw data vaults que prioriza auditabilidade, paralelismo de carga e adaptabilidade a mudanças de negócio. Não substitui o Kimball — os dois coexistem: Data Vault na camada raw/silver, dimensional na camada gold/apresentação.

Os 3 tipos de tabela

HUB — identidade de negócio única
  Contém: hash key + business key + metadata de carga
  Ex: HUB_Cliente (hk_cliente, nk_cliente_erp, load_dts, rec_src)

LINK — relações entre Hubs
  Contém: hash key do link + hk de cada Hub relacionado + metadata
  Ex: LNK_Venda (hk_venda, hk_cliente, hk_produto, load_dts, rec_src)

SATELLITE — atributos descritivos e histórico
  Contém: hk do pai + hash diff + atributos + metadata
  Ex: SAT_Cliente_CRM (hk_cliente, load_dts, hash_diff, nome, email, segmento)

Implementação do Hub

CREATE TABLE dbo.HUB_Cliente (
    hk_cliente  BINARY(16) NOT NULL PRIMARY KEY,  -- MD5/SHA-1 da business key
    nk_cliente  INT        NOT NULL,
    load_dts    DATETIME2  NOT NULL DEFAULT SYSDATETIME(),
    rec_src     VARCHAR(50)NOT NULL                -- sistema de origem
);

-- Inserir apenas novos (sem updates — Data Vault é insert-only)
INSERT INTO dbo.HUB_Cliente (hk_cliente, nk_cliente, rec_src)
SELECT HASHBYTES('MD5', CAST(nk_cliente AS VARCHAR)), nk_cliente, 'ERP_SAP'
FROM stg.Clientes src
WHERE NOT EXISTS (SELECT 1 FROM dbo.HUB_Cliente WHERE hk_cliente = HASHBYTES('MD5', CAST(src.nk_cliente AS VARCHAR)));

Satellite com detecção de alterações

-- Só insere quando os atributos mudam (hash_diff)
INSERT INTO dbo.SAT_Cliente_CRM (hk_cliente, load_dts, hash_diff, nome, email, segmento, rec_src)
SELECT
    HASHBYTES('MD5', CAST(src.nk_cliente AS VARCHAR)) AS hk_cliente,
    SYSDATETIME(),
    HASHBYTES('MD5', CONCAT(src.nome, '|', src.email, '|', src.segmento)) AS hash_diff,
    src.nome, src.email, src.segmento, 'CRM'
FROM stg.Clientes src
LEFT JOIN (SELECT hk_cliente, hash_diff FROM dbo.SAT_Cliente_CRM WHERE load_dts = (SELECT MAX(load_dts) FROM dbo.SAT_Cliente_CRM s2 WHERE s2.hk_cliente = dbo.SAT_Cliente_CRM.hk_cliente)) latest
    ON HASHBYTES('MD5', CAST(src.nk_cliente AS VARCHAR)) = latest.hk_cliente
WHERE latest.hash_diff IS NULL OR latest.hash_diff <> HASHBYTES('MD5', CONCAT(src.nome, '|', src.email, '|', src.segmento));

Conclusão

Data Vault 2.0 brilha em ambientes com muitas fontes, requisitos de auditoria fortes e schemas que mudam frequentemente. O modelo insert-only com hash keys permite carga paralela de centenas de tabelas e rastreabilidade completa. Combine com uma camada dimensional para consumo por BI.

Partilhar: