Pig Cosa è Pig? Pig è una piattaforma per l'analisi e l'elaborazione parallela di grandi quantità di dati.

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Pig Cosa è Pig? Pig è una piattaforma per l'analisi e l'elaborazione parallela di grandi quantità di dati."

Transcript

1 PIG Pig

2 Pig Cosa è Pig? Pig è una piattaforma per l'analisi e l'elaborazione parallela di grandi quantità di dati. Gli elementi principali di questa piattaforma sono un linguaggio di alto livello Pig Latin un compilatore/interprete che traduce gli scripts in sequenze di Job MapReduce un'infrastruttura per l'esecuzione e la gestione dei Job una shell per l'esecuzione interattiva di comandi Pig Latin E' pratica comune identificare Pig con il linguaggio Pig-Latin.

3 Pig Pig-Latin: un dataflow language Il linguaggio Pig-Latin è stato sviluppato per consentire allo sviluppatore di ragionare ad alto livello e liberarlo dall'onere di convertire il codice in termini di MapReduce. Pig-Latin è un linguaggio di scripting ad alto livello orientato al dataflow programming, in cui tutta l'attenzione è posta sui dati, visti come un flusso di informazioni che attraversando un circuito di istruzioni viene trasformato e modellato, in maniera simile a quanto accade alla musica che attraversa i circuiti di un impianto Hi-Fi prima di esser riprodotta in alta qualità. Questo approccio è diametralmente opposto a quello tradizionale, in cui si progetta il software come un flusso di istruzioni che elabora e processa dei dati esterni.

4 Pig Pig-Latin: un dataflow language Pig-Latin si ispira ai linguaggi funzionali e come tale cerca di esprimere le trasformazioni da eseguire sui dati ma senza dettagliare il come eseguirle Le trasformazioni sono espresse mediante operatori ispirati all'sql join, sort, filter, group by e uno script assume la forma di un dataflow graph in cui ogni trasformazione viene eseguita nel momento in cui viene raggiunta dal flusso di dati, in contrasto con il modello tradizionale in cui ogni operazione viene eseguita non appena il program counter la raggiunge.

5 Pig Pig-Latin: un dataflow language Questo flusso di trasformazione viene automaticamente tradotto dal compilatore in un insieme di job MapReduce ed eseguito in parallelo su un cluster. Alcune operazioni possono facilmente essere espresse in termini di MapReduce [group by order by ] == shuffle + reduce [ filter select ] map per altre, come ad esempio il join, la traduzione non è così immediata. Tuttavia Pig offre delle implementazioni in grado di garantire performance quasi ottimali anche in presenza di dati fortemente sbilanciati (skewed).

6 Pig Perché Pig? Perché è stato realizzato Pig? Perché può essere conveniente utilizzarlo? Il modello di programmazione MapReduce prevede tre step di elaborazione fortemente correlati: { map, shuffle-sort, reduce } ed apprendere l'arte di convertire gli algoritmi noti secondo questo paradigma non è semplice; Spesso è necessario ideare dei percorsi complessi anche per ottenere gli equivalenti MapReduce di operazioni considerate semplici; Questo rende MapReduce costoso sia in termini di sviluppo che di manutenzione ed eventuali riutilizzo del codice; Ottimizzare il codice MapReduce può diventare un'arte per pochi eletti; Pig cerca di porre rimedio a queste difficoltà, ponendosi come un linguaggio semplice ed utilizzabile anche da persone non-hacker ma esperte sui dati.

7 Pig Dove si posiziona nel panorama BigData? Un tipico dataflow processing associato a sistemi BigData. Dove si posiziona Pig?

8 Pig Dove si posiziona nel panorama BigData? raccolta : in questa fase Pig viene utilizzato come interfaccia verso i dati acquisiti da sorgenti diverse, sia batch che real-time o near real-time; esplorazione : Pig si rivela molto utile nella gestione di dati eterogenei e ancora grezzi, viene usato per preparare filtrare i dati spuri, creare dei metadati che aiutino a capire il contenuto ed il valore dei dati stessi, categorizzarli, classificarli e prepararli per l'integrazione con sistemi di warehouse e analytics; elaborazione : Pig viene spesso utilizzato per preparare i dati all'integrazione con altri sistemi, uniformandoli secondo schemi e/o knowledge-bases preesistenti e iniziando la trasformazione da non-strutturati a strutturati;

9 Pig Extract Transform Load (ETL) I maiali sono onnivori e digeriscono di tutto. Pig è stato progettato per lavorare bene anche con dati sporchi e non normalizzati, in cui gli schemi non sono noti o sono inconsistenti. Per tale ragione le operazioni tipiche svolte con Pig sono quelle di verifica della consistenza e della qualità dei dati e della loro preparazione per sistemi che si aspettando dati strutturati o semi-strutturati. Queste operazioni vengono sintetizzate con l'acronimo ETL (extract transform load)

10 Pig Interagire con Pig Pig prevede due modalità di esecuzione: interattiva : attraverso una shell dedicata, per l'esplorazione dei file e la progettazione degli script; batch : per l'esecuzione in produzione degli script; entrambe queste modalità possono essere eseguite in modalità local, per fare dei semplici esperimenti con piccoli file eseguendo i job sulla macchina locale, e mapreduce per utilizzare un cluster.

11 Pig Grunt : la shell La shell di Pig si chiama grunt, come ci ricorda il suo prompt: grunt> Grunt offre alcune funzionalità di una shell tradizionale (ma non tutte): tab-completion sui comandi (non sui file ) command history semplice supporto all'editing Non fornisce invece pipes redirezione I/O esecuzione in background Per uscire dalla shell è sufficiente dare il comando quit o digitare CTRL+D

12 Pig Grunt : la shell Pig lavora nativamente con l'hdfs, per questo Grunt consente di interagire direttamente con esso attraverso il comando fs, le cui opzioni sono le stesse offerte dal comando hadoop fs : mkdir cp du ls cat rm copyfromlocal in questo modo risulta molto semplice interagire con l'hdfs direttamente dalla shell o all'interno degli script.

13 Pig Grunt : la shell L'utilizzo più naturale di Grunt è l'inserimento interattivo di comandi Pig Latin. Questa modalità può essere utile per esplorare un nuovo dataset scrivere il prototipo di un nuovo script sperimentare diverse pipeline alla ricerca di ottimizzazioni Per migliorare l'interattività Pig esegue le elaborazioni solo in seguito ad un comando che prevede la generazione di un output (es. dump o store ). In questo modo è possibile inserire i diversi comandi che compongono lo script senza dover attendere l'elaborazione parziale dei dati e lanciare l'esecuzione dello script attraverso la generazione dei risultati finali.

