Exemples - Amazon Redshift

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 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 un HLL croquis 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 HLLSKETCH type à partir d'esquisses combinées dans une sous-requête

L'exemple suivant renvoie un HLLSKETCH type unique qui représente la combinaison d'esquisses individuelles issues d'une sous-requête. Les esquisses sont combinées à l'aide de la fonction HLL _ COMBINE aggregate.

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

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 représentant tous les utilisateurs IDs qui montrent 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.... | -- +-----------------------------------------+

Lorsqu'une nouvelle esquisse est créée, vous pouvez utiliser la CARDINALITY fonction HLL _ pour obtenir les valeurs distinctes collectives, comme indiqué 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

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. Pour ce faire, l'exemple suivant génère des croquis pour l'acheteur IDs pour chaque jour de l'année et enregistre le résultat dans le tableau 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 indique le nombre estimé d'acheteurs distincts 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 conserver la hll_sales table up-to-date, exécutez la requête suivante à la fin de chaque journée. Cela génère un HyperLogLog croquis basé sur le nombre IDs d'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;