Escolher granularidade em uma coluna ou tabela com base nos requisitos

Concluído(a)

A granularidade é uma das decisões de design mais críticas que você toma ao criar um modelo de dados. Ele define o nível de detalhes capturado em suas tabelas e afeta diretamente os custos de armazenamento, o desempenho da consulta e as perguntas analíticas que você pode responder. Como engenheiro de dados, entender a granularidade ajuda você a criar tabelas que atendam aos requisitos de negócios, mantendo operações eficientes.

Esta unidade explica o que significa granularidade no contexto de modelagem dimensional e como avaliar diferentes opções de granularidade com base nos requisitos da sua organização.

Entender o que a granularidade representa

A granularidade, às vezes chamada de "granuloso", descreve o nível de detalhes que cada linha em uma tabela representa. Em uma tabela de fatos, a granularidade determina qual evento de negócios ou medida cada linha captura. Em uma tabela de dimensão, o grão determina como as entidades são representadas e versionadas.

Considere um cenário de dados do sensor IoT. Você pode projetar sua tabela de fatos em diferentes níveis de granularidade:

Diagrama explicando o que a granularidade representa.

  • Granularidade de nível de milissegundo: cada linha representa uma única leitura de sensor capturada no nível de milissegundo. Isso capta as informações com mais detalhes, incluindo carimbos de data/hora precisos, valores de sensor e identificadores de dispositivos para cada medição.

  • Segunda granularidade agregada: cada linha representa o valor médio, mínimo ou máximo do sensor para um dispositivo por segundo. As leituras individuais são resumidas em estatísticas por segundo.

  • Granularidade agregada por minuto: cada linha representa estatísticas de sensor agregadas para um dispositivo durante um minuto inteiro. Isso fornece o mínimo de detalhes, mas requer o menor armazenamento.

O grão escolhido afeta tudo downstream. Depois de perder detalhes por meio da agregação, você não poderá recuperá-lo. Se a tabela agregada por minuto mostrar que o sensor X tinha uma temperatura média de 75°C durante um minuto específico, não é possível determinar quais milissegundos tiveram picos de temperatura ou identificar o momento exato em que ocorreu uma anomalia.

Avaliar fatores que influenciam as decisões de granularidade

Escolher a granularidade apropriada requer o balanceamento de várias preocupações concorrentes. A escolha certa depende de seu contexto comercial específico e restrições técnicas.

Os requisitos de negócios determinam a granularidade

As perguntas analíticas que sua organização precisa responder devem ser o principal fator para determinar a granularidade. Pergunte a si mesmo: qual é o nível mais detalhado de análise necessário?

Se os engenheiros de operações precisarem detectar anomalias de equipamento no nível de milissegundo, agregações por minuto não serão suficientes. Se o gerenciamento precisar apenas de resumos de utilização por hora por linha de produção, armazenar cada sensor de leitura desperdiçará recursos.

Considere estes cenários:

Requisitos empresariais Granularidade mínima necessária
Detectar anomalias de vibração do equipamento em tempo real Nível de evento milissegundo
Analisar tendências de temperatura para manutenção preditiva Segundo nível de agregação
Monitorar o consumo de energia por hora por dispositivo Nível de agregação de minutos
Relatar métricas diárias de produção por instalação Nível de agregação por hora

Os padrões de consulta moldam o desempenho

A maneira como os usuários consultam seus dados influencia a granularidade ideal. Quando as consultas normalmente filtram e agregam a níveis mais altos, armazenar dados excessivamente refinados cria uma sobrecarga de processamento desnecessária. Cada consulta deve varrer e agregar mais linhas do que o necessário.

Ao mesmo tempo, o armazenamento de dados em uma granularidade muito grosseira impede que os usuários se aprofundam para responder a perguntas detalhadas. Encontrar o equilíbrio requer a compreensão dos padrões de consulta atuais e previstos.

Os custos de armazenamento e computação se acumulam

Granularidade mais fina significa mais linhas, o que aumenta os custos de armazenamento. Ele também aumenta os custos de computação porque as consultas devem processar mais dados. No Azure Databricks, esses custos são compostos ao longo do tempo à medida que os dados históricos se acumulam.

Uma instalação de fabricação com milhares de sensores capturando leituras em intervalos de milissegundos pode gerar bilhões de linhas diariamente na melhor granularidade. A agregação para estatísticas por segundo ou por minuto pode reduzir as contagens de linhas em 99% ou mais, traduzindo diretamente em custos mais baixos de armazenamento e consultas.

Questões de requisitos de conformidade e auditoria

Os requisitos regulatórios às vezes exigem níveis de granularidade específicos. As organizações de serviços financeiros geralmente devem manter detalhes no nível da transação para fins de auditoria, independentemente dos custos de armazenamento. As organizações de saúde podem precisar acompanhar interações individuais de pacientes por motivos de conformidade.

