Rabiscar

O GoogleSQL para BigQuery suporta esboços de dados. Um esboço de dados é um resumo compacto de uma agregação de dados. Ele captura todas as informações necessárias para extrair um resultado de agregação, continuar uma agregação de dados ou mesclá-la com outro esboço, permitindo uma nova agregação.

Calcular uma métrica usando um esboço é muito mais barato do que calcular um valor exato. Se a computação for muito lenta ou precisar de muito armazenamento temporário, use esboços para reduzir o tempo e os recursos de consulta.

Além disso, a computação de cardinalidades, como o número de usuários distintos, ou de quantis, como a duração média da visita, sem esboços geralmente só é possível ao executar jobs nos dados brutos, porque os dados já agregados não podem ser mais combinados.

Considere uma tabela com os seguintes dados:

Produto Número de usuários Duração média da visita
Produto A 500 milhões 10 minutos
Produto B 20 milhões 2 minutos

Não é possível calcular o número total de usuários dos dois produtos porque não sabemos quantos usuários usaram ambos os produtos na tabela.

Uma solução é armazenar sketches na tabela. Cada esboço é uma representação aproximada e compacta de uma propriedade de entrada específica, como a cardinalidade, que pode ser armazenada, mesclada (ou reagregada) e consultada para resultados quase exatos. No exemplo anterior, é possível estimar o número de usuários distintos para os produtos A e B criando e mesclando (reagregando) os esboços de cada produto. Você também pode estimar a duração média da visita com esboços de quantis que também podem ser combinados e consultados.

Como um esboço tem compactação com perdas dos dados originais, ele introduz um erro estatístico que é representado por um limite de erro ou intervalo de confiança (CI, na sigla em inglês). Para a maioria das aplicações, essa incerteza é pequena. Por exemplo, um esboço típico de contagem de cardinalidade tem um erro relativo de cerca de 1% em 95% de todos os casos. Um esboço troca alguma acurácia, ou precisão, por cálculos mais rápidos e baratos e menos armazenamento.

Em resumo, um esboço tem as seguintes propriedades principais:

  • Representa um agregado aproximado de uma métrica específica
  • É compacto
  • É uma forma serializada de uma estrutura de dados sublinear na memória
  • Geralmente é um tamanho fixo e assintoticamente menor do que a entrada
  • Pode introduzir um erro estatístico que você determina com um nível de precisão
  • Pode ser mesclado com outros esboços para resumir a união dos conjuntos de dados

Nova agregação com mesclagem de esboços

Os esboços permitem armazenar e mesclar dados para uma nova agregação eficiente. Isso torna os esboços especialmente úteis para visualizações materializadas de conjuntos de dados. É possível mesclar esboços para criar um resumo de vários fluxos de dados com base em esboços parciais criados para cada fluxo.

Por exemplo, se você criar um esboço para o número estimado de usuários distintos todos os dias, poderá conferir o número de usuários nos últimos sete dias mesclando esboços diários. A reagregação dos esboços diários mesclados ajuda a evitar a leitura da entrada completa do conjunto de dados.

A reagregação do Sketch também é útil no processamento analítico on-line (OLAP, na sigla em inglês). É possível mesclar esboços para criar uma visualização completa de um cubo de OLAP, em que o esboço resume os dados ao longo de uma ou mais dimensões específicas do cubo. Não é possível fazer visualizações completas de OLAP com contagens verdadeiras distintas.

Integração de esboço

É possível integrar sketches a outros sistemas. Por exemplo, é possível criar esboços em aplicativos externos, como o Dataflow ou o Apache Spark, e consumi-los no GoogleSQL ou vice-versa.

Além do GoogleSQL, é possível usar esboços com as seguintes linguagens de programação:

  • C++
  • Go
  • Java
  • Python

Estime a cardinalidade sem exclusões

Se você precisar estimar a cardinalidade e não precisar da capacidade de excluir itens do esboço, use um esboço HLL++.

Por exemplo, para conferir o número de usuários únicos que usaram ativamente um produto em um determinado mês (métricas MAU ou 28DAU), use um esboço HLL++.

Sketches HLL

O HyperLogLog++ (HLL++) é um algoritmo de esboço para estimar a cardinalidade. O HLL++ é baseado no documento HyperLogLog in Practice, em que ++ indica os aumentos feitos no algoritmo HyperLogLog.

A cardinalidade é o número de elementos distintos na entrada de um sketch. Por exemplo, você pode usar um esboço HLL++ para descobrir o número de usuários únicos que abriram um aplicativo.

O HLL++ estima a cardinalidade muito pequena e muito grande. O HLL++ inclui uma representação esparsa e de função de hash de 64-bits que reduz os requisitos de memória de estimativas cardinais pequenas e de correções de tendência empírica de estimativas cardinais pequenas.

Precisão

Os sketches HLL++ são compatíveis com precisão personalizada. A tabela a seguir mostra os valores de precisão compatíveis, o tamanho máximo de armazenamento e o intervalo de confiança (CI) dos níveis de precisão típicos:

Precisão Tamanho máximo de armazenamento CI de 65% CI de 95% CI de 99%
10 1 KiB + 28 B ±3.25% ±6,50% ±9.75%
11 2 KiB + 28 B ±2.30% ±4,60% ±6.89%
12 4 KiB + 28 B ±1.63% ±3.25% ±4.88%
13 8 KiB + 28 B ±1.15% ±2.30% ±3.45%
14 16 KiB + 30 B ±0.81% ±1.63% ±2.44%
15 (padrão) 32 KiB + 30 B ±0.57% ±1,15% ±1,72%
16 64 KiB + 30 B ±0.41% ±0,81% ±1,22%
17 128 KiB + 30 B ±0.29% ±0,57% ±0,86%
18 256 KiB + 30 B ±0.20% ±0,41% ±0,61%
19 512 KiB + 30 B ±0.14% ±0,29% ±0,43%
20 1024 KiB + 30 B ±0.10% ±0.20% ±0.30%
21 2048 KiB + 32 B ±0.07% ±0.14% ±0.22%
22 4096 KiB + 32 B ±0.05% ±0.10% ±0.15%
23 8192 KiB + 32 B ±0.04% ±0.07% ±0.11%
24 16384 KiB + 32 B ±0.03% ±0.05% ±0.08%

É possível definir a precisão de um esboço HLL++ ao inicializá-lo com a função HLL_COUNT.INIT.

Exclusão

Não é possível excluir valores de um esboço HLL++.

Mais detalhes

Para conferir uma lista das funções que podem ser usadas com esboços HLL++, consulte Funções HLL++.

Funções de agregação aproximada

Como alternativa às funções de aproximação específicas baseadas em esboço, o GoogleSQL fornece funções de agregação aproximada predefinidas. Essas funções agregadas aproximadas são compatíveis com esboços para estimativas comuns, como contagem distinta, quantis e contagem superior, mas não permitem precisão personalizada. Elas também não expõem e armazenam o esboço para nova agregação, como outros tipos de esboços. As funções agregadas aproximadas são projetadas para executar consultas rápidas baseadas em esboços sem configuração detalhada.

Para conferir uma lista de funções agregadas aproximadas que podem ser usadas para aproximação baseada em esboço, consulte Funções agregadas aproximadas.