2,2,2,2,2,2

Transcript

2,2,2,2,2,2
NETEZZA
APPLIANCE
Danilo De Benedictis – [email protected]
NETEZZA SQL – DAY 3
PROSSIMI ARGOMENTI:
GESTIONE TABELLE
 CLUSTERED BASED TABLES
 JOIN TRA TABELLE

GESTIONE TABELLE

PERFORMANCE SU RDBMS TRADIZIONIALI



Utilzzo degli Indici
Partitioning, ma utlizzo di Indici all’interno di ciascuna
Partition
NETEZZA PARTITION



Con Netezza le performance estreme sono raggiunte
tramite parallelizzazione massiva dei table scan sugli
Storage Server
Utilizzo ZoneMap
Per ogni query di estrazione dati…
Select colA, colB
 from tableA where colC > 38 ;



…la query è inviata alle 100+ SPU, ed ogni SPU esegue
un Full Table Scan per costruire il Result Set
Al termine i Result Set vengono uniti e restituiti al Client.
GESTIONE TABELLE

INTRODOTTE CON TWINFIN LE CLUSTERED BASED
TABLE (CBT): COSA SONO





CREATE TABLE ... [ORGANIZE ON {(<column>) | NONE}]
1..4 organizing key: sono campi scelti per il clustering dei
record di tabella.
I dati ‘organizzati’ vengono salvati nella stessa data-slice (o
vicine)
Vengono create le Zone-Map per le ORG K.
Esempio: tabella CBT ordinata per:


TRANSACTION_DATE
poi ORGANIZED per:


TRANSACTION_TYPE
(stesso colore):
GESTIONE TABELLE

CLUSTERED BASED TABLE (CBT): COME
SCEGLIERE:
 Le
Organized keys aiutano a reperire più
velocemente i dati, grazie alle Zone Maps,
quindi...
 ...le Organized keys vanno scelte in base ai filtri
maggiormente utilizzati dalle query.
 Nell’esempio
precedente, il filtro maggiormente
utilizzato è per TRANSACTION_TYPE.
GESTIONE TABELLE

CLUSTERED BASED TABLE (CBT): BENEFICI

Le CBT supportano le Multidimension Lookups:
 da

1 a 4 campi
Le Organize Keys impongo ulteriori Zone Maps i.e.
Migliori performance, se il datatype dei campi è
supportato dalle Zone Maps:
 ZM
default: date, timestamp, byteint, smallint, integer,
bigint
 ZM x M.VIEW ORDER BY o ORG.K: char, varchar, nchar,
nvarchar (solo i primi 8 bytes vengono utilizzati), numeric,
float, double, bool, time, timetz, interval.
CBT riducono la necessita di pre-ordinare i dati
prima del caricamento.
 CBT non replica dati, o alloca ulteriore spazio, come
invece fanno indici, Mview.

GESTIONE TABELLE

CLUSTERED BASED TABLE (CBT) VS
ZONE MAPS:
 Le
ZM riassumono il RANGE dei dati di una
colonna presenti nel disco.
 Le ORG.K. restringono i tempi di estrazione dei
dati ‘avvicinando’ le righe che hanno uguali valori
nei campi selezionati, riducendo i tempi del fulltable-scan.
GESTIONE TABELLE

CLUSTERED BASED TABLE (CBT):
UTILIZZO
 Tipicamente,
se una tabella è interrogata per un
campo FIELD_1 di tipo DATE, caricarla ORDER
BY FIELD_1, per sfruttare a pieno le Zone Maps.
 Se le query filtrano per più campi diversi (multidimension) usare la ORGANIZE.
 Dopo l’aggiunta (ALTER TABLE) di campi
ORGANIZEd, Netezza NON riorganizza: lanciare
la GROOM TABLE:
GESTIONE TABELLE