Quando a conformidade impulsiona sua decisão de granularidade, documente claramente os requisitos. Essa justificativa ajuda quando os stakeholders questionam por que você está armazenando mais detalhes do que as necessidades analíticas por si só exigiriam.

Aplicar granularidade a tabelas de fatos

As tabelas de fatos se beneficiam mais de decisões cuidadosas de granularidade porque normalmente contêm os maiores volumes de dados. O grão de uma tabela de fatos é determinado pela combinação de suas chaves de dimensão.

Uma tabela de fatos de vendas com chaves de dimensão para data, produto, cliente e loja tem uma granularidade de "uma linha por produto por cliente por loja por dia". Cada combinação única desses valores de dimensão gera uma linha diferente. Adicionar uma chave de dimensão temporal em nível da hora alteraria a granularidade para "uma linha por produto por cliente por loja por hora", aumentando muito a contagem de linhas.

Tabela explicando como adicionar uma dimensão de hora a uma tabela de fatos aumenta o número de linhas.

Importante

Declare a granularidade de sua tabela de fatos de forma explícita antes de adicionar colunas. A declaração de granularidade serve como um contrato que orienta todas as decisões de design subsequentes. Por exemplo: "Esta tabela de fatos contém uma linha por item de pedido de venda."

Ao criar tabelas de fatos, considere se você precisa:

  • Grão atômico: o nível mais detalhado capturado no sistema de origem. Escolher grãos atômicos fornece flexibilidade analítica máxima porque você sempre pode agregar para cima, mas nunca desagregar para baixo.

  • Grão agregado: dados pré-resumidos em um nível mais alto do que a fonte. Tabelas de fatos agregadas melhoram o desempenho da consulta para padrões analíticos comuns, mas limitam as perguntas que os usuários podem responder.

Muitas organizações mantêm tabelas de fatos atômicas e agregadas, usando tabelas agregadas como otimização de desempenho, preservando detalhes atômicos para análise ad hoc. No Azure Databricks, exibições materializadas podem manter automaticamente essas tabelas agregadas, atualizando-as à medida que os dados atômicos subjacentes são alterados.

Aplicar granularidade a tabelas de dimensão

As tabelas de dimensão também possuem um nível granular, embora funcione de maneira diferente do nível granular da tabela de fatos. O nível de granularidade determina como você representa e cria uma versão de suas entidades de negócios.

Para uma dimensão de cliente, você pode escolher:

  • Uma linha por cliente: O estado atual de cada cliente, atualizado diretamente quando os atributos são alterados (SCD Tipo 1).
  • Uma linha por cliente por versão: uma nova linha para cada alteração significativa, preservando estados históricos (SCD Tipo 2).
  • Uma linha por cliente por período de tempo: instantâneos periódicos capturando atributos do cliente em intervalos regulares.

A granularidade da dimensão escolhida deve se alinhar com a granularidade da tabela de fatos. Se a tabela de fatos rastrear transações individuais com chaves alternativas para a dimensão do cliente, a granularidade da dimensão do cliente deverá dar suporte a esse relacionamento. Uma transação que referencia o cliente versão 5 deve ser capaz de encontrar essa versão específica na tabela de dimensões.

Equilibrar compensações ao selecionar a granularidade

Nenhuma opção de granularidade única está universalmente correta. Cada decisão envolve compensações que você deve avaliar em relação aos seus requisitos específicos.

Consideração Granularidade fina Granularidade grossa
Flexibilidade analítica Alta – pode responder a perguntas detalhadas Baixo – limitado à análise de agregação
Custos de armazenamento Quanto mais alto, mais linhas a armazenar Reduzido - menos linhas
Desempenho da consulta Mais lento para consultas de agregação Mais rápido para padrões comuns
Análise histórica Dá suporte à análise pontual Pode perder detalhes históricos
Suporte à conformidade Melhor para os requisitos de auditoria Pode não atender aos regulamentos

Quando você está incerto, começar com granularidade mais fina é muitas vezes mais seguro. Você sempre pode criar tabelas de agregação mais tarde para otimização de desempenho, mas não é possível recuperar detalhes que nunca foram capturados. No entanto, essa orientação pressupõe que você tenha o orçamento e a infraestrutura para dar suporte ao armazenamento mais refinado inicialmente.

Entender como escolher a granularidade apropriada permite que você crie modelos de dados que dão suporte às necessidades analíticas da sua organização e, ao mesmo tempo, gerenciem os custos de forma eficaz. Os detalhes de implementação para criar e carregar tabelas na granularidade escolhida no Azure Databricks são abordados em unidades posteriores.