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.