GROOME TABLE <table_name>
Organizza i record secondo la definizione della
ORGANIZE, avvicinando i record che partecipano
alla ORGANIZE: stesso disk extent oppure vicino.
 Rimuove lo spazio deleted o outdated (nzreclaim).
 No lock sulla tabella.

nzreclaim deprecated dalla 6.0: usare
GROOME.
 GENERATE STATISTICS

Collect info sulle tabelle, in modo da creare
EXECUTION PLAN ottimali
 Best practice: eseguire dopo ogni
LOAD/INS/UPD/DEL

GESTIONE TABELLE
 DELETE
FROM <table> WHERE …
 Cancella
righe da una tabella, lasciano allocato lo
spazio vuoto che non viene recuperato.
 TRUNCATE
TABLE <table>
 Cancella
tutto il contenuto della tabella, liberando lo
spazio su disco che al successivo clean-up
[GROOME] viene reso disponibile.
 Non può essere eseguito in una TRAN
 DROP
TABLE <table>
 Elimina
una tabella, liberando lo spazio su disco che
al successivo clean-up [GROOME] viene reso
disponibile.
GESTIONE TABELLE
 ALTER
(VARCHAR(LEN)), DROP COLUMN
 ALTER
TABLE t3 MODIFY COLUMN (col1
VARCHAR(6));

Varchar Len -< up to 64000
 RENAME
 TABLE
fornitori RENAME COLUMN indirizzo TO citta;
JOIN TRA TABELLE

INNER JOIN
 equivale
a select .. from tab1 , tab2
 Esempio:
 SELECT
COUNT(1)
 FROM TAB1 T1
 INNER JOIN TAB2 T2
 ON T1.FIELD_A = T2.FIELD_A
JOIN TRA TABELLE

LEFT OUTER JOIN

Esempio:
 SELECT
T1.AAA, T1.BBB, T2.CCC
 FROM TAB1 T1
 LEFT OUTER JOIN TAB2 T2
 ON T1.FIELD_A = T2.FIELD_A

TUTTE LE RIGHE DI T1
 T1.AAA,

T1.BBB SEMPRE VALORIZZATI
DOVE MATCH, LE RIGHE DI T2
 NOT
MATCH => T2.CCC = NULL
 MATCH => T2.CCC VALORIZZATO
JOIN TRA TABELLE

RIGHT OUTER JOIN (simmetrica di LOJ)

Esempio:
 SELECT
T1.AAA, T1.BBB, T2.CCC
 FROM TAB1 T1
 RIGHT OUTER JOIN TAB2 T2
 ON T1.FIELD_A = T2.FIELD_A

TUTTE LE RIGHE DI T2
 T2.CCC

SEMPRE VALORIZZATO
DOVE MATCH, LE RIGHE DI T1
 NOT
MATCH => T1.AAA, T1.BBB = NULL
 MATCH => T1.AAA, T1.BBB VALORIZZATI
JOIN TRA TABELLE

SELF-JOIN
 JOIN
DI UNA TABELLA CON SE’ STESSA
 Esempio (città con intervalli temperatura più
‘larghi’ delle altre città):
 SELECT
 W1.city,
W1.temp_lo AS low, W1.temp_hi AS high,
 W2.city, W2.temp_lo AS low, W2.temp_hi AS high
 FROM
weather W1, weather W2
 WHERE
W1.temp_lo < W2.temp_lo
 AND
W1.temp_hi > W2.temp_hi;
JOIN TRA TABELLE

FULL OUTER JOIN
 RESTITUISCE
TUTTE LE RIGHE DELLE
TABELLE IN JOIN
 SELECT
*
 FROM cows_one
 FULL OUTER JOIN cows_two
 ON cows_one.cnumber = cows_two.cnumber;
COMPARAZIONE CON LOGICHE FUZZY

Levenshtein Edit Distance:
 <int4
value> = le_dst(<str_1>, <str_2>)
 Esempio:

le_dst('sow','show') = 1
‘h’ in più
 Esempio:
le_dst('hello','Hollow') = 3
H maiuscola
 ‘o’ al posto di ‘e’
 ‘w’ in più

COMPARAZIONE CON LOGICHE FUZZY
Damerau-Levenshtein Edit Distance:
 <int4 value> = dle_dst (<str_1>, <str_2>)
 Simile al precedente, ma la trasposizione di
caratteri vale 1 non 2:
 Esempio:

 select
le_dst('two','tow') = 2
 select dle_dst(‘two',‘tow') = 1
PROSSIMI ARGOMENTI:
COMBINE TRA TABELLE
 TRANSACTION ISOLATION

COMBINE TRA TABELLE

UNION
 Unione
dei risultati di 2+ query
 Eliminazione dei risultati ridondati
 UNION  OR

UNION ALL
 Mostra
tutte le righe, anche quelle ridondate
 {0,1,2,2,2,2,3,N,N}
UNION ALL {1,2,2,3,5,5,N,N,N}
 = {0,1,1,2,2,2,2,2,2,3,3,5,5,N,N,N,N,N}
COMBINE TRA TABELLE

INTERSECT
 Intersezione
dei risultati di 2+ query
 INTERSECT  AND

INTERSECT ALL
 In
caso di righe ridondate, mostra tutte le righe
con minore cardinalità.
 {0,1,2,2,2,2,3,N,N}
{1,2,2,3,5,5,N,N,N}
 = {1,2,2,3,N,N}
INTERSECT ALL
COMBINE TRA TABELLE

EXCEPT / MINUS
Delta tra i risultati di 2 query (Q1 – Q2)
 Eliminazione dei risultati ridondati

 {0,1,2,2,2,2,3,N,N}
=

EXCEPT {1,2,2,3,5,5,N,N,N}
{0}
EXCEPT / MINUS ALL

In caso di righe ridondate, mostra tutte le righe IN
Più DELLA PRIMA TABELLA.
 {0,1,2,2,2,2,3,N,N}
=
{0,2,2}
EXCEPT ALL{1,2,2,3,5,5,N,N,N}
COMBINE TRA TABELLE

PRECEDENZE:

UNION ED EXCEPT/MINUS HANNO LA STESSA
PRIORITA’:


VENGONO ESEGUITE IN ORDINE LEFT -> RIGHT
INTERCEPT HA PRIORITA’ SU UNION E
EXCEPT/MINUS.
S1 UNION S2 EXCEPT S3 UNION S4 =>
 (((S1 UNION S2) EXCEPT S3) UNION S4)
 S1 UNION S2 INTERSECT S3 MINUS S4 =>
 ((S1 UNION (S2 INTERSECT S3)) MINUS S4)


PER EVITARE CONFUSIONE O FORZARE PRIORITA’
DESIDERATE: USARE LE PARENTESI.

(S1 UNION S2) INTERSECT (S3 MINUS S4)
COMBINE TRA TABELLE

GESTIONE NULL:
 NELLA
COMPARE TRA CAMPI, UN CAMPO
CONTENENTE NULL NON E’ UGUALE AD UN
ALTRO CAMPO CONTENENTE NULL:

(NULL = NULL) => UNKWOWN
COMBINE TRA TABELLE, NULL E’
TRATTATO UGUALMENTE AGLI ALTRI
VALORI:
 NELLA
 (NULL
= NULL) => TRUE
COMBINE TRA TABELLE

PROMOTION TRA DATATYPE NUM/CHAR:
COMBINE TRA TABELLE

PROMOTION TRA DATATYPE NON
NUM/CHAR:
GESTIONE TRANSAZIONI CONCORRENTI

Prevenzione delle tipologie di READ
‘sporche’:
 DIRTY
READS: una T0 può leggere dati scritti da
una T1 concorrente, non ancora committed.
 NONREPEATABLE READS: una T0 ri-legge dati