14 Pig Grunt : la shell Grunt offre inoltre alcune semplici funzioni di controllo per l'esecuzione del codice, attraverso i tre comandi kill jobid: consente di terminare un particolare job exec script: consente di eseguire uno script run script: consente di eseguire uno script Gli ultimi due si differenziano per il fatto che il comando exec esegue lo script esternamente alla shell e mostra solo il risultato finale; il comando run esegue lo script internamente alla shell, come se i comandi fossero digitati in modalità interattiva e dunque al termine dell'esecuzione risulteranno disponibili anche tutti i dati intermedi generati durante l'esecuzione.

15 Pig Strumenti di sviluppo La shell Grunt è un ottimo strumento per esplorare un nuovo dataset e sperimentare vari prototipi per un nuovo script, tuttavia non è molto adatta allo sviluppo ed alla manutenzione degli script. Per questo è dunque conveniente utilizzare dei comuni editor di testo. Esistono tuttavia dei plugin per alcuni dei principali editor (es. Vim, TextMate, Emacs, Eclipse) che forniscono funzionalità quali syntax-higlighting, auto completamento e in alcuni casi integrazione con il framework hadoop per l'esecuzione degli script dall'interno dell'ambiente di sviluppo.

16 Pig Strumenti di sviluppo Durante la parte pratica utilizzeremo un plugin che consente di scrivere e lanciare gli script Pig direttamente da browser.

17 Introduzione al Linguaggio

18 Introduzione al linguaggio Si è detto che è un dataflow language simile ad un linguaggio funzionale. Questo significa che non si dovrà pensare in termini di istruzioni su come eseguire le elaborazioni ma si dovrà organizzare il codice in termini di espressioni che indicano quali elaborazioni eseguire E' importante ricordare che ad una espressione è sempre associato un valore (e dunque un tipo). In Pig-Latin ogni espressione rappresenta un dataset o relazione, ed è concettualmente equivalente ad una tabella SQL contenente tanti record, ognuno dei quali suddiviso in un numero arbitrario di campi o colonne.

19 Introduzione al linguaggio Data l'espressione input = load 'data' input è il nome dell'espressione ottenuta dal caricamento del dataset 'data'. Il nome della relazione è anche detto alias, ma a discapito delle apparenze un alias non è una variabile in quanto l'assegnamento è definitivo. Sebbene sia possibile riutilizzare un alias, questo equivale alla cancellazione della vecchia relazione ad alla creazione di una nuova relazione, con conseguenti ambiguità nell'interpretazione di uno script. E' dunque sconsigliato riutilizzare gli alias, in quanto potenziale fonte di errori. Le keywords di Pig non sono case-sensitive (es load == LOAD), mentre tutto il resto lo è, quindi è bene considerarlo un linguaggio case-sensitive.

20 Introduzione al linguaggio Anche i campi (colonne) delle relazioni hanno dei nomi; questi assomigliano di più a delle variabili perché possono assumere valori diversi in base al record corrente. Tuttavia si distinguono dalle variabili in quanto non è possibile assegnare un valore ad un campo di un singolo record. Tutti i nomi devono iniziare con un carattere alfabetico, seguito da una sequenza arbitraria di caratteri (ASCII), numeri o '_' (underscore). In Pig Latin esistono due tipologie di commento quello multilinea di Java /* */ (eventualmente anche su riga singola) quello su riga singola in stile SQL '--' (doppio meno)

21 Il modello dati Come tutti i linguaggi anche Pig-Latin ha un suo modello dati con cui rappresentare le informazioni su cui deve operare. I tipi supportati si possono suddividere in due categorie: scalari e complessi. I tipi scalari sono gli equivalenti di alcuni tipi nativi in Java { int, long, float, double } chararray String bytearray byte[] (in Java), Blob (in SQL) null null in SQL I tipi complessi sono tre: map, tuple, bag e richiedono una descrizione più dettagliata.

22 Il tipo Map Il tipo map modella un'associazione tra due elementi una chiave (chararray) utilizzata per l'indicizzare il contenuto della collezione un valore (di tipo qualunque, scalare o complesso) utilizzato per contenere i singoli dati Può essere descritto da un'espressione letterale racchiusa tra parentesi quadre ['name' # 'bob', 'age' # 25] Se non viene specificato un tipo, per default Pig assegna al valore il tipo bytearray. A differenza degli equivalenti per altri linguaggi come Java o C++, valori corrispondenti a chiavi diverse possono avere tipi diversi.

23 Il tipo Tuple Una tupla è una sequenza ordinata di dimensione fissata di elementi, detti campi, ed è rappresentata da un'espressione letterale racchiusa tra parentesi tonde ( 'bob', 55 ) E' equivalente ad una riga SQL in cui i campi corrispondono alle colonne di una tabella e possono contenere uno qualunque dei tipi supportati da Pig e ogni campo può essere di tipo diverso. E' possibile accedere ai campi per nome o per posizione tramite l'espressione $N dove N è la posizione del campo nella tupla. E' possibile associare ad una tupla uno schema che definisce il nome ed il tipo di ogni campo.

24 Il tipo Bag Un bag è una collezione non ordinata di tuple, e può essere descritto da un'espressione letterale racchiusa tra parentesi graffe { ('bob', 55), ('sally', 52), ('john', 25) } E' la più generale delle collezioni supportate in Pig e può salvare parte dei suoi dati su file in maniera automatica, mentre gli altri tipi complessi (map e tuple) devono necessariamente essere contenuti in RAM. Può avere uno schema associato che descrive le tuple al suo interno. Tuttavia essendo un insieme non-ordinato non è possibile accedere ai campi per posizione.

25 Schemi La filosofia di Pig è quella di mangiare di tutto dunque anche se una relazione non ha uno schema associato Pig cercherà di fare del suo meglio per stimare la tipologia di dati in base alle operazioni richieste nello script. Tuttavia, quando possibile, è bene definire lo schema perché aiuta Pig nel controllo degli errori e può aumentare le performance. Gli schemi possono essere ricorsivi. Il modo più semplice per comunicare a Pig uno schema è definirlo esplicitamente al caricamento dei dati dividends = load 'NYSE_dividends' as (exchange: chararray, symbol: chararray, date:chararray, dividend: float);

26 Schemi Se si definisce uno schema Pig cercherà di adattare i dati allo schema fornito attraverso dei cast inserendo dei null se mancano i dati scartando eventuali campi in eccesso Se nella definizione dello schema si omettono i tipi dei dati dividends = load 'NYSE_dividends' as (exchange, symbol, date, dividend); Pig assegnerà a ciascun campo il tipo più generico, bytearray, e successivamente cercherà di stimare il tipo più adatto in base all'uso che ne verrà fatto all'interno dello script.

