

 Amazon Redshift ne prendra plus en charge la création de nouveaux UDFs Python à partir du patch 198. Les fonctions Python définies par l’utilisateur existantes continueront de fonctionner normalement jusqu’au 30 juin 2026. Pour plus d’informations, consultez le [ billet de blog ](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

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

Cette section contient des exemples d'utilisation HyperLogLog avec Amazon Redshift.

**Topics**
+ [Exemple : renvoyer la cardinalité dans une sous-requête](#hll-examples-subquery)
+ [Exemple : renvoyer un type HLLSKETCH à partir d'esquisses combinées dans une sous-requête](#hll-examples-combined-subquery)
+ [Exemple : renvoyer une HyperLogLog esquisse en combinant plusieurs esquisses](#hll-examples-multiple-sketches)
+ [Exemple : générer des HyperLogLog esquisses sur des données S3 à l'aide de tables externes](#hll-examples-cache-sketches)

## Exemple : renvoyer la cardinalité dans une sous-requête
<a name="hll-examples-subquery"></a>

L'exemple suivant renvoie la cardinalité de chaque esquisse d'une sous-requête pour une table nommée *Sales* (Ventes).

```
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);
```

La requête suivante génère une esquisse HLL pour les clients de chaque pays et extrait la cardinalité. Cela montre des clients uniques de chaque pays.

```
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
 ...
```

## Exemple : renvoyer un type HLLSKETCH à partir d'esquisses combinées dans une sous-requête
<a name="hll-examples-combined-subquery"></a>

L'exemple suivant renvoie un seul type HLLSKETCH qui représente la combinaison d'esquisses individuelles d'une sous-requête. Les esquisses sont combinées à l'aide de la fonction d'agrégation HLL\_COMBINE. 

```
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)
```

## Exemple : renvoyer une HyperLogLog esquisse en combinant plusieurs esquisses
<a name="hll-examples-multiple-sketches"></a>

Pour l'exemple suivant, supposons que la table `page-users` stocke des esquisses pré-agrégées pour chaque page visitée par les utilisateurs sur un site web donné. Chaque ligne de ce tableau contient une HyperLogLog esquisse qui représente tous les identifiants utilisateur indiquant les pages visitées.

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

L'exemple suivant réunit plusieurs esquisses pré-agrégées et génère une seule esquisse. Cette esquisse encapsule la cardinalité collective que chaque esquisse encapsule.

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

La sortie ressemble à ce qui suit.

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

À la création d'une esquisse, vous pouvez utiliser la fonction HLL\_CARDINALITY pour obtenir les valeurs collectives, comme illustré ci-dessous.

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

La sortie ressemble à ce qui suit.

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

## Exemple : générer des HyperLogLog esquisses sur des données S3 à l'aide de tables externes
<a name="hll-examples-cache-sketches"></a>

Les exemples suivants mettent en cache HyperLogLog des esquisses pour éviter d'accéder directement à Amazon S3 pour l'estimation de la cardinalité. 

Vous pouvez préagréger et mettre en cache HyperLogLog des esquisses dans des tables externes définies pour contenir les données Amazon S3. Ce faisant, vous pouvez extraire des estimations de cardinalité sans accéder aux données 

Par exemple, supposons que vous ayez déchargé un ensemble de fichiers texte délimités par des tabulations dans Amazon S3. Vous exécutez la requête suivante pour définir une table externe nommée `sales` dans le schéma externe Amazon Redshift nommé `spectrum`. Dans cet exemple, le compartiment Amazon S3 se trouve dans l'est des États-Unis (Virginie du Nord) Région AWS.

```
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/';
```

Supposons que vous souhaitiez calculer les personnes ayant acheté un article à des dates aléatoires. L'exemple suivant génère des esquisses pour les ID d'acheteur pour chaque jour de l'année et stocke les résultats dans la table 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;
```

La sortie ressemble à ce qui suit.

```
-- 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]}}
-- +---------------- +---------------------------------------------------------------------+
```

La requête suivante montre le nombre estimé de personnes ayant acheté un article le vendredi suivant Thanksgiving en 2008.

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

La sortie ressemble à ce qui suit.

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

Supposons que vous souhaitiez connaître le nombre d'utilisateurs ayant acheté un article à une certaine plage de dates. Par exemple, vous voudriez connaître les données entre le vendredi suivant Thanksgiving et le lundi. Pour ce faire, la requête suivante utilise la fonction d'agrégation `hll_combine`. Cette fonction évite de compter deux fois le nombre de personnes ayant acheté un article sur plusieurs jours de la plage sélectionnée. 

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

La sortie ressemble à ce qui suit.

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

Pour maintenir la table `hll_sales` à jour, exécutez la requête suivante à la fin de chaque journée. Cela génère un HyperLogLog croquis basé sur les identifiants des acheteurs qui ont acheté un article aujourd'hui et l'ajoute au `hll_sales` tableau.

```
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;
```