Agregação aproximada no SQL padrão

Neste tópico, explicamos os conceitos por trás da agregação aproximada no BigQuery.

O que é agregação aproximada?

Agregação aproximada é a estimativa de saídas da função agregada, como cardinalidade e quantis. A agregação aproximada exige menos memória do que funções de agregação normais, como COUNT(DISTINCT ...), mas também traz incerteza estatística. Isso a torna apropriada para grandes streams de dados para os quais o uso da memória linear é impraticável, bem como para dados já aproximados. Quando precisar de resultados exatos, use funções agregadas exatas. Este tópico descreve os conceitos por trás da agregação aproximada no BigQuery.

Agregação aproximada de precisão fixa

O BigQuery aceita funções agregadas com precisão fixa para estimar a cardinalidade e os quantis. Essas funções atuam diretamente nos dados de entrada, em vez de uma estimativa intermediária dos dados. Essas funções não permitem que usuários especifiquem a precisão da estimativa.

Como armazenar valores agregados estimados como esboços

O BigQuery aceita funções de estimativa de cardinalidade do HyperLogLog++ para estimar o número de valores distintos em um grande conjunto de dados.

Essas funções atuam em esboços que compactam um conjunto arbitrário em uma representação da memória fixa. O BigQuery armazena esses esboços como BYTES. Você pode mesclar os esboços para produzir um novo esboço que represente a união dos esboços de entrada, antes de extrair uma estimativa numérica final do esboço.

Por exemplo, considere a tabela a seguir, que contém sabores de sorvetes e quantas pessoas disseram gostar de um sabor.

Sabor Pessoas
Baunilha 3.945
Chocolate 1.728
Morango 2.051

Caso esta tabela seja o resultado da agregação, talvez não seja possível usá-la para calcular a cardinalidade. Se você quisesse saber o número de pesquisados únicos, não seria possível usar SUM para agregar a coluna People, porque alguns pesquisados podem ter respondido positivamente a mais de um sabor. Por outro lado, realizar uma função agregada nos dados brutos subjacentes pode consumir muito tempo e memória.

Uma solução é armazenar uma agregação ou um esboço aproximado dos dados brutos. Esboço é um resumo dos dados brutos. Os esboços exigem menos memória do que os dados brutos, e você pode extrair uma estimativa, como o número estimado de usuários únicos, a partir do esboço.

Como especificar precisão de aproximação

As funções de agregação aproximadas baseadas em rascunho do BigQuery permitem especificar a precisão do esboço quando você o cria. A precisão do esboço afeta a precisão da estimativa que você pode extrair do esboço. Quanto maior a precisão, mais memória é necessária para processar os esboços ou armazená-los no disco, mas isso reduz o erro relativo de qualquer estimativa extraída do esboço. Depois que tiver criado o esboço, você só poderá mesclá-lo com outros esboços da mesma precisão.

Como mesclar esboços

Você pode mesclar dois ou mais esboços para produzir um novo esboço que represente uma estimativa da união dos dados subjacentes aos esboços diferentes. Uma função de mesclagem, como HLL_COUNT.MERGE, retorna a estimativa como um número, e uma função de mesclagem parcial, como HLL_COUNT.MERGE_PARTIAL, retorna o novo esboço em BYTES. Uma mesclagem parcial será útil se você quiser reduzir uma tabela que já contenha esboços, mas ainda não quiser extrair uma estimativa. Por exemplo, use essa função se você quiser criar um esboço que mesclará a outro esboço posteriormente.

Como extrair estimativas de esboços

Depois que tiver armazenado um esboço ou mesclado dois ou mais esboços em um novo, você poderá usar a função de extração, como HLL_COUNT.EXTRACT, para retornar uma estimativa dos dados subjacentes, como o número estimado de usuários únicos, como um número.

Algoritmos

Nesta seção, descrevemos os algoritmos agregados aproximados compatíveis com o BigQuery.

HyperLogLog++

O HyperLogLog ++ é uma melhoria no algoritmo HyperLogLog para estimar valores distintos em um conjunto de dados (páginas em inglês). No BigQuery, as funções de estimativa de cardinalidade do HyperLogLog++ usam esse algoritmo. O HyperLogLog++ melhora o algoritmo HyperLogLog usando a correção de polarização para reduzir o erro em um intervalo importante de cardinalidades.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Precisa de ajuda? Acesse nossa página de suporte.