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> ] )
Copy

Função de janela

DATASKETCHES_HLL( [ DISTINCT ] <expr1> [ , <max_log_k> ] )
  OVER ( [ PARTITION BY <expr2> ] )
Copy

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);
      
      Copy
      SELECT DATASKETCHES_HLL_ACCUMULATE(TO_BINARY(HEX_ENCODE(1), 'HEX'));
      
      Copy
    • 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;
Copy

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;
Copy
+---+---------------------+-------------------+
| 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;
Copy
+---------------------+-------------------+
| 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.