NETEZZA APPLIANCE. Danilo De Benedictis danilode@gmail.com NETEZZA DEVELOPMENT



Documenti analoghi
Data warehouse in Oracle

ESEMPI DI QUERY SQL. Esempi di Query SQL Michele Batocchi AS 2012/2013 Pagina 1 di 7

Il linguaggio SQL. è di fatto lo standard tra i linguaggi per la gestione di data base relazionali.

Esercitazione query in SQL L esercitazione viene effettuata sul database viaggi e vacanze che prevede il seguente modello E/R:

Join in SQL (primo modo) Informatica. Tabella Dipartimento. Interrogazione 4a. Interrogazione 4b. Interrogazione 4a

Istruzioni DML di SQL

SQL Server. SQL server e un RDBMS di tipo client/server che utilizza Transact-SQL per gestire la comunicazione fra un client e SQL Server

Data Management Software. Il linguaggio SQL. Raggruppamenti. Paolo Avallone Sr Consulting IT Specialist DB2, Data Management Marzo 2004

Oracle PL/SQL. Motivazioni

SQL prima parte D O C E N T E P R O F. A L B E R T O B E L U S S I. Anno accademico 2011/12

SQL - Funzioni di gruppo

Stored Procedures. Massimo Mecella Dipartimento di Ingegneria informatica automatica e gestionale Antonio Ruberti Sapienza Università di Roma

Informatica. Sintassi. Interrogazioni in SQL. Significato dell interrogazione. Tabella Impiegato. Basi di dati parte 4 SQL

Informazioni generali sul corso

MAX, SUM, AVG, COUNT)