già letti, e rileva dati modificati, committate da
una T1 che nel frattempo termina.
 PHANTOM READ: una T0 ri-esegue una query
con search condition, e riceve un set di dati
diverso dalla precedente query, committate da
una T1 che nel frattempo termina.
GESTIONE TRANSAZIONI CONCORRENTI

Isolation Level: 4 livelli
read committed
 read uncommitted
 repeatable read
 serializable

Netezza supporta tutti i 4 livelli ma...
 ... Implementa solo il ‘Serializable’ !

PROSSIMI ARGOMENTI:
VISTE
 VISTE MATERIALIZZATE

GESTIONE VISTE

VIEW:


PER SEMPLIFICARE L’ACCESSO AI DATI, PER UTENTI
CON VISIBILITA’ NON DEEP SUI DATI.
PER METTERE IN SICUREZZA I DATI PRESENTI SU
TABELLA:



DEFINITA INTERFACCIA VERSO APPLICATIVI, INVARIANTE
ALLA STRUTTURA DATI



ACCESSO CONSENTITO ALLA VIEW
ACCESSO NON CONSENTITO ALLA TABELLA SOTTOSTANTE
EVENTUALMENTE SI MODIFICA LA QUERY SOTTOSTANTE LA
VIEW, MA NON LA STRUTTURA DELLA STESSA.
INTERFACCIA VERSO APPLICATIVI RIMANE INVARIATA
SINTASSI:



CREATE VIEW viewname AS SELECT query;
CREATE OR REPLACE: USATA PER MANTENERE LE ACL
DELLA VIEW ORIGINARIA ALLA NUOVA VIEW
DROP, ALTER per RENAME, ALTER X CHANGE OWNER
GESTIONE VISTE MATERIALIZZATE

SORTED, PROJECTED, AND MATERIALIZED
VIEWS (SPM)

Proiezione di un subset delle colonne di una tabella,
ordinate su uno specifico subset delle colonne in
proiezione.
Le Viste materializzate vengono memorizzate
su una tabella fisica (su disco) con
l’ordinamento richiesto.
 Servono ad ottimizzare l’accesso a Tabelle
molto grandi.

GESTIONE VISTE MATERIALIZZATE
Il query planner utilizza le SPM View per
(eventualmente) ottimizzare l’accesso a tabelle,
anche se non richiesto esplicitamente, quindi
non è necessario modificare le applicazioni.
 Performance migliorate grazie ad:

una riduzione della quantità di dati letti da disco
 Dati già ordinati ottimizzazione utilizzo ZoneMaps


Ottimali se utilizzate per tabelle piccole (lookup)
GESTIONE VISTE MATERIALIZZATE

BLOCK NUMBER DELLA TABELLA BASE
 Netezza
System aggiunge automaticamente una
colonna alle colonne scelte per le SPM
 La colonna contiene – per ogni riga - il Block
Number della riga originaria (puntatore)
 Il Block number viene utilizzato come indice per
la tabella base, ottimizzando l’accesso alla
stessa.
GESTIONE VISTE MATERIALIZZATE

I dati delle SPM sono allocati sugli stessi
data-slice della corrispondente tabella base,
per ottimizzarne l’accesso.
 CREATE
MATERIALIZED VIEW
customers_mview
 AS SELECT customer_name, customer_id
 FROM customers
 ORDER BY customer_id;
GESTIONE VISTE MATERIALIZZATE

REGOLE PER CREAZIONE SPM:
 Una
sola tabella base nella FROM
 Non è consentito utilizzare la WHERE nella
creazione delle SPM
 Le colonne possono essere solo colonne della
tabella base, non espressioni. Quindi non sono
permessi:
 aggregazioni,
operatori matematici, casting,
DISTINCT, etc..
GESTIONE VISTE MATERIALIZZATE

REGOLE PER CREAZIONE SPM:
 La
