Melhores práticas de otimização de esquema
Um esquema de tabela define os nomes e os tipos de dados de todas as colunas na tabela. O esquema de tabela pode ser definido durante a criação da tabela ou como parte do processo de ingestão de dados, modificando o mapeamento de ingestão aplicável. A maneira como um esquema de tabela é definido pode afetar significativamente o desempenho da consulta. O esquema ideal para os seus dados depende de muitos fatores, incluindo caso de uso, padrões de acesso a dados e os dados específicos que você planeja armazenar. Este artigo descreve as melhores práticas para otimizar o desempenho criando esquemas eficientes.
Tipos de dados
Para gerar mais informações sobre tipos de dados, consulte Tipos de dados escalares.
Os campos comumente usados devem ser colunas digitadas e não do tipo dinâmico.
As propriedades JSON pesquisadas ou agregadas com frequência em uma coluna dinâmica devem ser convertidas em uma coluna regular na tabela com um tipo mais específico, como sequência, longo ou real.
As colunas esparsas que normalmente não são usadas para filtragem e agregação devem ser coletadas como um recipiente de propriedades em uma coluna dinâmica por meio da transformação de mapeamento
DropMappedFields
.As colunas de data/hora devem ser digitadas como datetime e não como longo ou outros tipos de dados.
- Use o DateTime dos mapeamentos de transformação unix, por exemplo
DateTimeFromUnixMilliseconds
. .
- Use o DateTime dos mapeamentos de transformação unix, por exemplo
O tipo decimal fornece precisão exata, o que o torna mais adequado para aplicativos financeiros e outros que exigem precisão exata. No entanto, é muito mais lento do que o tipo real. Use o tipo decimal somente quando necessário.
Todas as colunas de ID (identificação) devem ser digitadas como sequência e não numéricas. Esse tipo tornará o índice muito mais efetivo e pode melhorar significativamente o tempo de pesquisa. Ele também habilitará o particionamento, já que o particionamento só pode ser definido em colunas de sequência. Se os filtros de consulta usados nessa coluna forem apenas de igualdade, por exemplo, se a coluna tiver GUIDs, você poderá usar o perfil de codificação
Identifier
. Para obter mais informações, consulte política de codificação.
Tabelas
- Otimize para tabelas estreitas, que são preferíveis em relação a tabelas largas com centenas de colunas.
- Para evitar junções caras durante o tempo de consulta, desnormalize os dados de dimensão enriquecendo-os durante a ingestão. Se a tabela de dimensões usada para o enriquecimento estiver atualizada e o cenário exigir o valor mais recente, use materialize views para manter apenas o valor mais recente.
- Se houver mais de 20 colunas esparsas, o que significa que muitos valores são nulos, e essas colunas raramente forem usadas para pesquisas ou agregação, agrupe as colunas como um recipiente de propriedades JSON em uma coluna dinâmica usando o mapeamento de transformação
DropMappedFields
.
Indexação
Os campos que nunca são pesquisados podem desabilitar a indexação. Use a política de codificação com o perfil BigObject
para desabilitar a indexação em colunas digitadas de sequência ou dinâmicas.