# Apache Pig

Apache Pig és una plataforma d'alt nivell per crear programes que s'executen a Apache Hadoop. El llenguatge per a aquesta plataforma s'anomena Pig Latin. Pig pot executar els seus treballs Hadoop a MapReduce, Apache Tez o Apache Spark. Pig Latin abstraeix la programació de l'idioma Java MapReduce en una notació que permet programar en MapReduce a un nivell més elevat, similar al de SQL per a sistemes de gestió de bases de dades relacionals. Pig Latin es pot estendre utilitzant funcions definides per l'usuari (UDFs) que l'usuari pot escriure en Java, Python, JavaScript, Ruby o Groovy i després cridar directament des del llenguatge.

## Història

Apache Pig va ser desenvolupat originalment a Yahoo Research al voltant del 2006 perquè els investigadors tinguessin una manera ad hoc de crear i executar treballs de MapReduce en conjunts de dades molt grans. Al 2007 es va traslladar a la Fundació Apache Software.
| Versió | Data original de llançament | Darrera versió | Data de llançament |
| Una versió antiga, sense suport: 0.1 | 2008-09-11 | 0.1.1 | 2008-12-05 |
| Una versió antiga, sense suport: 0.2 | 2009-04-08 | 0.2.0 | 2009-04-08 |
| Una versió antiga, sense suport: 0.3 | 2009-06-25 | 0.3.0 | 2009-06-25 |
| Una versió antiga, sense suport: 0.4 | 2009-08-29 | 0.4.0 | 2009-08-29 |
| Una versió antiga, sense suport: 0.5 | 2009-09-29 | 0.5.0 | 2009-09-29 |
| Una versió antiga, sense suport: 0.6 | 2010-03-01 | 0.6.0 | 2010-03-01 |
| Una versió antiga, sense suport: 0.7 | 2010-05-13 | 0.7.0 | 2010-05-13 |
| Una versió antiga, sense suport: 0.8 | 2010-12-17 | 0.8.1 | 2011-04-24 |
| Una versió antiga, sense suport: 0.9 | 2011-07-29 | 0.9.2 | 2012-01-22 |
| Una versió antiga, sense suport: 0.10 | 2012-01-22 | 0.10.1 | 2012-04-25 |
| Una versió antiga, sense suport: 0.11 | 2013-02-21 | 0.11.1 | 2013-04-01 |
| Una versió antiga, sense suport: 0.12 | 2013-10-14 | 0.12.1 | 2014-04-14 |
| Una versió antiga, sense suport: 0.13 | 2014-07-04 | 0.13.0 | 2014-07-04 |
| Una versió antiga, sense suport: 0.14 | 2014-11-20 | 0.14.0 | 2014-11-20 |
| Una versió antiga, sense suport: 0.15 | 2015-06-06 | 0.15.0 | 2015-06-06 |
| Una versió antiga, sense suport: 0.16 | 2016-06-08 | 0.16.0 | 2016-06-08 |
| La darrera versió estable: 0.17 | 2017-06-19 | 0.17.0 | 2017-06-19 |
| Llegenda:Versió antigaVersió antiga, amb suportDarrera versióDarrera versió preliminarProper llançament ||||

### Nomenclatura

Pel que fa a la denominació del llenguatge de programació Pig, el nom es va escollir arbitràriament i es va quedar perquè era memorable, fàcil d'escriure i de novetat.
   La història diu que els investigadors que treballaven en el projecte inicialment es referien a ell simplement com "la llengua". Finalment, necessitaven posar-li algun nom. De sobte a un investigador se li va ocórrer Pig i ho va suggerir, i el nom es va quedar. És extravagant, però fàcil d'escriure i de recordar. Tot i que alguns han insinuat que el nom sona tossut o estúpid, ens ha proporcionat una nomenclatura entretinguda, com ara el Pig Latin per a la llengua, Grunt per a la closca, i PiggyBank per al repositori compartit CPAN.
    — Alan Gates, Daniel Dai, "What Is Pig?", Programació Pig, 2a Edició (novembre 2017)

## Exemple

