Capítulo 22 — Governança de dados: modelos de sistema e de dados
Mapa da aula
Aula 22 publicada. Mapa, exemplo, EX064.
flowchart TD
N0["22.1 Modelando a cadeia"]
N1["Laboratório — Linhagem a montante e lacunas de titul"]
N2["22.2 O que o rastreamento mostra"]
N3["22.3 Fechando as lacunas"]
N4["22.4 Mantendo os modelos atualizados"]
N0 --> N1 --> N2 --> N3 --> N4
N4 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX064"]
Desenho lógico
flowchart LR
N0["22.1 Modelando a cadeia"]
N1["Laboratório — Linhagem a montante e lacunas de titul"]
N2["22.2 O que o rastreamento mostra"]
N3["22.3 Fechando as lacunas"]
N4["22.4 Mantendo os modelos atualizados"]
N0 --> N1 --> N2 --> N3 --> N4 --> Q["EX064"]
[22.1 Modelando a cadeia]
|
v
[Laboratório — Linhagem a montante e lacunas de titul]
|
v
[22.2 O que o rastreamento mostra]
|
v
[22.3 Fechando as lacunas]
|
v
[22.4 Mantendo os modelos atualizados]
|
v
[Exemplo resolvido] --> [Exercício EX064]
Objetivos de aprendizagem
Você vai (1) modelar fluxos de dados e a linhagem de um indicador; (2) encontrar lacunas de titularidade a partir de um grafo de linhagem; (3) manter os modelos atualizados.
22.1 Modelando a cadeia
Kofi modela o indicador de perdas como um grafo dirigido. O número do relatório do conselho depende de um indicador-chave de desempenho, que depende do volume faturado e do volume fornecido. O volume faturado depende das leituras dos medidores e das tarifas; as leituras dependem em parte de leituras manuais feitas em um aplicativo de campo; o volume fornecido depende dos dados brutos de vazão dos sensores. Cada nó é um conjunto de dados ou um cálculo com um dono. O grafo torna explícitas as dependências, que uma descrição escrita do processo tende a embaralhar. Os nós têm nomes.
Laboratório — Linhagem a montante e lacunas de titularidade do número de perdas
"""Trace upstream lineage of a published figure through a synthetic pipeline graph (stdlib only)."""
edges = {
"board_report.leakage_pct": ["kpi.leakage"],
"kpi.leakage": ["billing.volume_billed", "scada.volume_supplied"],
"billing.volume_billed": ["meters.reading", "customers.tariff"],
"scada.volume_supplied": ["sensors.flow_raw"],
"meters.reading": ["field_app.manual_read"],
"customers.tariff": [], "sensors.flow_raw": [], "field_app.manual_read": [],
}
owners = {"kpi.leakage": "ops analytics", "billing.volume_billed": "billing", "scada.volume_supplied": "network ops",
"meters.reading": "metering", "customers.tariff": "billing", "sensors.flow_raw": None, "field_app.manual_read": None}
def up(n, seen):
for p in edges.get(n, []):
if p not in seen: seen.add(p); up(p, seen)
return seen
src = up("board_report.leakage_pct", set())
print(f"upstream nodes {len(src)}; sources {sorted(n for n in src if not edges[n])}")
print(f"nodes without an owner: {sorted(n for n in src if owners.get(n) is None)}")
Execute com python3 lab_lineage.py. Saída verificada:
upstream nodes 7; sources ['customers.tariff', 'field_app.manual_read', 'sensors.flow_raw']
nodes without an owner: ['field_app.manual_read', 'sensors.flow_raw']
22.2 O que o rastreamento mostra
Ao rodar o laboratório, aparecem sete nós a montante do número do conselho. Três são fontes sem entradas adicionais: as tarifas dos clientes, as leituras manuais do aplicativo de campo e os dados brutos de vazão dos sensores. Dois nós não têm dono: as leituras manuais e as vazões brutas dos sensores. Ambos alimentam o número que o regulador vê. Kofi observa que as entradas mais básicas, mais próximas do mundo físico, são justamente onde falta titularidade, porque ficam entre equipes de engenharia e ninguém as reivindicou. Kofi relata as duas lacunas.
22.3 Fechando as lacunas
Kofi propõe donos para as duas lacunas: o gerente de medição para as leituras manuais e o gerente de operação da rede para os dados brutos de vazão. Cada um aceita depois de combinar o que significa ser dono: aprovar regras de qualidade, responder a problemas em prazos acordados e aprovar mudanças. Ele acrescenta os donos ao grafo e roda o rastreamento de novo, que agora não mostra nenhum nó sem dono. A nova execução vira uma verificação mensal, já que novos conjuntos de dados acrescentados à cadeia podem reabrir lacunas. Os dois donos assinam uma breve declaração de titularidade.
22.4 Mantendo os modelos atualizados
Modelos de linhagem envelhecem à medida que os sistemas mudam. Kofi propõe que qualquer mudança no pipeline de perdas atualize o grafo na mesma versão, o que é garantido por uma lista de verificação da revisão. Ele também compara o grafo com os registros de consultas do data warehouse a cada trimestre, para encontrar dependências que existem na prática, mas não no modelo. A Profa. Varga explica que um modelo que se afasta da realidade é pior do que nenhum, porque as pessoas confiam nele e tomam decisões com base em suposições erradas. Aparecem duas dessas dependências, e ambas são acrescentadas prontamente.
Exemplo resolvido
Kofi modela a cadeia de perdas como um grafo, rastreia sete nós a montante, com três fontes e dois nós sem dono, designa donos e mantém o modelo atualizado com verificações nas versões e comparações com os registros.
Caso sintético. O grafo é sintético; as saídas vêm de lab_lineage.py.
Erros e limites
A linhagem estática não vê dependências em tempo de execução; compare-a com os registros.
Exercícios
- EX064 — Contagem a montante. Quantos nós a montante há por trás do número do conselho? Rubrica: 3 = sete;; 2 = parcialmente correto;; 1 = errado;; 0 = nenhuma.
- EX065 — Nós sem dono. Quais nós não tinham dono? Rubrica: 3 = field_app.manual_read e sensors.flow_raw;; 2 = ambos;; 1 = um;; 0 = nenhuma.
- EX066 — Verificação de desvio. Como Kofi encontra dependências ausentes do modelo? Rubrica: 3 = comparação trimestral com os registros de consultas;; 2 = parcialmente correto;; 1 = vago;; 0 = nenhuma.
Continue estudando — aula 22 (capítulo 22 de 50)
← Capítulo 21 · Índice das aulas · Capítulo 23 →
Continue para a próxima aula já escrita.