Esercizio - Usare l'esecuzione approssimativa

Completato

Esecuzione approssimativa con funzioni HyperLogLog

Quando Tailwind Traders inizia a lavorare con set di dati di grandi dimensioni, inizia a riscontrare problemi di lentezza nell'esecuzione di query che in genere vengono completate rapidamente. Ad esempio, ottenere il conteggio dei valori distinti di tutti i clienti nelle prime fasi dell'esplorazione dei dati rallenta il processo. In che modo è possibile velocizzare queste query?

Si decide di usare l'esecuzione approssimativa usando l'accuratezza HyperLogLog per ridurre la latenza delle query, in cambio di una piccola riduzione dell'accuratezza. Si tratta di un compromesso accettabile per la situazione di Tailwind Traders, in cui è sufficiente avere un'idea generale dei dati.

Per comprendere i requisiti dell'organizzazione, per prima cosa eseguire un conteggio dei valori distinti sulla tabella di grandi dimensioni Sale_Heap per trovare il numero di clienti distinti.

Nella finestra di query sostituire lo script con il codice seguente:

```sql
SELECT COUNT(DISTINCT CustomerId) from wwi_perf.Sale_Heap
```
  1. Scegliere Esegui dal menu della barra degli strumenti per eseguire il comando SQL.

    Run item in the toolbar

L'esecuzione della query richiede fino a 20 secondi. Si tratta di un comportamento previsto, perché il conteggio di valori distinti è uno dei tipi di query più difficile da ottimizzare.

Il risultato dovrebbe essere 1.000.000.

  1. Nella finestra di query sostituire lo script con il codice seguente per usare l'approccio HyperLogLog:

    SELECT APPROX_COUNT_DISTINCT(CustomerId) from wwi_perf.Sale_Heap
    
  2. Scegliere Esegui dal menu della barra degli strumenti per eseguire il comando SQL.

    Run item in the toolbar

L'esecuzione della query richiede circa la metà del tempo. Il risultato non è esattamente lo stesso, ad esempio potrebbe essere 1.001.619.

APPROX_COUNT_DISTINCT restituisce un risultato con un'accuratezza media del 2% rispetto alla cardinalità esatta.

Ciò significa che, se COUNT (DISTINCT) restituisce 1.000.000, HyperLogLog restituirà un valore compreso nell'intervallo da 999.736 a 1.016.234.