

 O Amazon Redshift não permitirá mais a criação de UDFs do Python a partir do Patch 198. As UDFs do Python existentes continuarão a funcionar normalmente até 30 de junho de 2026. Para ter mais informações, consulte a [publicação de blog ](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

# Exemplos
<a name="r_HLL-examples"></a>

Esta seção contém exemplos de uso do HyperLogLog com o Amazon Redshift.

**Topics**
+ [Exemplo: retornar cardinalidade em uma subconsulta](#hll-examples-subquery)
+ [Exemplo: retorna um tipo HLLSKETCH de esboços combinados em uma subconsulta](#hll-examples-combined-subquery)
+ [Exemplo: retorna um esboço do HyperLogLog da combinação de vários esboços](#hll-examples-multiple-sketches)
+ [Exemplo: gerar esboços do HyperLogLog sobre dados do S3 usando tabelas externas](#hll-examples-cache-sketches)

## Exemplo: retornar cardinalidade em uma subconsulta
<a name="hll-examples-subquery"></a>

O exemplo a seguir retorna a cardinalidade para cada esboço em uma subconsulta para uma tabela chamada *Vendas*.

```
CREATE TABLE Sales (customer VARCHAR, country VARCHAR, amount BIGINT);
INSERT INTO Sales VALUES ('David Joe', 'Greece', 14.5),  ('David Joe', 'Greece', 19.95), ('John Doe', 'USA', 29.95), ('John Doe', 'USA', 19.95), ('George Spanos', 'Greece', 9.95), ('George Spanos', 'Greece', 2.95);
```

A consulta a seguir gera um esboço HLL para os clientes de cada país e extrai a cardinalidade. Isso mostra clientes únicos de cada país.

```
SELECT hll_cardinality(sketch), country
FROM (SELECT hll_create_sketch(customer) AS sketch, country
        FROM Sales
        GROUP BY country) AS hll_subquery;
        
hll_cardinality | country
----------------+---------
            1   | USA
            2   | Greece
 ...
```

## Exemplo: retorna um tipo HLLSKETCH de esboços combinados em uma subconsulta
<a name="hll-examples-combined-subquery"></a>

O exemplo a seguir retorna um único tipo HLLSKETCH que representa a combinação de esboços individuais de uma subconsulta. Os esboços são combinados usando a função agregada HLL\$1COMBINE. 

```
SELECT hll_combine(sketch)
FROM (SELECT hll_create_sketch(customer) AS sketch
        FROM Sales
        GROUP BY country) AS hll_subquery
       
                                        hll_combine
--------------------------------------------------------------------------------------------
 {"version":1,"logm":15,"sparse":{"indices":[29808639,35021072,47612452],"values":[1,1,1]}}
(1 row)
```

## Exemplo: retorna um esboço do HyperLogLog da combinação de vários esboços
<a name="hll-examples-multiple-sketches"></a>

Para o exemplo a seguir, suponha que a tabela `page-users` armazena esboços pré-agregados para cada página que os usuários visitaram em um determinado site. Cada linha nesta tabela contém um esboço HyperLogLog que representa todos os IDs de usuário que mostram as páginas visitadas.

```
page_users
-- +----------------+-------------+--------------+
-- | _PARTITIONTIME | page         | sketch |
-- +----------------+-------------+--------------+
-- | 2019-07-28     | homepage     | CHAQkAQYA... |
-- | 2019-07-28     | Product A    | CHAQxPnYB... |
-- +----------------+-------------+--------------+
```

O exemplo a seguir une os vários esboços pré-agregados e gera um único esboço. Este esboço encapsula a cardinalidade coletiva que cada esboço encapsula.

```
SELECT hll_combine(sketch) as sketch
FROM page_users
```

A saída será semelhante à seguinte.

```
-- +-----------------------------------------+
-- | sketch |
-- +-----------------------------------------+
-- | CHAQ3sGoCxgCIAuCB4iAIBgTIBgqgIAgAwY.... |
-- +-----------------------------------------+
```

Quando um novo esboço é criado, você pode usar a função HLL\$1CARDINALITY para obter os valores distintos coletivos, como mostrado a seguir.

```
SELECT hll_cardinality(sketch)
FROM ( 
  SELECT
  hll_combine(sketch) as sketch
  FROM page_users
) AS hll_subquery
```

A saída será semelhante à seguinte.

```
-- +-------+
-- | count |
-- +-------+
-- | 54356 |
-- +-------+
```

## Exemplo: gerar esboços do HyperLogLog sobre dados do S3 usando tabelas externas
<a name="hll-examples-cache-sketches"></a>

Os exemplos a seguir armazenam em cache os esboços do HyperLogLog para evitar acessar diretamente o Amazon S3 para estimativa de cardinalidade. 

Você pode pré-agregar e armazenar em cache esboços do HyperLogLog em tabelas externas definidas para armazenar dados do Amazon S3. Ao fazer isso, você pode extrair estimativas de cardinalidade sem acessar os dados básicos subjacentes. 

Por exemplo, suponha que você tenha descarregado um conjunto de arquivos de texto delimitados por tabulação no Amazon S3. Execute a consulta a seguir para definir uma tabela externa chamada `sales` no esquema externo do Amazon Redshift chamado`spectrum`. O bucket do Amazon S3 para este exemplo está na Região da AWS do Leste dos EUA (Norte da Virgínia).

```
create external table spectrum.sales(
salesid integer,
listid integer,
sellerid smallint,
buyerid smallint,
eventid integer,
dateid integer,
qtysold integer,
pricepaid decimal(8,2),
commission decimal(8,2),
saletime timestamp)
row format delimited
fields terminated by '\t' stored as textfile
location 's3://redshift-downloads/tickit/spectrum/sales/';
```

Suponha que você queira computar os compradores distintos que compraram um item em datas arbitrárias. Para fazer isso, o exemplo a seguir gera esboços para os IDs do comprador para cada dia do ano e armazena o resultado na tabela do Amazon Redshift `hll_sales`.

```
CREATE TABLE hll_sales AS
SELECT saletime, hll_create_sketch(buyerid) AS sketch
FROM spectrum.sales
GROUP BY saletime;
            
SELECT TOP 5 * FROM hll_sales;
```

A saída será semelhante à seguinte.

```
-- hll_sales

-- | saletime        | sketch                                                              |
-- +-----------------+---------------------------------------------------------------------+
-- | 7/22/2008 8:30  | {"version":1,"logm":15,"sparse":{"indices":[9281416],"values":[1]}}
-- | 2/19/2008 0:38  | {"version":1,"logm":15,"sparse":{"indices":[48735497],"values":[3]}}
-- | 11/5/2008 4:49  | {"version":1,"logm":15,"sparse":{"indices":[27858661],"values":[1]}}
-- | 10/27/2008 4:08 | {"version":1,"logm":15,"sparse":{"indices":[65295430],"values":[2]}}
-- | 2/16/2008 9:37  | {"version":1,"logm":15,"sparse":{"indices":[56869618],"values":[2]}}
-- +---------------- +---------------------------------------------------------------------+
```

A consulta a seguir mostra o número estimado de consumidores distintos que compraram um item durante a sexta-feira após a Ação de Graças em 2008.

```
SELECT hll_cardinality(hll_combine(sketch)) as distinct_buyers
FROM hll_sales
WHERE trunc(saletime) = '2008-11-28';
```

A saída será semelhante à seguinte.

```
distinct_buyers
---------------
386
```

Suponha que você queira o número de usuários distintos que compraram um item em um determinado intervalo de datas. Um exemplo pode ser da sexta-feira após o Dia de Ação de Graças até a segunda-feira seguinte. Para obter isso, a consulta a seguir usa a função agregada `hll_combine`. Esta função permite evitar a contagem dupla de compradores que compraram um item em mais de um dia do intervalo selecionado. 

```
SELECT hll_cardinality(hll_combine(sketch)) as distinct_buyers
FROM hll_sales
WHERE saletime BETWEEN '2008-11-28' AND '2008-12-01';
```

A saída será semelhante à seguinte.

```
distinct_buyers
---------------
1166
```

Para manter a tabela `hll_sales` atualizada, execute a consulta a seguir no final de cada dia. Isso gera um esboço do HyperLogLog com base nos IDs dos compradores que compraram um item hoje e o adiciona à tabela `hll_sales`.

```
INSERT INTO hll_sales 
SELECT saletime, hll_create_sketch(buyerid) 
FROM spectrum.sales 
WHERE TRUNC(saletime) = to_char(GETDATE(), 'YYYY-MM-DD')
GROUP BY saletime;
```