27 Definizione di uno schema Per specificare lo schema di una relazione si deve usare la seguente sintassi Tipo Sintassi Esempio int int as ( a: int ) long long as ( a: long ) map map[ ] o map[tipo] as ( a: map[ ], b: map[int] ) tuple tuple() o tuple( lista di campi) as ( a: tuple(), b: tuple(x: int, y: int ) ) bag bag {} o bag{ t: (lista di campi ) } as ( a: bag{}, b: bag{ t: ( x:int, t:int) }

28 Definizione di uno schema Nel caso relazioni utilizzate spesso, magari in più script, e con schemi complessi specificare ogni volta lo schema può essere scomodo e fonte di errori. In tal caso è possibile utilizzare per la memorizzazione dei dati su disco formati che conservino al loro interno lo schema oppure sistemi dedicati alla gestione degli schemi come HCatalog dividends = load 'NYSE_dividends' using HCatLoader(); In generale è bene non mescolare le due modalità.

29 Deduzione di uno schema Vediamo ora come Pig cerchi di dedurre lo schema di una relazione. daily = load 'NYSE_daily'; calcs = foreach daily generate $7/1000, $3*100.0, SUBSTRING($0, 0,1), $3 - $6; Pur non essendo stato fornito uno schema Pig può assumere che $7 sia un intero perché diviso per un intero $3 sia un double perché moltiplicato per un double $0 sia un chararray perché si estrae una sottostringa $6 sia un numero perché utilizzato in una sottrazione. Tuttavia non sapendo se si tratta di un intero o di un double Pig sceglie l'ipotesi più prudente e assume sia un double

30 Cast Il cast in Pig è analogo a quello in Java e segue la stessa sintassi daily = load 'NYSE_daily'; calcs = foreach daily generate (int)$7 /1000, (double)$3 * 100.0, (chararray)substring($0, 0,1), (double)$6 (double)$3; e segue (quasi) le stesse regole: è possibile eseguire un cast automatico dal tipo più piccolo a quello più grande il cast inverso grande piccolo deve essere esplicito e può causare troncamenti si può fare il cast da chararray a un tipo numerico ma se la stringa non ha un formato corretto il risultato sarà un null

31 Supporto allo sviluppo

32 Supporto allo sviluppo Pig-Latin include un set di comandi pensati per aiutare lo sviluppatore nell'esplorazione dei dati e nello sviluppo degli script describe descrive lo schema associato ad una relazione illustrate mostra alcuni record rappresentativi del dataset per aiutare lo sviluppatore a capirne il formato e la struttura del dataset stesso sample campiona il dataset creandone una versione di dimensione ridotta limit selezione i primi N record di un dataset explain mostra come il compilatore compilerà ed eseguirà lo script in termini di mapreduce

33 describe describe mostra lo schema associato ad una relazione e può essere molto utile nell'apprendimento di Pig-Latin e nello sviluppo degli script. In uno script possono esserci più comandi describe. divs = load 'NYSE_dividends' as (exchange:chararray, symbol:chararray, date:chararray, dividends:float); trimmed = foreach divs generate symbol, dividends; grpd = group trimmed by symbol; avgdiv = foreach grpd generate group, AVG(trimmed.dividends); describe trimmed; describe grpd; describe avgdiv; trimmed: {symbol: chararray, dividends: float} grpd: {group: chararray, trimmed: {(symbol: chararray, dividends: float)}} avgdiv: {group: chararray, double}

34 sample / limit Spesso uno dei modi migliori per testare uno script è quello di lanciarlo sui nostri dati e verificare che i risultati prodotti siano conformi alle attese. Ma operando su BigData questo può richiedere parecchio tempo, per cui è utile avere dei meccanismi per ridurre le dimensioni dei dataset. L'operatore sample consente di selezionare una percentuale di record scelta a caso dal nostro dataset. L'operatore limit invece consente di specificare il numero di record di una relazione da selezionare.

35 sample / limit --sample.pig divs = load 'NYSE_dividends'; some = sample divs 0.1; some conterrà circa il 10% dei record presenti in divs. --limit.pig divs = load 'NYSE_dividends'; first10 = limit divs 10; first10 conterrà i primi 10 record presenti in divs.

36 illustrate Non sempre un semplice campionamento è in grado di cogliere tutti gli aspetti di un dataset. Ad esempio se lo script esegue un join è necessario assicurarsi che esistano dei record con la stessa chiave altrimenti il join restituirà una relazione vuota. L'operatore illustrate serve ad evidenziare il dataflow assicurando di selezionare dei record che arrivino al termine della trasformazione. Per farlo inizia con un sample dei dati ed esegue su di essi lo script assicurandosi tuttavia che ogniqualvolta viene incontrato un operatore che scarta dei risultati (filter, join, ) almeno qualche record superi il filtro. Se tra quelli campionati non ne trova nessuno, ne costruisce uno simile, cioè che rispetti lo schema e che abbia delle caratteristiche tali da fargli superare il filtro.

37 illustrate divs = load 'NYSE_dividends' as (e:chararray, s:chararray, d:chararray, div:float); recent = filter divs by d > ' '; trimmd = foreach recent generate s, div; grpd = group trimmd by s; avgdiv = foreach grpd generate group, AVG(trimmd.div); illustrate avgdiv;

38 illustrate

39 explain Uno dei principali obiettivi di Pig è quello di consentire allo sviluppatore di pensare in termini di dataflow e dimenticare il MapReduce. Tuttavia in alcuni casi è utile sapere cosa succede dietro le quinte. L'operatore explain mostra come Pig compilerà lo script e quindi come il nostro dataflow verrà espresso in termini di MapReduce. Questo può esser utile sia per fare il debug di uno script che per ottimizzarne le performance. L'outupt di explain non è molto intuitivo e per trarne beneficio è richiesto un certo sforzo da parte dello sviluppatore.

40 explain L'operatore explain può esser utilizzato in due modi: su un alias: in maniera analoga a describe si può chiedere a Pig di mostrare il dataflow con cui verranno generati i dati da inserire in una relazione; su uno script: in alternativa si può chiedere a Pig di illustrare l'intero dataflow associato ad uno script L'output prodotto dall'operatore explain consiste di tre grafici in modalità testuale che illustrano le tre fasi di compilazione di uno script: il logical plan il physical plan l'execution plan

41 explain logical plan Dopo una preliminare verifica grammaticale e sintattica dello script viene prodotto il logical plan, che illustra gli operatori logici che Pig utilizzerà per eseguire lo script. Già in questa fase verranno eseguite delle ottimizzazioni, ad esempio anticipando il più possibile l'esecuzione di operatori come filter che riducono le dimensioni dei dati su cui lavorare e consentono di velocizzare l'esecuzione complessiva dello script. Applichiamo l'operatore explain allo script seguente --explain.pig divs = load 'NYSE_dividends' as (exchange, symbol, date, dividends); grpd = group divs by symbol; avgdiv = foreach grpd generate group, AVG(divs.dividends); store avgdiv into 'average_dividend';

42 explain logical plan # # New Logical Plan: # avgdiv: (Name: LOStore Schema: group#11:bytearray,#27:double) ---avgdiv: (Name: LOForEach Schema: group#11:bytearray,#27:double) (Name: LOGenerate[false,false] Schema: group#11:bytearray,#27:double)columnprune:inputuids=[23, 11]ColumnPrune:OutputUids=[27, 11] group:(name: Project Type: bytearray Uid: 11 Input: 0 Column: (*)) (Name: UserFunc(org.apache.pig.builtin.AVG) Type: double Uid: 27) ---(Name: Dereference Type: bag Uid: 26 Column:[3]) ---divs:(name: Project Type: bag Uid: 23 Input: 1 Column: (*)) ---(Name: LOInnerLoad[0] Schema: group#11:bytearray) ---divs: (Name: LOInnerLoad[1] Schema: exchange#10:bytearray,symbol#11:bytearray,date#12:bytearray,dividends#13:bytearray) ---grpd: (Name: LOCogroup Schema: group#11:bytearray, divs#23:bag{ #28:tuple(exchange#10:bytearray,symbol#11:bytearray,date#12:bytearray,dividends#13:bytearray)}) symbol:(name: Project Type: bytearray Uid: 11 Input: 0 Column: 1) ---divs: (Name: LOLoad Schema: exchange#10:bytearray,symbol#11:bytearray,date#12:bytearray,dividends#13:bytearray)requiredfields:[0, 1, 2, 3]

43 explain physical plan Dopo aver ottimizzato il logical plan, Pig produce il physical plan in cui illustra gli operatori fisici che utilizzerà per eseguire lo script. Questo piano assomiglia molto al precedente salvo il fatto che ora sono ben definite sia le funzioni di load store (es. PigStorage) che i percorsi dei file di input ed output.

44 explain physical plan # # Physical Plan: # avgdiv: Store(fakefile:org.apache.pig.builtin.PigStorage) - scope avgdiv: New For Each(false,false)[bag] - scope-11 Project[bytearray][0] - scope-5 POUserFunc(org.apache.pig.builtin.AVG)[double] - scope-9 ---Project[bag][3] - scope-8 ---Project[bag][1] - scope-7 ---grpd: Package[tuple]{bytearray} - scope-2 ---grpd: Global Rearrange[tuple] - scope-1 ---grpd: Local Rearrange[tuple]{bytearray}(false) - scope-3 Project[bytearray][1] - scope-4 ---divs: Load(hdfs://.../user/hue/NYSE_dividends:org.apache.pig.builtin.PigStorage) - scope-0

45 explain execution plan Come ultimo step Pig partendo dal physical plan decide la miglior strategia per distribuire i vari operatori nel minor numero possibile di job MapReduce. Come prima cosa scorre il plan alla ricerca di tutti gli operatori che impongono una fase di reduce (local / global rearrange, package). Poi verifica se è possibile effettuare delle ottimizzazioni sul piano fisico, ad esempio utilizzando dei combiner o includendo alcune delle operazioni di sort nel sort intrinseco fornito dal Hadoop. Al termine di queste analisi Pig ha preparato il suo execution plan con il dettaglio del numero di job e dei vari operatori da eseguire nelle diverse fasi.

46 explain execution plan # # Map Reduce Plan # MapReduce node scope-13 Map Plan grpd: Local Rearrange[tuple]{bytearray}(false) - scope-26 Project[bytearray][0] - scope avgdiv: New For Each(false,false)[bag] - scope-14 Project[bytearray][0] - scope-15 POUserFunc(org.apache.pig.builtin.AVG$Initial)[tuple] - scope Project[bag][3] - scope Project[bag][1] - scope Pre Combiner Local Rearrange[tuple]{Unknown} - scope divs: Load(hdfs://sandbox.hortonworks.com:8020/user/hue/NYSE_dividends:org.apache.pig.builtin.PigStorage) - scope

47 explain execution plan Combine Plan grpd: Local Rearrange[tuple]{bytearray}(false) - scope-30 Project[bytearray][0] - scope avgdiv: New For Each(false,false)[bag] - scope-19 Project[bytearray][0] - scope-20 POUserFunc(org.apache.pig.builtin.AVG$Intermediate)[tuple] - scope Project[bag][1] - scope POCombinerPackage[tuple]{bytearray} - scope Reduce Plan avgdiv: Store(fakefile:org.apache.pig.builtin.PigStorage) - scope avgdiv: New For Each(false,false)[bag] - scope-11 Project[bytearray][0] - scope-5 POUserFunc(org.apache.pig.builtin.AVG$Final)[double] - scope-9 ---Project[bag][1] - scope POCombinerPackage[tuple]{bytearray} - scope Global sort: false

48 Comandi Base

49 Comandi Base Alla base di un qualunque flusso di elaborazione dati c'è la definizione delle sorgenti di input e di output dei dati. Pig latin offre tre comandi per la loro definizione: load per la definizione delle sorgenti di input store per la definizione delle sorgenti di ouptut dump per mostrare i risultati a video (su console)

50 Load Il formato base del comando è input = load 'data'; Per default il comando load lavora su HDFS e assume come directory di partenza la cartella /user/user_name. E' possibile utilizzare sia path assoluti che relativi o anche specificare la URL completa con l'indirizzo del NameNode: hdfs://my.namenode.org/data/ Per default viene usata la funzione di lettura PigStorage che si aspetta in input file testuali separati da tabulazioni.

51 Load E' possibile possibile specificare opzioni diverse attraverso la clausola using /* comma separated values */ input = load 'data' using PigStorage(','); E' possibile specificare sorgenti diverse dall'hdfs, es. Hbase input = load 'data' using HbaseStorage(); o, se noto, specificare uno schema da associare alla relazione input = load 'data' as ( exchange: chararray, symbol: chararray, date: chararray, dividends: float);

52 Load: globs Se si sostituisce il nome del file con quello di una cartella verranno letti tutti i file presenti nella cartella e il loro contenuto sarà accorpato in un'unica relazione. E' possibile filtrare i nomi con delle regular expressions semplificate (globs) Glob Significato? match con ogni singolo carattere * match con zero o più caratteri [abc] match con un singolo carattere tra quelli specificati [a-z] match con un singolo carattere tra quelli specificati dall'intervallo (estremi inclusi) [^abc] match con un singolo carattere che non sia tra quelli specificati [^a-z] match con un singolo carattere che non sia nell'intervallo (estremi inclusi) \c Rimuove ( escapes ) ogni significato speciale del carattere c {aa, bb} match con una delle stringhe indicate nell'elenco

53 store Operazione duale alla lettura è la scrittura che può essere eseguita con il comando store che segue le stesse regole del comando load. Il formato standard è store 'NomeRelazione' into 'nome_file'; che richiamerà la funzione di default PigStorage. Anche in questo caso il comportamento di deafult può essere modificato con la clausola using store 'NomeRelazione' into 'nome_file' using HBaseStorage();

54 dump L'ultima operazione di output è dump utile sopratutto in modalità interattiva per visualizzare a schermo il contenuto di una relazione. Il suo formato è estremamente semplice dump 'NomeRelazione'; Il comando dump forza l'esecuzione di tutti i comandi dati fino ad ora nella shell.

55 Operatori Relazionali

56 Operatori Relazionali Il punto di forza di Pig-Latin sono gli operatori relazionali, che si ispirano agli equivalenti SQL, ma hanno un comportamento lievemente diversi. I principali sono foreach che applica un insieme di espressioni a ciascun record di una relazione filter che consente di selezionare solo i record di interesse group che consente di accorpare i dati secondo order by che consente di riordinare i record di una relazione join che consente di unificare il contenuto di due relazioni

57 foreach L'operatore foreach applica un insieme di espressioni a ciascun record di una relazione e, come risultato, genera la prossima relazione della pipeline. E' equivalente all'operatore di proiezione del SQL. Il suo formato base è piuttosto semplice A = load 'input' as (user: chararray, id: long, address: chararray, phone: chararray, preferences: map[]); B = foreach A generate user, id; in questo esempio si estraggono da A i campi user e id e con essi viene generata la nuova relazione B.

58 foreach Il vero potenziale dell'operatore foreach emerge con l'applicazione di espressioni sui campi di una relazione. Le più semplici espressioni disponibili sono valori costanti e riferimenti ai campi (per nome o posizione con $pos ) prices = load 'NYSE_daily' as (exchange, symbol, date, open, high, low, close, volume, adj_close); gain = foreach prices generate close-open; gain2 = foreach prices generate $6 - $3; Le due relazioni gain e gain2 avranno gli stessi valori

59 foreach E' possibile specificare gruppi di campi attraverso i simboli * per indicare tutti i campi.. per indicare un intervallo di campi prices = load 'NYSE_daily' as (exchange, symbol, date, open, high, low, close, volume, adj_close); beginning = foreach prices generate..open; -- produces exchange, symbol, date, open middle = foreach prices generate open..close; -- produces open, high, low, close end = foreach prices generate volume..; -- produces volume, adj_close

60 foreach Sono inoltre disponibili le operazioni standard tra numeri + - * / % e l'operatore? equivalente all' if-then-else (con il vincolo che i due valori restituiti siano dello stesso tipo). Nella definizione delle espressioni è bene prestare attenzione ai null perché qualunque operazione aritmetica con un null ha come risultato null. 2 == 2? 1 : 4 --returns 1 2 == 3? 1 : 4 --returns 4 null == 2? 1 : 4 -- returns null 2 == 2? 1 : 'fred' -- type error; both values must be of the same type

61 foreach Gli schemi sono strutture ricorsive, dunque è probabile che si abbia la necessità di estrarre informazioni annidate all'interno di tipi complessi. Per farlo è necessario usare gli operatori di proiezione # per le map. per le tuple A = load 'baseball' as (name:chararray, team:chararray, position:bag{t:(p:chararray)}, bat:map[]); avg = foreach A generate bat#'batting_average'; B = load 'input' as (t:tuple(x:int, y:int)); C = foreach B generate t.x, t.$1;

62 foreach Estrarre informazioni da un bag è invece più complesso perché questo non ha un ordine tra i suoi elementi. L'unica cosa che si può fare è applicare la proiezione ai campi delle tuple contenute nel bag e creare un nuovo bag. A = load 'input' as (b:bag{t:(x:int, y:int, Z:int)}); B = foreach A generate b.(x, y);

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione Automatizzare i compiti ripetitivi I file batch Anno accademico 2000-01 1 Spesso capita di dover eseguire ripetutatmente una data sequenza di comandi Introdurli uno a uno da tastiera è un processo lento

Dettagli

Comandi filtro: sed. Se non si specificano azioni, sed stampa sullo standard output le linee in input, lasciandole inalterate.

Comandi filtro: sed. Se non si specificano azioni, sed stampa sullo standard output le linee in input, lasciandole inalterate. Comandi filtro: sed Il nome del comando sed sta per Stream EDitor e la sua funzione è quella di permettere di editare il testo passato da un comando ad un altro in una pipeline. Ciò è molto utile perché

Dettagli

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

INFORMATICA. Applicazioni WEB a tre livelli con approfondimento della loro manutenzione e memorizzazione dati e del DATABASE. INFORMATICA Applicazioni WEB a tre livelli con approfondimento della loro manutenzione e memorizzazione dati e del DATABASE. APPLICAZIONI WEB L architettura di riferimento è quella ampiamente diffusa ed

Dettagli

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

Riccardo Dutto, Paolo Garza Politecnico di Torino. Riccardo Dutto, Paolo Garza Politecnico di Torino Integration Services Project SQL Server 2005 Integration Services Permette di gestire tutti i processi di ETL Basato sui progetti di Business Intelligence di tipo Integration services Project SQL Server

Dettagli

OSSIF WEB. Manuale query builder

OSSIF WEB. Manuale query builder OSSIF WEB Manuale query builder - Maggio 2010 1) Sommario 1) SOMMARIO... 2 INTRODUZIONE... 3 Scopo del documento... 3 Struttura del documento... 3 Descrizione dell interfaccia grafica... 3 SELEZIONE DI