A continuació es mostra un exemple del programa Compta Lletre en el Pig Latin:
El programa anterior generarà tasques executables paral·leles que es poden distribuir a través de diverses màquines en un clúster Hadoop per comptar el nombre de paraules en un conjunt de dades com totes les pàgines web a Internet.

## Característiques

* Llenguatge de programació Pig Latin.
* Suport per a múltiples fonts de dades, com HDFS, Amazon S3 i Google Cloud Storage.
* Integració amb altres eines de Big Data com Apache Hive, Apache Spark i Apache Storm.
* Optimitzador de consultes per millorar el rendiment i reduir el temps d'execució.
* Suport per a diferents tipus de dades, incloent dades estructurades i no estructurades.
* Biblioteca de funcions integrades per manipular i transformar dades.
* Facilitat d'ús per a usuaris sense experiència en programació en Hadoop o Java.
* Comunitat activa de desenvolupadors i recursos disponibles en línia per suport i aprenentatge.

## Pig vs SQL

En comparació amb SQL, Pig
* té un model relacional niat
* fa servir una avaluació tardana
* utilitza extreure, transformar, carregar (ETL)
* és capaç d'emmagatzemar dades en qualsevol moment durant una canonada
* declara els plans d'execució
* Suporta les divisions de canonades, permetent així que els fluxos de treball avancin al llarg de DAGs en lloc de canonades estrictament seqüencials.
D'altra banda, s'ha argumentat que els DBMS són substancialment més ràpids que el sistema MapReduce una vegada que les dades es carreguen, però que la càrrega de les dades triga considerablement més en els sistemes de base de dades. També s'ha argumentat que els RDBMS ofereixen suport de serie per a l'emmagatzematge de columnes, treballant amb dades comprimides, índexs per a un accés eficient a les dades aleatòries i tolerància a errors a nivell de transacció.
Pig Latin és procedimental i encaixa de forma molt natural en el paradigma de la canonada mentre que SQL és declaratiu. En SQL, els usuaris poden especificar que les dades de dues taules s'han d'unir, però no quina implementació d'unió utilitzar (podeu especificar la implementació de JOIN a SQL, per tant "... per a moltes aplicacions SQL, l'escriptor de consultes pot no tenir prou coneixement de les dades o suficient experiència per especificar un algorisme de join apropiat"). Pig Latin permet als usuaris especificar una implementació o aspectes d'una implementació que s'utilitzaran en l'execució d'un script de diverses maneres. En efecte, la programació Pig Latin és similar a l'especificació d'un pla d'execució de consultes, facilitant als programadors controlar explícitament el flux de la seva tasca de processament de dades.
SQL s'orienta al voltant de consultes que produeixen un únic resultat. SQL maneja els arbres de forma natural, però no té cap mecanisme per dividir un flux de processament de dades i aplicar diferents operadors a cada sub-stream. L'escriptura Pig Latin descriu un graf acíclic dirigit (DAG) més que un pipeline.
La capacitat de Pig Latin d'incloure codi d'usuari en qualsevol punt de la canonada és útil per al desenvolupament de la canonada. Si s'utilitza SQL, les dades primer s'han d'importar a la base de dades, i llavors el procés de neteja i transformació pot començar.

## Vegeu també

* Apache Hive
* Sawzall — eina similar de Google

## Referències

* 1 2 «Welcome to Apache Pig!». [Consulta: 20 febrer 2023].
* ↑ «[PIG-4167 Initial implementation of Pig on Spark - ASF JIRA]». [Consulta: 20 febrer 2023].
* ↑ «User Defined Functions». [Consulta: 20 febrer 2023].
* ↑ «Pig – The Road to an Efficient High-level language for Hadoop | hadoopnew - Yahoo», 03-02-2016. Arxivat de l'original el 2016-02-03. [Consulta: 20 febrer 2023].
* ↑ «Pig into Incubation at the Apache Software Foundation | hadoopnew - Yahoo», 03-02-2016. Arxivat de l'original el 2016-02-03. [Consulta: 20 febrer 2023].
* ↑ «Apache Pig Releases». [Consulta: 13 març 2019].
* ↑ «1. What Is Pig? - Programming Pig, 2nd Edition [Book]» (en anglès). [Consulta: 20 febrer 2023].

## Enllaços externs

* Web oficial