ORDER BY può essere applicata solo su
colonne presenti nella SELECT (projection list)
 Se non è specificata la ORDER BY,
l’ordinamento è uguale a quello della tabella
base
 Non si può usare NULLS LAST o DESC
nell’ORDER BY
 La tabella base non può essere EXTERNAL,
temporary oppure di sistema
GESTIONE VISTE MATERIALIZZATE
MANUTENZIONE :
 SPM:


Se si inseriscono righe sulla tabella base, esse:
 vengono
aggiunte anche alle SPM costruite su di essa;
 Vengono ‘appese’ in un’area unsorted, quindi è necessario
fare un refresh della SPM, periodicamente.

Modifiche alla struttura della tabella base, invalidano
la SPM:
 ERROR:
Base table/view 'WEATHER' attr 'CITY' has
changed (precision); rebuild view 'WEATHER_V‘

Le righe cancellate dalla tabella base, vengono
automaticamente cancellate anche dalle SPM
collegate.
GESTIONE VISTE MATERIALIZZATE
MANUTENZIONE :
 REBUILD:

CREATE OR REPLACE MATERIALIZED VIEW
weather_v AS
 SELECT city, temp_lo, temp_hi
 FROM weather
 ORDER BY city;


Non usare la DROP/CREATE, perchè cambia
object ID della SPM=> impatto sugli oggetti che
referenziano la SPM.
GESTIONE VISTE MATERIALIZZATE

MANUTENZIONE :
 DROP
della SPM:
 DROP
VIEW customers_mview; (non DROP
MATERIALIZED...)
 libera spazio allocato per la SPM
 DROP
della tabella base:
 DROP
anche della SPM
 Netezza mantiene la definizione, trasformandola in
una VIEW normale
 Successivi accessi alla SPM danno errore
GESTIONE VISTE MATERIALIZZATE

MANUTENZIONE :


ALTER VIEW customers_mview MATERIALIZE [option]:
Option = SUSPEND:
Sospende l’utilizzo della SPM e degli oggetti referenzianti.
 Truncate della SPM
 Redirect alla tabella base
 Usare SUSPEND per attività di manutenzione sui DB, come la
RECLAIM, la RESTORE, o le NZLOAD.


Option = REFRESH:
Ri-materializza la SPM, ricostruendo la projected structure.
 Si usa dopo la SUSPEND
 Si usa per ri-ordinare le SPM dopo:




La SUSPEND
Pe ottimizzare gli accessi
Per ordinare le righe unsorted (inserite sulla tabella base dopo la
CREATE SPM)
GESTIONE VISTE MATERIALIZZATE

MANUTENZIONE :
 REFRESH
threshold:
 Con
GRANT da amministratore, è possibile impostare
un limite ai dati non ordinati, dopo il quale il sistema
forza la REFRESH della SPM.
 SET SYSTEM DEFAULT MATERIALIZE
THRESHOLD TO <number>;
 <number> rappresenta una percentuale:
Da 1 a 99
 Default = 20

GESTIONE VISTE MATERIALIZZATE

QUERY:
 Non
possiamo fare INSERT sulle SPM, ma solo
SELECT
 In caso di SELECT sulla tabella base,
l’ottimizzatore verifica l’eventuale esistenza di
SPM collegate:
esistono, l’ottimizzatore decide se usarle in base al
predicted cost and performace.
 Se
 Le
SELECT sulle SPM possono richiedere più
memoria delle SELECT sulle tabelle base, a
causa delle righe un-sorted.
GESTIONE VISTE MATERIALIZZATE

MIRRORING:
 Le
SPM vengono trattate su disco in maniera
analoga alle tabelle base. Quindi:
data slice contenente è in mirror con un’altra
partizione, presente su un altro disco
 In caso di fail, il failover e la regeneration avvengono
anche per i dati delle SPM.
 Il
GESTIONE VISTE MATERIALIZZATE

