Metodi API UDA

Gli aggregati definiti dall'utente vengono utilizzati insieme a una clausola GROUP BY o alla clausola OVER. L'implementazione di una UDA richiede una comprensione più approfondita del funzionamento interno del database Netezza durante l'esecuzione di aggregazioni.

Per un'UDA standard utilizzata con un'istruzione GROUP BY, il database Netezza elabora i dati seguendo in sequenza i passaggi descritti qui:
  1. Per ogni riga di dati in fase di elaborazione, verificare se è già stata trovata una riga per il gruppo in cui si trova la riga. In caso affermativo, passare la riga al metodo 'accumulate() insieme al valore corrente delle variabili di stato per quel gruppo. Se la riga appartiene a un nuovo gruppo, si chiama prima il metodo 'initState() e poi il metodo accumulate con i valori di stato appena inizializzati e la riga di dati. Il metodo accumulate aggiorna le variabili dello stato corrente in base alla riga di dati e restituisce lo stato aggiornato. I dati non vengono trasferiti sulla rete fino al passaggio 2.
  2. Una volta elaborate tutte le righe di dati su ciascuna fetta di dati, ridistribuire i valori finali delle variabili di stato per ciascun gruppo di dati in modo che tutte le variabili di stato per ciascun gruppo di dati siano spostate nelle stesse fette di dati (ad esempio, se il GROUP BY era su customer_id, tutti gli stati di ciascuna fetta di dati per customer_id=1 sarebbero spostati nella stessa fetta di dati).
  3. Unire tutte le variabili di stato chiamando il metodo " merge(). A ogni chiamata a merge, vengono passate due serie di variabili di stato. Il metodo 'merge() fonde insieme i due stati e restituisce il risultato. Il metodo 'merge() viene richiamato finché non c'è un solo stato per ogni gruppo in base all'istruzione group by.
  4. Per ciascuno degli stati rimanenti, richiamare il metodo 'finalResult(), passando i valori finali per ogni stato. Il metodo 'finalResult() calcola quindi un risultato in base alle variabili di stato e restituisce il risultato al database Netezza per ciascun gruppo.