

 Amazon Redshift non supporterà più la creazione di nuovi Python UDFs a partire dalla Patch 198. Python esistente UDFs continuerà a funzionare fino al 30 giugno 2026. Per ulteriori informazioni, consulta il [post del blog](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

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
<a name="r_HLL-examples"></a>

Questa sezione contiene esempi di utilizzo HyperLogLog con Amazon Redshift.

**Topics**
+ [Esempio: restituzione della cardinalità in una query secondaria](#hll-examples-subquery)
+ [Esempio: restituzione di un tipo HLLSKETCH da schizzi combinati in una query secondaria](#hll-examples-combined-subquery)
+ [Esempio: restituisci uno HyperLogLog schizzo combinando più schizzi](#hll-examples-multiple-sketches)
+ [Esempio: generazione di HyperLogLog schizzi su dati S3 utilizzando tabelle esterne](#hll-examples-cache-sketches)

## Esempio: restituzione della cardinalità in una query secondaria
<a name="hll-examples-subquery"></a>

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 query seguente genera uno schizzo HLL 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: restituzione di un tipo HLLSKETCH da schizzi combinati in una query secondaria
<a name="hll-examples-combined-subquery"></a>

Nell'esempio seguente viene restituito un singolo tipo HLLSKETCH che rappresenta la combinazione di singoli schizzi da una query secondaria. Gli schizzi vengono combinati utilizzando la funzione di aggregazione 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)
```

## Esempio: restituisci uno HyperLogLog schizzo combinando più schizzi
<a name="hll-examples-multiple-sketches"></a>

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 funzione HLL\$1CARDINALITY 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
<a name="hll-examples-cache-sketches"></a>

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 query seguente estrae il numero stimato di acquirenti distinti che hanno acquistato un articolo durante il venerdì successivo al Ringraziamento nel 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;
```