Basi di dati (6) Docente: Andrea Bulgarelli. Università di Modena e Reggio Emilia. andrea.bulgarelli@gmail.com Argomento: T-SQL (1.

Utilizzando Microsoft Access. Si crea la tabella Anagrafica degli alunni,le Materie e i voti si mettono alcuni campi

SQL. Structured Query Language

Data Base. Master "Bio Info" Reti e Basi di Dati Lezione 6

SQL (STRUCTURED QUERY LANGUAGE)

Corso di Laboratorio di Basi di Dati

Basi di dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL

Lezione 8. Metadati, Viste e Trigger

Interrogazioni complesse. SQL avanzato 1

Suggerimenti per lo Sviluppo delle Applicazioni con PL/SQL. Simona Rotolo

Esercitazione di riepilogo sulle Query MySQL Giugno 2011 Classe VB Informatica

Introduzione al Python

Abilità Informatiche A.A. 2010/2011 Lezione 9: Query Maschere Report. Facoltà di Lingue e Letterature Straniere

INFORMATICA. Applicazioni WEB a tre livelli con approfondimento della loro manutenzione e memorizzazione dati e del DATABASE.

DBMS (Data Base Management System)

Istruzioni SQL 1. Query di selezione 2 Istruzione SELECT 2 Istruzione SELECT DISTINCT 2 ORDER BY 3 WHERE 3 La condizione LIKE 4 BETWEEN AND 5

Basi di Dati Corso di Laura in Informatica Umanistica

cliente... nuovo cliente trasloco

07. Ottimizzare le istruzioni SQL

********************* MODIFICA STRUTTURA DI UNA TABELLA (inserimento di un nuovo campo) ALTER TABLE Personale ADD Nascita date;

Vincoli di Integrità Approccio dichiarativo alla loro implementazione

Matlab: Strutture di Controllo. Informatica B

Il linguaggio SQL: trigger. Versione elettronica: 04.7.SQL.trigger.pdf

ISTITUTO DI ISTRUZIONE SUPERIORE Cigna Baruffi Garelli

OSSIF WEB. Manuale query builder

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Dispensa di database Access

Operazioni sui database

Data warehouse Analisi dei dati

Arduino: Programmazione

Il linguaggio SQL: query innestate

SQL: definizione schema

SQL non è solo un linguaggio di interrogazione (Query Language), ma. Un linguaggio per la definizione di basi di dati (Data-definition language (DDL))

Basi di dati (7) Docente: Andrea Bulgarelli. Università di Modena e Reggio Emilia. andrea.bulgarelli@gmail.com Argomento: stored procedure (1.

Introduzione al MATLAB c Parte 2

Volumi di riferimento

ROUTINE E PROGRAMMAZIONE

Nozione ed uso. Operazioni eseguite automaticamente ogni volta che avviene un certo evento Uso:

OR true null false true true true true null true null null false true null false NOT

Dati relazionali e XML

Utilizzando Microsoft Access. Si crea la tabella Anagrafica degli alunni,le Materie e i voti si mettono alcuni campi

PostgreSQL 8.4. Associazione Italiana PostgreSQL Users Group ConfSL 2009 Speaker's Corner Bologna, 13 Giugno 2009

Riccardo Dutto, Paolo Garza Politecnico di Torino. Riccardo Dutto, Paolo Garza Politecnico di Torino

PL/SQL PL/SQL. Ordine degli elementi dei triggers di Oracle. Differenze nei triggers. Versione dei trigger e PSM di Oracle

Vincoli di Integrità

SQL/OLAP. Estensioni OLAP in SQL

SQL (STRUCTURED QUERY LANGUAGE)

Definizione di domini

SQL PER LA DEFINIZIONE DI BASI DI DATI

Fogli Elettronici: MS Excel utilizzo avanzato

Uso delle variabili di alias. SQL slide aggiuntive. Interrogazione 25. Interrogazione 26

Laboratorio di Basi di Dati e Web

Basi di Dati. S Q L Lezione 5

Funzioni in C. Violetta Lonati

Il linguaggio SQL: viste e tabelle derivate

SQL e ACCESS. Modello relazionale PROBLEMA ENTITA STUDENTE

Il linguaggio SQL: viste e tabelle derivate. Versione elettronica: SQLd-viste.pdf

Come trattare il risultato di un comando SQL (relazioni) che

Documentazione SQL. Argomento Sintassi Note Definizione schema create schema [NomeSchema] [[authorization] Autorizzazione] {DefElementoSchema}

MATLAB. Caratteristiche. Dati. Esempio di programma MATLAB. a = [1 2 3; 4 5 6; 7 8 9]; b = [1 2 3] ; c = a*b; c

Capitolo 7. Esercizio 7.1

Database Lezione 1. Sommario. - Introduzione - Tabelle e chiave primaria - Query - Calcoli ed alias - Ordinamento

MySQL Database Management System

Verifica parte IIA. Test (o analisi dinamica) Mancanza di continuità. Esempio

Data management a.a Il linguaggio SQL

SQL IL LINGUAGGIO DI INTERROGAZIONE

Stored Procedures. Antonella Poggi, Claudio Corona. Dipartimento di informatica e Sistemistica SAPIENZA Università di Roma

Corso sul linguaggio SQL

SQL SQL. Definizione dei dati. Domini. Esistono 6 domini elementari:

Linee guida per la programmazione di transazioni in PL/SQL

DDL, VINCOLI D INTEGRITÁ, AGGIORNAMENTI E VISTE. SQL è più di un semplice linguaggio di interrogazione

Oggetti Lezione 3. aspetti generali e definizione di classi I

DAL DIAGRAMMA AL CODICE

Triggers. Basi dati attive. Trigger. Indipendenza della conoscenza

Nella relazione CINEMA, Nome è chiave secondaria. Nella relazione FILM, CodRegista, e CodProtagonista sono chiavi esterne sulla tabella PERSONE.

Basi di Dati Prof. L. Tanca e F. A. Schreiber APPELLO DEL 12 FEBBRAIO 2015 PARTE 1

Corso Sistemi Informativi Avanzati. Programma 30 set Installazione Macchina Virtuale. Introduzione alla BI nelle Aziende.

GERARCHIE RICORSIVE - SQL SERVER 2008

Transcript:

NETEZZA APPLIANCE Danilo De Benedictis danilode@gmail.com NETEZZA DEVELOPMENT

NETEZZA DEVELOPMENT STORED PROCEDURES ANALYTIC FUNCTIONS

NETEZZA DEVELOPMENT STORED PROCEDURES

STORED PROCEDURES Definizione: Le Stored Procedure sono la combinazione di SQL + linguaggio procedurale: Branch Loop Subprogram NZPLSQL: linguaggio (interpretato) di programmazione per le stored procedures di Netezza Basato sul precedente Postgres PL/pgSQL

STORED PROCEDURES NZPLSQL: CARATTERISTICHE Condizioni (IF/ELSE) Loop (WHILE/FOR) SQL e dynamic SQL Variabili Return: Scalar Result Set Argomenti in input Esecuzione nel contesto chiamante Session Transaction

STORED PROCEDURES NZPLSQL: SINTASSI CREATE OR REPLACE PROCEDURE sp_nome(varchar(6)) RETURNS INT4 LANGUAGE NZPLSQL AS BEGIN_PROC DECLARE str varchar; BEGIN str := $1; END; RETURN select length(str); END_PROC;

STORED PROCEDURE : PARAMETRI INPUT I Parametri input alla SP vengono righiamati come $1, $2, etc., da 0 a 64 parametric. VARARGS: specifica una LISTA DI PARAMETRI (max 64) Netezza salva nell array PROC_ARGUMENT_TYPES i datatypes (in format OID) dei parametri input.

STORED PROCEDURES CREATE OR REPLACE PROCEDURE sp_varargs01(varargs) RETURNS INT4 LANGUAGE NZPLSQL AS BEGIN_PROC DECLARE num_args int4; typ oid; idx int4; BEGIN num_args := PROC_ARGUMENT_TYPES.count; RAISE NOTICE 'Number of arguments is %', num_args; for i IN 0.. PROC_ARGUMENT_TYPES.count - 1 LOOP typ := PROC_ARGUMENT_TYPES(i); idx := i+1; RAISE NOTICE 'argument $% is type % value ''%''', idx, typ, $idx; END LOOP; END; END_PROC;

STORED PROCEDURES Demo PROC_ARGUMENT_TYPES Per convertire il datatype nel nome del datatype: SELECT DISTINCT FORMAT_TYPE, ATTTYPID FROM _V_RELATION_COLUMN;

STORED PROCEDURES MYDB(USER)=> CALL updateacct(); MYDB(USER)=> EXEC updateacct(); MYDB(USER)=> EXECUTE updateacct(); MYDB(USER)=> EXECUTE PROCEDURE updateacct(); MYDB(USER)=> SELECT updateacct(); MYDB(ADMIN)=> EXEC OTHERDB..UPDATEACCT();

STORED PROCEDURES NZPLSQL supporta gli array. Per dichiarare un array: name VARRAY(size) OF type; Tutti gli elementi dell array inizialmente contengono il valore SQL NULL. Per assegnare un valore: name(idx) := value; Supportati: name.extend(size) name.count name.trim(size)

LOOP Query Processing in Loops FOR rec in SELECT * from mytable LOOP IF rec.type = d THEN EXECUTE IMMEDIATE DELETE FROM mytable2 WHERE recid = rec.id; END IF; END LOOP;

LOOP Query Processing in Loops La outer SELECT viene eseguita, ed il risultato messo in CACHE. La inner DELETE viene eseguita solo successivamente, quindi non impatta il risultato della DELETE. La precedente query non è ottimale. Rewrite: DELETE from mytable2 where recid in (select recid from my table where type = 'd') ;

NETEZZA DEVELOPMENT ANALYTIC FUNCTIONS

ANALYTIC FUNCTION Definizione: Le Funzioni Analitiche calcolano un valore aggregato (per ogni riga) basato su un gruppo di righe, definite da una finestra. La dimensione della finestra è data da un numero o da un intervallo logico. Funzioni Analitiche VS Funzioni Aggregate Le Funzioni Analitiche restituiscono 1 valore per ogni riga dell insieme di aggregazione. Le Funzioni Aggregate (...count(*)... Group by...) restituiscono 1 valore per ogni insieme di aggregazione.

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 FUNCTION Benefici Ottimizzazione query processing Spesso le funzioni analitiche si traducono in algoritmi con complessità lineare, rispetto a soluzioni equivalenti (nel risultato) con complessità di ordine superiore. Codice maggiormente leggibile In una singola riga si trova la codifica di interi statement composti da query e subquery Codice più facile da manutenere La leggibilità del codice si traduce in una facilità di manutenzione

ANALYTIC FUNCTION Classificazione in Famiglie. Window Aggregate: utilizzo dei valori delle singole righe della partizione (=window=cluster) unitamente al valore aggregato: avg, sum, min, max, count, variance, stddev,... Lag/Lead: singole righe della partizione (=window=cluster) aventi un offset tra loro: lag, led,... First/Last: primo ed ultimo valore della partizione (=window=cluster) di righe: first_value, last_value Ranking: classificazione delle righe, all interno della partizione (=window=cluster): ntile, dense_rank, percent_rank, cume_dist, rank

ANALYTIC FUNCTION Classificazione in Famiglie. Row Count: progressivo di riga all interno della partizione. Hypotetical Set: funzioni che indicano il rank percentile che una riga avrebbe se fosse inserita in una partizione: dense_rank, percent_rank, cume_dist, rank Inverse Distribution: restituiscono il valore di riga, all interno di una partizione, che ha un determinato percentile: percentile_cont and, percentile_disc

ANALYTIC FUNCTION PROCESSING ORDER: 1. Query JOINS, WHERE, GROUP BY, HAVING 2. Analytic Function: calcolo delle funzioni analitiche all interno della finestra definita 3. ORDER BY

ANALYTIC FUNCTION WINDOW PARTITIONING: tutte le righe che hanno uguali caratteristiche compongono la finestra di partizione Nessuna specifica = intero row set restituito dalla query WINDOW ORDERING: Ordinamento all interno della partizione. WINDOW FRAMING: Intervallo, all interno della Window Partition, per cui eseguire un calcolo

ANALYTIC FUNCTION ALL Specifica di agire su tutti i valori (default, quindi non specificare) ASC DESC Sequenza di ordinamento BETWEEN AND Intervallo della finestra, qualora definiti esplicitamente CURRENT ROW Si riferisce alla riga corrente DISTINCT Aggregazione per valori unici. Non supportata da tutte le Function. EXCLUDE CURRENT ROW Esclude la riga corrente. EXCLUDE GROUP Esclude un intero gruppo di righe che soddisfano una condizione. EXCLUDE NO OTHERS Specifica di non escludere alcuna riga (default). EXCLUDE TIES Specifica di escludere tutte le altre righe collegate alla riga corrente, tranne la riga corrente.

ANALYTIC FUNCTION NULLS {FIRST LAST} Indica come trattate il NULL negli ordinamenti (default FIRST). ORDER BY OVER Indica come ordinare le righe nell ambito della partizione (anche su campi multipli). Indica che la funzione opera su un risultato di righe calcolate dopo FROM, WHERE, HAVING clause. E usato per definire la finestra di righe a cui applicare la Function PARTITION BY Definisce la partizione (default = all rows) ROWS RANGE Definisce la porzione della partizione su cui calcolare la funzione (ROWS = righe fisiche / RANGE = intervallo logico ) UNBOUNDED FOLLOWING Specifica che la finestra si estende anche dopo l ultima riga della partizione. UNBOUNDED PRECEDING Specifica che la finestra si estende anche precedentemente la prima riga della partizione.

ANALYTIC FUNCTION DEFINIZIONE: FUNZIONE(C) OVER PARTITION (FRAME) La funzione da applicare al FRAME della PARTITION può essere: AVG(C): media sul campo C della finestra definita nella partizione. COUNT(C / *): C = #valori NOT NULL del campo C sulla finestra definita nella partizione. * = #righe contenute nella finestra definita nella partizione. SUM(C): somma sul campo C della finestra definita nella partizione.

ANALYTIC FUNCTION DEFINIZIONE: FUNZIONE(C) OVER PARTITION (FRAME) La funzione da applicare al FRAME della PARTITION può essere: MAX(C): massimo valore del campo C nella finestra definita nella partizione. MIN(C): minimo valore del campo C nella finestra definita nella partizione.

ANALYTIC FUNCTION DEFINIZIONE: FUNZIONE(C) OVER PARTITION (FRAME) La funzione da applicare al FRAME della PARTITION può essere: VAR_SAMP(C): varianza dei campioni, esclusi i NULL: = sum (expr**2) - ((sum (expr) **2) / (count (*)))) / (count (*)- 1) VARIANCE(C): 0 per 1 riga VAR_SAMP(C) per N righe STDDEV_SAMP(C): calcola la deviazione standard di C = sqr_root(var_samp(c))

ANALYTIC FUNCTION DEFINIZIONE: FUNZIONE(C) OVER PARTITION (FRAME) La funzione da applicare al FRAME della PARTITION può essere: VAR_POP(C): varianza della popolazione di C dopo aver scartato i NULL = ( sum(c^2) - sum(c)2 / count(c)) / count(c) STDDEV_POP(C): deviazione standard della popolazione di C. = sqr_root(var_pop) STD_DEV(C): deviazione standard di C = sqr_root(variance)

ANALYTIC FUNCTION LAG / LEAD LAG N: accesso alla riga precedente nella finestra con un offset N dalla current row LEAD N: accesso alla riga successiva nella finestra con un offset N dalla current row Se N è fuori range Default (se specificato) NULL (se default non specificato)

ANALYTIC FUNCTION FIRST / LAST FIRST N: accesso alla prima riga della finestra LAST N: accesso all ultima riga della finestra Se il FIRST / LAST value è NULL se usato IGNORE NULLS -> primo valore NOT NULL nella finestra else NULL

ANALYTIC FUNCTION RANKING RANK(C): classifica il valore del campo sulla finestra ordinata. Se N righe hanno pari valore, il rank R tra loro è uguale, ma il rank successivo è R+N. DENSE_RANK(C): classifica il valore del campo sulla finestra ordinata, con valori interi consecutivi. Se N righe hanno pari valore, il rank R tra loro è uguale, ed il rank successivo è R+1. PERCENT_RANK(C): calcola il valore percentuale del rank nella finestra. (RANK(C) 1) / (#righe nella partizione -1) 0 se la partizione ha 1 riga CUME_DIST: distribuzione cumulativa. # righe precedenti / # righe della partizione se esistono pari, vengono contati come 1 NTILE(K): divide l insieme delle righe nella finestra in K sottoinsiemi numerati da 1 a K, ciascuno con lo stesso numero di righe (+/- 1). La funzione restituisce il # del sottoinsieme a cui è assegnata la riga.

RANK SAMPLE RANK() OVER (PARTITION BY CITY ORDER BY amt DESC) AS ranking RANK() OVER (PARTITION BY region ORDER BY SUM(amt) ) as rnk

DENSE_RANK SAMPLE DENSE_RANK() OVER (PARTITION BY CITY ORDER BY amt DESC) AS ranking

ANALYTIC FUNCTION HYPOTETICAL RANK(K): calcola il Rank di un ipotetico valore K sulla finestra ordinata. Se N righe hanno pari valore, il rank R tra loro è uguale, ma il rank successivo è R+N. DENSE_RANK(K): calcola il dense_rank di un ipotetico valore K sulla finestra ordinata, con valori interi consecutivi. Se N righe hanno pari valore, il rank R tra loro è uguale, ed il rank successivo è R+1. PERCENT_RANK(K): calcola il percent_rank di un ipotetico valore K sulla finestra ordinata. Il risultato è calcolato come se l ipotetico valore facesse parte della finestra. CUME_DIST(K): calcola la cume_dist di una ipotetica riga aggiunta alla finestra ordinata.

ANALYTIC FUNCTION ISTOGRAMMI width_bucket(<espressione>,<inizio_range>, <fine_range>, <num_intervalli>) Restituisce l intervallo (tra quelli definiti) a cui l espressione appartiene. Else: underflow ; num_intervalli + 1 Esempio: width_bucket(profit_margin, 15,21, 3)

ANALYTIC FUNCTION AVG OVER PARTITION: SELECT *,avg(profit_margin) over (partition by region order by city, quarter rows between 1 preceding and 1 following) FROM ZDDB_SALES_TBL order by 3,2,1,4

ANALYTIC FUNCTION SELECT *, lag(quarter,2) over (partition by region order by city, quarter), lead(quarter,2) over (partition by region order by city, quarter), first_value(amt) over (partition by city order by quarter), last_value(amt) over (partition by city ) /*order by quarter)*/ FROM ZDDB_SALES_TB L order by 3,2,1,4