Dettagli

Il sistema IBM DB2. Sistemi Informativi T. Versione elettronica: L01.1.IntroduzioneDB2.pdf

Il sistema IBM DB2. Sistemi Informativi T. Versione elettronica: L01.1.IntroduzioneDB2.pdf Il sistema IBM DB2 Sistemi Informativi T Versione elettronica: L01.1.IntroduzioneDB2.pdf IBM DB2 Il DBMS relazionale IBM DB2 è il prodotto di punta dell IBM per la gestione di basi di dati relazionali

Dettagli

Introduzione al Python

Introduzione al Python Andrea Passerini passerini@disi.unitn.it Informatica Caratteristiche procedurale si specifica la procedura da eseguire sui dati strutturato concetto di visibililtà delle variabili orientato agli oggetti

Dettagli

Linguaggi di programmazione

Linguaggi di programmazione Linguaggi di programmazione Programmazione L attività con cui si predispone l elaboratore ad eseguire un particolare insieme di azioni su particolari dati, allo scopo di risolvere un problema Dati Input

Dettagli

Corso Base. Liceo Norberto Rosa Bussoleno Prof. Angelo GIORGIO

Corso Base. Liceo Norberto Rosa Bussoleno Prof. Angelo GIORGIO Corso Base Liceo Norberto Rosa Bussoleno Prof. Angelo GIORGIO Java Java è un Linguaggio di Programmazione orientato agli oggetti. Un Linguaggio di Programmazione è un linguaggio ad alto livello, dotato

