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.

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.

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

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

Funções de agregação aproximada

Como uma alternativa para funções específicas de HLL++, D3A ou KLL para aproximação baseada em esboço, o GoogleSQL fornece funções de agregação predefinidas aproximadas. 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 a lista de funções agregadas aproximadas que podem ser usadas para aproximação baseada em esboço, consulte Funções agregadas aproximadas.