Esempi - Amazon Redshift

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Esempi

Questa sezione contiene esempi per l'utilizzo HyperLogLog con Amazon Redshift.

Esempio: restituzione della cardinalità in una query secondaria

L'esempio seguente restituisce la cardinalità per ogni schizzo in una query secondaria per una tabella denominata Sales.

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 seguente query genera uno HLL schizzo per i clienti di ogni paese ed estrae la cardinalità. Questo mostra clienti unici di ogni paese.

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

Esempio: restituisce un HLLSKETCH tipo da schizzi combinati in una sottoquery

L'esempio seguente restituisce un singolo HLLSKETCH tipo che rappresenta la combinazione di singoli schizzi da una sottoquery. Gli schizzi vengono combinati utilizzando la funzione 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)

Esempio: restituisci uno HyperLogLog schizzo dalla combinazione di più schizzi

Per l'esempio riportato di seguito, si supponga che la tabella page-users memorizzi gli schizzi preaggregati per ogni pagina visitata dagli utenti su un determinato sito Web. Ogni riga di questa tabella contiene uno HyperLogLog schizzo che rappresenta tutti gli utenti IDs che mostrano le pagine visitate.

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

Nell'esempio seguente vengono uniti gli schizzi preaggregati e viene generato un singolo schizzo. Questo schizzo incapsula la cardinalità collettiva incapsulata da ogni schizzo.

SELECT hll_combine(sketch) as sketch FROM page_users

L'output è simile al seguente.

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

Quando viene creato un nuovo schizzo, è possibile utilizzare la CARDINALITY funzione HLL _ per ottenere i valori distinti collettivi, come illustrato di seguito.

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

L'output è simile al seguente.

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

Esempio: generazione di HyperLogLog schizzi su dati S3 utilizzando tabelle esterne

Gli esempi seguenti memorizzano nella cache gli HyperLogLog sketch per evitare di accedere direttamente ad Amazon S3 per la stima della cardinalità.

Puoi preaggregare e memorizzare nella cache HyperLogLog gli schizzi in tabelle esterne definite per contenere dati Amazon S3. In questo modo, è possibile estrarre stime di cardinalità senza accedere ai dati di base sottostanti.

Ad esempio, si supponga di aver scaricato un set di file di testo delimitati da tabulazioni in Amazon S3. La query riportata di seguito viene eseguita per definire una tabella esterna denominata sales nello schema esterno Amazon Redshift denominato spectrum. Il bucket Amazon S3 per questo esempio si trova negli Stati Uniti orientali (Virginia settentrionale). Regione 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/';

Si supponga di voler calcolare gli acquirenti distinti che hanno acquistato un articolo in determinate date. A tale scopo, l'esempio seguente genera schizzi per l'acquirente IDs per ogni giorno dell'anno e memorizza il risultato nella tabella Amazon hll_sales Redshift.

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;

L'output è simile al seguente.

-- 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 seguente query mostra il numero stimato di acquirenti diversi che hanno acquistato un articolo durante il venerdì successivo al Ringraziamento del 2008.

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

L'output è simile al seguente.

distinct_buyers --------------- 386

Si supponga che si desidera il numero di utenti distinti che hanno acquistato un articolo in un determinato intervallo di date. Un esempio potrebbe essere dal venerdì dopo il Ringraziamento al lunedì successivo. Per ottenere questo risultato, la query seguente utilizza la funzione di aggregazione hll_combine. Questa funzione consente di evitare il doppio conteggio degli acquirenti che hanno acquistato un articolo in più di un giorno dell'intervallo selezionato.

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

L'output è simile al seguente.

distinct_buyers --------------- 1166

Per conservare la hll_sales tabella up-to-date, esegui la seguente query alla fine di ogni giornata. In questo modo viene generato uno HyperLogLog schizzo basato sugli acquirenti che hanno acquistato un articolo oggi e lo si aggiunge alla hll_sales tabella. IDs

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;