Exemples - Amazon Redshift

Amazon Redshift ne prendra plus en charge la création de nouveaux Python UDFs à compter du 1er novembre 2025. Si vous souhaitez utiliser Python UDFs, créez la version UDFs antérieure à cette date. Le Python existant UDFs continuera à fonctionner normalement. Pour plus d’informations, consultez le billet de blog .

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

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

Exemple : renvoyer la cardinalité dans une sous-requête

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

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 esquisse HyperLogLog à partir de la combinaison de plusieurs esquisses

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 esquisse HyperLogLog qui représente les ID utilisateur et 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 esquisses HyperLogLog sur des données S3 à l'aide de tables externes

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

Vous pouvez pré-agréger et mettre en cache les esquisses HyperLogLog 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 S3 se trouve dans la Région AWS USA Est (Virginie du Nord).

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 une esquisse HyperLogLog basée sur les identifiants des personnes ayant acheté un article aujourd'hui et l'ajoute à la table 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;