Dettagli

HBase Data Model. in più : le colonne sono raccolte in gruppi di colonne detti Column Family; Cosa cambia dunque?

HBase Data Model. in più : le colonne sono raccolte in gruppi di colonne detti Column Family; Cosa cambia dunque? NOSQL Data Model HBase si ispira a BigTable di Google e perciò rientra nella categoria dei column store; tuttavia da un punto di vista logico i dati sono ancora organizzati in forma di tabelle, in cui

Dettagli

Programmazione in Java (I modulo) Lezione 3: Prime nozioni

Programmazione in Java (I modulo) Lezione 3: Prime nozioni Programmazione in Java (I modulo) Lezione 3: Prime nozioni La volta scorsa Abbiamo avuto un primo assaggio! Abbiamo visto come usare l editor per scrivere un programma Java. Abbiamo analizzato riga per

Dettagli

Tibet4DExt. Manuale Utente. Un Plug-in 4 th Dimension per accedere agli archivi di Tibet in linea. (Versione 1.7.x)

Tibet4DExt. Manuale Utente. Un Plug-in 4 th Dimension per accedere agli archivi di Tibet in linea. (Versione 1.7.x) Tibet4DExt Un Plug-in 4 th Dimension per accedere agli archivi di Tibet in linea (Versione 1.7.x) Manuale Utente Capitolo 1, Informazioni Generali Informazioni generali su Tibet4DExt Il plug-in Tibet4DExt

