- Categorias:
Funções de agregação (Cardinality Estimation) , Funções de janela
DATASKETCHES_HLL¶
Retorna uma aproximação da cardinalidade distinta da entrada (ou seja, DATASKETCHES_HLL(col1)
retorna uma aproximação de COUNT(DISTINCT col1)
).
Essa função é uma versão da função HLL HyperLogLog que pode ler esboços de binário no formato usado pelo Apache DataSketches. Para obter mais informações, consulte a documentação do Apache DataSketches.
- Consulte também:
DATASKETCHES_HLL_ACCUMULATE , DATASKETCHES_HLL_COMBINE , DATASKETCHES_HLL_ESTIMATE
Sintaxe¶
Função de agregação
DATASKETCHES_HLL( [ DISTINCT ] <expr1> [ , <max_log_k> ] )
Função de janela
DATASKETCHES_HLL( [ DISTINCT ] <expr1> [ , <max_log_k> ] )
OVER ( [ PARTITION BY <expr2> ] )
Argumentos exigidos¶
expr1
A expressão para a qual você deseja saber o número de valores distintos.
Argumentos opcionais¶
max_log_k
O valor máximo, em log2, de K para inicializar o objeto HLL datasketches. Especifique um valor INTEGER entre 4 e 21, inclusive. Para obter mais informações, consulte a documentação do Apache DataSketches.
Padrão: 12
expr2
A expressão opcional usada para agrupar linhas em partições.
Retornos¶
A função retorna um valor do tipo DOUBLE.
Se a entrada estiver vazia, a saída será 0.0
.
Notas de uso¶
DISTINCT é suportado sintaticamente, mas não tem efeito.
A função aceita argumentos que são valores dos seguintes tipos de dados:
Tipos de dados de cadeia de caracteres e binários (por exemplo, VARCHAR e BINARY).
Por exemplo, há suporte para as seguintes chamadas de função:
SELECT DATASKETCHES_HLL_ACCUMULATE(1::TEXT);
SELECT DATASKETCHES_HLL_ACCUMULATE(TO_BINARY(HEX_ENCODE(1), 'HEX'));
Tipos de dados para números de ponto flutuante (por exemplo, FLOAT e DOUBLE)
A biblioteca DataSketches converte esses valores em valores DOUBLE.
Tipos de dados para números de ponto fixo (por exemplo, INTEGER e NUMERIC).
A função só é compatível com tipos numéricos com uma escala de 0. No entanto, você pode converter valores numéricos com uma escala diferente de 0 em tipos de dados para um número de ponto flutuante.
A biblioteca DataSketches converte esses valores no intervalo de um valor INTEGER assinado de 64 bits para um valor INTEGER assinado de 64 bits.
A biblioteca DataSketches não converte diretamente os valores INTEGER que excedem o intervalo INTEGER assinado de 64 bits (como valores inteiros de 128 bits). No entanto, o Snowflake ainda é compatível com esses valores, convertendo-os automaticamente em valores de DOUBLE, que são compatíveis com DataSketches. Esse comportamento é idêntico ao comportamento da biblioteca
datasketches-python
.
Não há suporte para valores de outros tipos de dados. Por exemplo, os valores VARIANT e ARRAY não são compatíveis.
Para obter mais informações sobre valores NULL e funções agregadas, consulte Funções de agregação e valores NULL.
Quando essa função é chamada como uma função de janela, ela não é compatível:
Uma cláusula ORDER BY dentro da cláusula OVER.
Quadros de janela explícitos.
Exemplos¶
Criar uma tabela e inserir valores:
CREATE OR REPLACE TABLE datasketches_demo(v INT, g INT);
INSERT INTO datasketches_demo SELECT 1, 1;
INSERT INTO datasketches_demo SELECT 2, 1;
INSERT INTO datasketches_demo SELECT 2, 1;
INSERT INTO datasketches_demo SELECT 2, 1;
INSERT INTO datasketches_demo SELECT 1, 2;
INSERT INTO datasketches_demo SELECT 1, 2;
INSERT INTO datasketches_demo SELECT 4, 2;
INSERT INTO datasketches_demo SELECT 4, 2;
INSERT INTO datasketches_demo SELECT 5, 2;
Os exemplos a seguir usam os dados da tabela.
Retorna a cardinalidade estimada dos dados agrupados em uma coluna¶
Use a função DATASKETCHES_HLL para aproximar a cardinalidade distinta dos dados na coluna v
agrupados pelos valores na coluna g
.
SELECT g,
DATASKETCHES_HLL(v),
COUNT(DISTINCT v)
FROM datasketches_demo GROUP BY g;
+---+---------------------+-------------------+
| G | DATASKETCHES_HLL(V) | COUNT(DISTINCT V) |
|---+---------------------+-------------------|
| 1 | 2.000000005 | 2 |
| 2 | 3.000000015 | 3 |
+---+---------------------+-------------------+
A saída mostra que, para o valor 1
na coluna g
, há cerca de dois valores distintos na coluna v
(ou seja, 1
e 2
). Para o valor 2
na coluna g
, há cerca de três valores distintos na coluna v
(ou seja, 1
, 4
e 5
). A chamada COUNT(DISTINCT v))
retorna o número exato de valores distintos em vez de uma estimativa.
Se você usar a função DATASKETCHES_HLL_ACCUMULATE para criar esboços de binário a partir dos dados agrupados, a função DATASKETCHES_HLL_ESTIMATE retornará os mesmos resultados para os esboços acumulados. Para obter um exemplo, consulte Retorna a estimativa de cardinalidade para esboços de binário acumulados.
Retorna a cardinalidade estimada de todos os dados em uma coluna¶
Use a função DATASKETCHES_HLL para aproximar a cardinalidade distinta de todos os dados da coluna v
.
SELECT DATASKETCHES_HLL(v),
COUNT(DISTINCT v)
FROM datasketches_demo;
+---------------------+-------------------+
| DATASKETCHES_HLL(V) | COUNT(DISTINCT V) |
|---------------------+-------------------|
| 4.00000003 | 4 |
+---------------------+-------------------+
A saída mostra que há cerca de quatro valores distintos na coluna v
(ou seja, 1
, 2
, 4
e 5
). A chamada COUNT(DISTINCT v))
retorna o número exato de valores distintos em vez de uma estimativa.
Se você utilizar a função DATASKETCHES_HLL_ACCUMULATE para criar esboços de binário a partir dos dados agrupados e, em seguida, utilizar a função DATASKETCHES_HLL_COMBINE para combinar os esboços em um esboço unificado, a função DATASKETCHES_HLL_ESTIMATE retornará os mesmos resultados para o esboço unificado. Para obter um exemplo, consulte Retorna a estimativa de cardinalidade para esboços de binário combinados.