RECLAIM:
 Non
è possibile fare RECLAIM sulle SPM
 In caso di RECLAIM sulle tabelle base:
 1)
le SPM afferenti vengono temporaneamente
SUSPENDED
 2) La RECLAIM gira sulle tabelle base
 3) Al termine, le SPM vengono riattivate, ma
rimangono SUSPENDED (necessario quindi un
REFRESH manuale)
 Le
operazioni sopra descritte, vengono fatte in
maniera transazionale.
GESTIONE VISTE MATERIALIZZATE

NZLOAD ed SMP:
 Non
è possibile fare NZLOAD sulle SPM.
 In caso di NZLOAD sulle tabelle base:
 Le
righe delle SPM afferenti vengono
automaticamente aggiornate
 Process slow down
 Best
practice:
 SUSPEND
le SPM prima di NZLOAD
 REFRESH le SPM dopo NZLOAD
GESTIONE VISTE MATERIALIZZATE

NZ_BACKUP:
 In
caso di backup di un DB:
 vengono
salvate le definizioni delle SPM (come delle
viste normali)
 Non vengono salvati i dati delle SPM
 In
caso di restore di un DB (o table-level restore)
 Le
SPM vengono rigenerate al termine del restore
GESTIONE VISTE MATERIALIZZATE

ZONE MAPS:

Netezza system crea Zone Maps per un campo della SPM se:


Il campo è di tipo INTEGER, DATE, TIMESTAMP
Per un campo della ORDER BY, di tipo:














integers — 1-byte, 2-byte, 4-byte, and 8-byte
date
timestamp
char — all sizes, but only the first 8 bytes are used in the zone map
varchar — all sizes, but only the first 8 bytes are used in the zone map
nchar — all sizes, but only the first 8 bytes are used in the zone map
nvarchar — all sizes, but only the first 8 bytes are used in the zone map
numeric — all sizes except 128-bit numerics
float
double
bool
time
time w/timezone
interval
GESTIONE VISTE MATERIALIZZATE

BEST PRACTICES:
Tabelle con molte colonne, ma poche sono le più
utilizzate.
 Colonne maggiormente restrittive: se una colonna:

è
spesso utilizzata nei filtri…
 …i filtri escludono la maggior parte dei dati (es. Condizione
per intervallo temporale)…
 …allora usare la colonna nell’ORDER BY.
Creare SPM con minor numero di colonne possibile,
incluse quelle più restrittive, in modo che Netezza le
possa usare come index verso la tabella base.
 Ridurre al massimo le SPM insistenti sulla stessa
tabella base

 Causerebbe
degrado prestazionale nelle query, a causa
dei tempi spesi dall’optimizer.
PROSSIMI ARGOMENTI:
SUBQUERY
 FUNZIONI DI AGGREGAZIONE

SUBQUERY

REGULAR SUBQUERY: query annidata in altre
query, racchiusa da parentesi:

Esempio:
SELECT StoreId FROM Stores
 WHERE TotalSale > 0.01*
 (SELECT SUM(TotalSales) FROM Stores);


TIPOLOGIE DI SUBQUERY:




ROW SUBQ: restituisce 0/1 riga, 1/n colonne
TABLE SUBQ: restituisce 0/n righe, 1/n colonne
SINGLETON SUBQ: restituisce esattamente 0/1 riga,
con 1 colonna.
Le SUBQ vengono calcolate per prime, e vengono
temporaneamente memorizzate per l’utilizzo finale.
SUBQUERY
CORRELATED SUBQUERY: query annidata in
altre query, ma che referenzia oggetti della
query esterna.
 Viene calcolata ripetutamente, diversamente
dalle SUBQ.
 Esempio:

SELECT
 FROM
 WHERE

StoreID
Stores S
S.TotalSales*0.1 <
 (SELECT
SUM(i.Price) FROM Item i
 WHERE S.StoreID = I.StoreId and I.ItemType = "Dairy");