Dettagli

SQL Server 2005. Integration Services. SQL Server 2005: ETL - 1. Integration Services Project

SQL Server 2005. Integration Services. SQL Server 2005: ETL - 1. Integration Services Project atabase and ata Mi ni ng Group of P ol itecnico di Torino atabase and ata Mi ni ng Group of P ol itecnico di Torino atabase and data mining group, SQL Server 2005 Integration Services SQL Server 2005:

Dettagli

Introduzione al foglio elettronico

Introduzione al foglio elettronico Introduzione al foglio elettronico 1. Che cos'è un foglio elettronico? Un foglio elettronico è un programma che permette di inserire dei dati, di calcolare automaticamente i risultati, di ricalcolarli

Dettagli

Dispensa 3. 1.1 YACC: generalità

Dispensa 3. 1.1 YACC: generalità Dispensa 3 1.1 YACC: generalità Il tool Yacc (acronimo per Yet Another Compiler Compiler) è uno strumento software che a partire da una specifica grammaticale context free di un linguaggio scritta in un

Dettagli

----------------------------------------------------------------

---------------------------------------------------------------- ---------------------------------------------------------------- utilizzo frequente di chiamate a.. A differenza del Pascal, il C permette di operare con assegnamenti e confronti su dati di tipo diverso,

Dettagli

Linguaggi e Paradigmi di Programmazione

Linguaggi e Paradigmi di Programmazione Linguaggi e Paradigmi di Programmazione Cos è un linguaggio Definizione 1 Un linguaggio è un insieme di parole e di metodi di combinazione delle parole usati e compresi da una comunità di persone. È una

Dettagli

Operazioni sui database

Operazioni sui database Operazioni sui database Le operazioni nel modello relazionale sono essenzialmente di due tipi: Operazioni di modifica della base di dati (update) Interrogazioni della base di dati per il recupero delle

Dettagli

Introduzione al Linguaggio C

Introduzione al Linguaggio C Introduzione al Linguaggio C File I/O Daniele Pighin April 2009 Daniele Pighin Introduzione al Linguaggio C 1/15 Outline File e dati Accesso ai file File I/O Daniele Pighin Introduzione al Linguaggio C

Dettagli

CORSO I.F.T.S TECNICHE PER LA PROGETTAZIONE E LA GESTIONE DI DATABASE

CORSO I.F.T.S TECNICHE PER LA PROGETTAZIONE E LA GESTIONE DI DATABASE CORSO I.F.T.S TECNICHE PER LA PROGETTAZIONE E LA GESTIONE DI DATABASE Ing. Mariano Di Claudio Lezione del 20/10/2014 1 Indice 1. HBase e Hrider Caratteristiche chiave Modello dati Architettura Installazione

Dettagli

1. I database. La schermata di avvio di Access