In questo esempio, viene calcolata la somma
dei Price nell’ambito dello stesso StoreID.
SUBQUERY
CORRELATED SUBQUERY: spesso può
essere convertita in normale SUBQ in join:
 Esempio precedente, equivale a:

 SELECT
S.StoreId FROM
 Stores S ,
 (SELECT
I.StoreId, Sum(Price) DairySales
 FROM Items I
 WHERE I.ItemType = "Dairy" GROUP BY I.StoreId) D
 WHERE
S.StoreId = D.StoreId
 AND S.TotalSales *0.1 < D.DairySales;
SUBQUERY

CORRELATED SUBQUERY: RESTRIZIONI:
Netezza converte le CORRELATED SUBQUERY in
SUBQ with JOIN.
 CORR SUBQ soltanto nella WHERE
 CORR SUBQ in INNER JOIN soltanto con operatore
=
 Non si possono usare:

 In
operazioni d’insieme (UNION, INTERSECT, EXCEPT,
MINUS)
 In aggregazioni (GROUP BY, HAVING)
 In OR, CASE/WHEN, nelle liste della IN, nelle liste della
SELECT.

PERFORMANCE EXPENSIVE: provare sempre a
convertirle con la JOIN.
FUNZIONI DI AGGREGAZIONE
AGGREGAZIONE DI GRUPPO:
 restituiscono il risultato calcolato su 0-n
righe.

 SELECT
max(temp_lo) FROM weather;
Es. MAX, MIN
 Usate anche con GROUP BY
 Usate anche con GROUP BY .. HAVING ..

FUNZIONI DI AGGREGAZIONE
AGGREGAZIONE SU FINESTRA (i.e.
WINDOWS ANALYTIC FUNCTIONS)
 restituiscono il risultato calcolato su UN
GRUPPO DI 0-n righe DEFINITE DA UNA
FINESTRA.
 ESEMPIO: data la tabella...

FUNZIONI DI AGGREGAZIONE



AGGREGAZIONE SU FINESTRA:
Esempio 1:
SELECT




year,
month,
salesk,
avg(salesk)

OVER (PARTITION BY year ORDER BY month ROWS BETWEEN 1
PRECEDING AND 1 FOLLOWING)

FROM monthlysales;

Ogni riga, utilizza la precedente (se esiste) e la successiva
(se esiste) in una finestra con ordinamento desiderato, per
fare un calcolo aggregato.
FUNZIONI DI AGGREGAZIONE

AGGREGAZIONE SU FINESTRA: risultato 1:

AVG(20,22,25) = (20+22+25)/3 = 67/3 = 22.33333
AVG(22,25,30) = (22+25+30)/3 = 77/3 =25.66666


Dov’è l’errore ???
FUNZIONI DI AGGREGAZIONE
AGGREGAZIONE SU FINESTRA:
 Esempio 2:
 SELECT *,

 sum(salesk)
 OVER
(PARTITION BY year ORDER BY
 month ROWS UNBOUNDED PRECEDING)
FROM monthlysales;
 Ogni riga, utilizza tutte le precedenti della
PARTITION.

FUNZIONI DI AGGREGAZIONE

AGGREGAZIONE SU FINESTRA: risultato
2:

SUM(30,35,50) = 115
ANALYTIC FUNCTIONS: UNA SESSIONE
SUCCESSIVA!!!

<EOF>
REFUSI
NETEZZA SQL INTRODUCTION
1.
ACCESSO A NETEZZA SQL CON NZSQL
1.
2.
3.
4.
5.
2.
nzsql COMMANDS
1.
2.
3.
4.
5.
6.
3.
Logging On
Risposta ai Command
Management delle Sessioni
Supporto SSL per i Client
Variabili SQL di Sessione
Input
Output
Options
Miscellaneous
Slash
Query Buffer
nzsql EXIT CODE