1. I database. La schermata di avvio di Access 7 Microsoft Access 1. I database Con il termine database (o base di dati) si intende una raccolta organizzata di dati, strutturati in maniera tale che, effettuandovi operazioni di vario tipo (inserimento

Dettagli

Sistemi Operativi. Interfaccia del File System FILE SYSTEM : INTERFACCIA. Concetto di File. Metodi di Accesso. Struttura delle Directory

Sistemi Operativi. Interfaccia del File System FILE SYSTEM : INTERFACCIA. Concetto di File. Metodi di Accesso. Struttura delle Directory FILE SYSTEM : INTERFACCIA 8.1 Interfaccia del File System Concetto di File Metodi di Accesso Struttura delle Directory Montaggio del File System Condivisione di File Protezione 8.2 Concetto di File File

Dettagli

Il sistema operativo UNIX/Linux. Gli script di shell

Il sistema operativo UNIX/Linux. Gli script di shell Il sistema operativo UNIX/Linux Gli script di shell Introduzione Le shell permettono La gestione di comandi su linea di comando La shell comprende automaticamente quando il costrutto termina e lo esegue

Dettagli

COS È UN LINGUAGGIO? LINGUAGGI DI ALTO LIVELLO LA NOZIONE DI LINGUAGGIO LINGUAGGIO & PROGRAMMA

COS È UN LINGUAGGIO? LINGUAGGI DI ALTO LIVELLO LA NOZIONE DI LINGUAGGIO LINGUAGGIO & PROGRAMMA LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware COS È UN LINGUAGGIO? Un linguaggio è un insieme di parole e di metodi di combinazione delle

Dettagli

Struttura logica di un programma

Struttura logica di un programma Struttura logica di un programma Tutti i programmi per computer prevedono tre operazioni principali: l input di dati (cioè l inserimento delle informazioni da elaborare) il calcolo dei risultati cercati

Dettagli

Corso di Informatica. Prerequisiti. Modulo T3 B3 Programmazione lato server. Architettura client/server Conoscenze generali sui database

Corso di Informatica. Prerequisiti. Modulo T3 B3 Programmazione lato server. Architettura client/server Conoscenze generali sui database Corso di Informatica Modulo T3 B3 Programmazione lato server 1 Prerequisiti Architettura client/server Conoscenze generali sui database 2 1 Introduzione Lo scopo di questa Unità è descrivere gli strumenti

Dettagli

Introduzione a ROOT. 1. Informazioni generali

Introduzione a ROOT. 1. Informazioni generali Introduzione a ROOT 1. Informazioni generali ROOT è un ambiente visualizzazione e trattamento dati interattivo sviluppato al CERN (si veda il sito ufficiale http://root.cern.ch interamente sviluppato in

Dettagli

IL LINGUAGGIO SQL IDENTIFICATORI E TIPI DI DATI COMANDI E ISTRUZIONI

IL LINGUAGGIO SQL IDENTIFICATORI E TIPI DI DATI COMANDI E ISTRUZIONI IL LINGUAGGIO SQL Il linguaggio SQL ( Structured Query Languages) è un linguaggio non procedurale che è diventato uno standard tra i linguaggi per la gestione dei database relazionali. Il linguaggio procedurale

Dettagli

Utilizzo del linguaggio Basic utilizzando l interfaccia di Excel Silvia Patacchini

Utilizzo del linguaggio Basic utilizzando l interfaccia di Excel Silvia Patacchini Introduzione all utilizzo di Visual Basic for Application Utilizzo del linguaggio Basic utilizzando l interfaccia di Excel Silvia Patacchini PROGRAMMAZIONE Insieme delle attività da svolgersi per creare

Dettagli

2104 volume III Programmazione

2104 volume III Programmazione 2103 SQLite Capitolo 77 77.1 Utilizzo generale................................. 2104 77.1.1 Utilizzo di sqlite3».......................... 2104 77.1.2 Copie di sicurezza............................ 2106

Dettagli

Modulo. Programmiamo in Pascal. Unità didattiche COSA IMPAREREMO...

Modulo. Programmiamo in Pascal. Unità didattiche COSA IMPAREREMO... Modulo A Programmiamo in Pascal Unità didattiche 1. Installiamo il Dev-Pascal 2. Il programma e le variabili 3. Input dei dati 4. Utilizziamo gli operatori matematici e commentiamo il codice COSA IMPAREREMO...

Dettagli

Iniziativa Comunitaria Equal II Fase IT G2 CAM - 017 Futuro Remoto. Approfondimento SOFTWARE PER L ARCHIVIAZIONE

Iniziativa Comunitaria Equal II Fase IT G2 CAM - 017 Futuro Remoto. Approfondimento SOFTWARE PER L ARCHIVIAZIONE APPROFONDIMENTO ICT Iniziativa Comunitaria Equal II Fase IT G2 CAM - 017 Futuro Remoto Approfondimento SOFTWARE PER L ARCHIVIAZIONE ORGANISMO BILATERALE PER LA FORMAZIONE IN CAMPANIA INDICE SOFTWARE PER

Dettagli

Breve riepilogo della puntata precedente:

Breve riepilogo della puntata precedente: Breve riepilogo della puntata precedente: 1. In C, il passaggio dei parametri alle funzioni avviene sempre per copia, ovvero il valore del parametro viene copiato all'interno della variabile che rappresenta

Dettagli

Istruzioni DML di SQL

Istruzioni DML di SQL Istruzioni DML di SQL Pag. 99 par.4 1 Sintassi: Costrutto: INSERT INTO (Inserimento di dati in tabelle) INSERT INTO [(, ,, )] VALUES (, ,

Dettagli

Richiesta pagina PHP (es: index.php)

Richiesta pagina PHP (es: index.php) PHP PHP = personal home page SERVER Richiesta pagina PHP (es: index.php) Server Web (Apache) in ascolto sulla porta 80, si accorge che la pagina richiesta è una pagina PHP in base all'estensione o con

Dettagli

Il linguaggio SQL: viste e tabelle derivate

Il linguaggio SQL: viste e tabelle derivate Il linguaggio SQL: viste e tabelle derivate Sistemi Informativi L-A Home Page del corso: http://www-db.deis.unibo.it/courses/sil-a/ Versione elettronica: SQLd-viste.pdf Sistemi Informativi L-A DB di riferimento

Dettagli

Introduzione alla programmazione in C

Introduzione alla programmazione in C Introduzione alla programmazione in C Testi Consigliati: A. Kelley & I. Pohl C didattica e programmazione B.W. Kernighan & D. M. Ritchie Linguaggio C P. Tosoratti Introduzione all informatica Materiale

Dettagli

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

Il linguaggio SQL: viste e tabelle derivate. Versione elettronica: SQLd-viste.pdf Il linguaggio SQL: viste e tabelle derivate Versione elettronica: SQLd-viste.pdf DB di riferimento per gli esempi Imp Sedi CodImp Nome Sede Ruolo Stipendio Sede Responsabile Citta E001 Rossi S01 Analista

Dettagli

Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C

Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C Università di Roma Tre Dipartimento di Matematica e Fisica Corso di Laurea in Matematica Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C Marco Liverani (liverani@mat.uniroma3.it)

Dettagli

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C Università di Roma Tre Facoltà di Scienze M.F.N. Corso di Laurea in Matematica Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C Marco Liverani (liverani@mat.uniroma3.it)

Dettagli

SMS IN. Rules SMS IN. Rules. Geodrop. Geodrop

SMS IN. Rules SMS IN. Rules. Geodrop. Geodrop SMS IN Rules SMS IN Rules } Geodrop Geodrop SMS In 2.3 Regole per la manipolazione dei messaggi Guida alla scrittura di condizioni complesse Guida alle condizioni complesse v1.0-it, 7 Dicembre 2012 Indice

Dettagli

ROUTINE E PROGRAMMAZIONE

ROUTINE E PROGRAMMAZIONE LEZIONE-TSQL-02 TRIGGER E PROCEDURE (VER03 PAG. 1 / 6 LEZIONE-TSQL-02 TRIGGER E PROCEDURE (VER03 T-SQL PROGRAMMAZIONE PARTE SECONDA ROUTINE E PROGRAMMAZIONE In TSQL è possibile definire alcune routine

Dettagli

2 - Introduzione al linguaggio Java

2 - Introduzione al linguaggio Java 2 - Introduzione al linguaggio Java Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo

Dettagli

SCP - Scuola di Calcolo Parallelo - Scheduler per programmi paralleli. Mattia Sessolo I.T.I.S. V.Volterra San Donà di Piave

SCP - Scuola di Calcolo Parallelo - Scheduler per programmi paralleli. Mattia Sessolo I.T.I.S. V.Volterra San Donà di Piave SCP - Scuola di Calcolo Parallelo - Scheduler per programmi paralleli Mattia Sessolo I.T.I.S. V.Volterra San Donà di Piave 2006-2007 Introduzione Questo programma è stato ideato per facilitare e automatizzare

Dettagli

MongoDB. Un database NoSQL Open-Source

MongoDB. Un database NoSQL Open-Source MongoDB Un database NoSQL Open-Source Database Relazionali I dati sono divisi in tabelle. Ogni tabella è composta da diverse colonne fisse. Le tabelle possono avere riferimenti tra loro. A.C.I.D. I database

Dettagli

Strumenti per lo sviluppo del software

Strumenti per lo sviluppo del software Lo sviluppo del software Strumenti per lo sviluppo del software Lo sviluppo del software è l attività centrale del progetto e ha lo scopo di produrre il codice sorgente che, una volta compilato e messo

Dettagli

LUdeS Informatica 2 EXCEL. Seconda parte AA 2013/2014

LUdeS Informatica 2 EXCEL. Seconda parte AA 2013/2014 LUdeS Informatica 2 EXCEL Seconda parte AA 2013/2014 STAMPA Quando si esegue il comando FILE STAMPA, Excel manda alla stampante tutte le celle del foglio di lavoro corrente che hanno un contenuto. Il numero

Dettagli

OBIETTIVI SPECIFICI DI APPRENDIMENTO

OBIETTIVI SPECIFICI DI APPRENDIMENTO Disciplina:... Anno scolastico: 20.../20... Classe/i :... Docente:... DI APPRENDIMENTO SEZIONE 1 Premesse matematiche Nozioni fondamentali sui sistemi di numerazione Sistemi di numerazione in base diversa

Dettagli

DBMS (Data Base Management System)

DBMS (Data Base Management System) Cos'è un Database I database o banche dati o base dati sono collezioni di dati, tra loro correlati, utilizzati per rappresentare una porzione del mondo reale. Sono strutturati in modo tale da consentire

Dettagli

v. 1.0-7-11-2007 Mistral ArchiWeb 2.0 Manuale utente

v. 1.0-7-11-2007 Mistral ArchiWeb 2.0 Manuale utente v. 1.0-7-11-2007 Mistral ArchiWeb 2.0 Manuale utente Sommario 1. INTRODUZIONE...3 2. DESCRIZIONE FUNZIONALITÀ...3 2.1. LOGIN...3 2.2. SCHEDA ARCHIVIO...3 2.3. GESTIONE ARCHIVI...4 2.3.1 Creazione nuovo

Dettagli

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

Il linguaggio SQL. è di fatto lo standard tra i linguaggi per la gestione di data base relazionali. (Structured Query Language) : Il linguaggio è di fatto lo standard tra i linguaggi per la gestione di data base relazionali. prima versione IBM alla fine degli anni '70 per un prototipo di ricerca (System

Dettagli

Metodologia Classica di Progettazione delle Basi di Dati

Metodologia Classica di Progettazione delle Basi di Dati Metodologia Classica di Progettazione delle Basi di Dati Metodologia DB 1 Due Situazioni Estreme Realtà Descritta da un documento testuale che rappresenta un insieme di requisiti del software La maggiore

Dettagli

Excel. A cura di Luigi Labonia. e-mail: luigi.lab@libero.it

Excel. A cura di Luigi Labonia. e-mail: luigi.lab@libero.it Excel A cura di Luigi Labonia e-mail: luigi.lab@libero.it Introduzione Un foglio elettronico è un applicazione comunemente usata per bilanci, previsioni ed altri compiti tipici del campo amministrativo

Dettagli

Introduzione al software SAS

Introduzione al software SAS Introduzione al software SAS Metodi Quantitativi per Economia, Finanza e Management Esercitazione n 1 Orario di ricevimento Alberto Saccardi alberto.saccardi@nunatac.it asaccardi@liuc.it Lunedì 17-18 Aula

Dettagli

SH.Invoice è un software pratico e completo per la gestione della fatturazione di professionisti e imprese.

SH.Invoice è un software pratico e completo per la gestione della fatturazione di professionisti e imprese. Presentazione: SH.Invoice è un software pratico e completo per la gestione della fatturazione di professionisti e imprese. Il programma si distingue per la rapidità e l elasticità del processo di gestione

Dettagli

Laboratorio di Informatica

Laboratorio di Informatica Laboratorio di Informatica Introduzione a Python Dottore Paolo Parisen Toldin - parisent@cs.unibo.it Argomenti trattati Che cosa è python Variabili Assegnazione Condizionale Iterazione in una lista di

Dettagli

TEORIA sulle BASI DI DATI

TEORIA sulle BASI DI DATI TEORIA sulle BASI DI DATI A cura del Prof. Enea Ferri Cos è un DATA BASE E un insieme di archivi legati tra loro da relazioni. Vengono memorizzati su memorie di massa come un unico insieme, e possono essere

Dettagli

OPERATORE CORSO ISI PORTAL. Riferimenti. Il portale è disponibile all'indirizzo: FRONTEND http://www.sssup.isiportal.com

OPERATORE CORSO ISI PORTAL. Riferimenti. Il portale è disponibile all'indirizzo: FRONTEND http://www.sssup.isiportal.com Pagina 1 CORSO ISI PORTAL OPERATORE Il portale è disponibile all'indirizzo: FRONTEND http://www.sssup.isiportal.com Riferimenti BACKOFFICE ISIPORTAL http://www.sssup.isiportal.com/logon.jsp ISI Portal:

Dettagli

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

Esercitazione query in SQL L esercitazione viene effettuata sul database viaggi e vacanze che prevede il seguente modello E/R: Esercitazione query in SQL L esercitazione viene effettuata sul database viaggi e vacanze che prevede il seguente modello E/R: Si consiglia di creare il data base, inserire i dati nelle tabelle, provare

Dettagli

JAVASCRIPT. Tale file è associato alla pagina web mediante il tag