Magasszintű nyelvek MR alapokon

Slides:



Advertisements
Hasonló előadás
2012. tavaszi félév Vitéz Gergely. A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele.
Advertisements

© Kozsik Tamás Adatbáziskezelés •Relációs adatbáziskezelők •Noha a Java objektum-elvű, egyelőre nem az objektum-elvű adatbáziskezelőket támogatja.
Adatbázis rendszerek I
Anyagadatbank c. tárgy gyakorlat
Adatbázisok SQL. TARTALOM Szijártó M.2 Témakörök  Az SQL tulajdonságai  A műveletek fajtái  Objektum-műveletek  Lekérdezések Tulajdonságok és műveletek.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Adatbázisok gyakorlat 8. gyakorlat SQL alapok.
1 Informatikai Szakképzési Portál Adatbázis kezelés Az SQL nyelv elemei.
Elmaradás.  0 Számjegy. Ebben a pozícióban egyetlen számjegyet kell megadnia.  9 Számjegy. Ebben a pozícióban egyetlen számjegyet lehet megadni, nem.
2012. tavaszi félév Vitéz Gergely. A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele.
1 Informatikai Szakképzési Portál Adatbázis kezelés DCL – Adatvezérlő nyelv.
Delphi programozás alapjai
Adatbázis alapú rendszerek
5. GYAKORLAT SQL CREATE TABLE, aktualizálás. S QL Structured Query Language A relációs adatbáziskezelés szabványos nyelve Nem algoritmikus, de beépíthető.
– Adattáblák & adatok kezelése – Tarcsi Ádám január Adatbázis gyakorlat.
megismerése, mintaadatbázis létrehozása
HADOOP Korszerű Adatbázisok Elérés, Belépés Elérés: eszakigrid109.inf.elte.hu Belépés: felhasználó/jelszó: neptun-kód Manager oldalak:
SQL – DQL (Data Query Language ) adat lekérdezések
Hadoop Gyakorlat 1 Korszerű adatbázisok Parancsok Listázás – hadoop fs –ls Kiírja egy fájl tartalmát – hadoop fs –cat Betöltés – hadoop fs –put.
Adatbázis alapú rendszerek
Adatbázis rendszerek II.
Készítette: Sárközi Anikó
Adatbázis-kezelés ACCESS program:
Delphi programozás alapjai Nagyváradi Anett PTE PMMK MIT.
2006. október 2.Markó Tamás, PTE TTK1 Az Oracle SQL 5. Nézettáblák létrehozása, módosítása és törlése.
VFP programozása report készítése menü készítése dinamikus elemek
SQL92 lehetőségek KL A tábla B tábla C view adatok VIEW működése utasítás: SELECT.. FROM A,B … SELECT.. FROM C Az adatok a hivatkozáskor állítódnak elő.
ADATBÁZISOK
ADATBÁZISOK
Adattáblák létrehozása, módosítása, tranzakciók, megszorítások Rózsa Győző.
SQL Server 2005 relációs adattárház technológiák
Hadoop Gyakorlat 2 Korszerű adatbázisok Parancsok Listázás – hadoop fs –ls Kiírja egy fájl tartalmát – hadoop fs –cat Betöltés – hadoop fs –put.
Nézettáblák létrehozása, módosítása és törlése
PHP I. Alapok. Mi a PHP? PHP Hypertext Preprocessor Szkriptnyelv –Egyszerű, gyors fejlesztés –Nincs fordítás (csak értelmező) Alkalmazási lehetőségek:
PHP III. Fájlok, űrlapok.
- adatbázisséma definiálása (DDL) Data Definition Languages, - adatok aktualizálása (DML),Data Maniputaion Language - lekérdezési lehetőségek (DML) Data.
SQL. SQL = Structured Query Language (= struktúrált lekérdező nyelv). A relációs adatbázis-kezelés szabványos nyelve. Nem algoritmikus nyelv, de algoritmikus.
Az SQL nyelv alapjai.
DML. Új rekord beszúrása: INSERT INTO tábla (oszlop1,oszlop2,…) VALUES (érték1,érték2,…); Rekord módosítása: UPDATE tábla SET oszlop = érték WHERE feltétel;
DDL – Adatdefiníciós nyelv
Adatbázis adminisztrátori ismeretek
Adattáblák létrehozása, módosítása, tranzakciók, megszorítások Rózsa Győző.
2012. tavaszi félév Vitéz Gergely. A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele.
A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele a minimum elégséges érdemjegynek!
Adatbázis-kezelés SQL-lel. SQL SQL = Structured Query Language – Strukturált Lekérdezőnyelv Relációs adatbázis-kezelők lekérdezési nyelve. Alapjait az.
Adatbázis-kezelés SQL-lel
Felhasználók és jogosultságok
SQL DDL DATA DEFINITION LANGUAGE. Táblák létrehozása CREATE TABLE táblanév ( oszlopnév1 típus(méret) /DEFAULT érték/ /NOT NULL/, oszlopnév2 típus(méret)
Készítette: Tóth Ervin
Az SQL nyelv. SQL Az SQL utasításait két fő csoportba szokták sorolni: DDL (= Data Definition Language): adatstuktúra definiáló utasítások. DML (= Data.
Készítette: Lipp Marcell
SQL-Structured Query Language. Parancs(utasítás) csoportok CREATE - táblák létrehozása ALTER – táblák módosítása DROP – táblák törlése DDL –Data Definition.
SQL.
XML fejlesztések TSQL fejlesztések Tábla paraméter SQLCLR fejlesztések 8k limit feloldása Több paraméteres UDA-ek Ordered UDF-ek Entity Framework ADO.NET.
ORACLE ORDBMS adminisztrációs feladatok 3. rész dr. Kovács László 2004.
1 Sramó András Adatbázis-technológia V. előadás Adatbázis-technológia 5. előadás Az SQL.
– SQL 3: SELECT - 1. – Tarcsi Ádám, január 31. Adatbázis gyakorlat.
Adatbázis-kezelés Tarcsi Ádám január. 15. MySQL és PHP.
– SELECT - 2. – Tarcsi Ádám március Adatbázis gyakorlat.
Tarcsi Ádám, Adatbázis gyakorlat – Adattáblák – Tarcsi Ádám, január.
Bevezetés A MYSQL szintaxisa Táblák, adatok kezelésének alapjai
Ma az un. Relációs adatmodelleket használjuk.
5. gyakorlat Fleiner Rita.
Webprogramozó tanfolyam
SQL. SQL jellemzői Nem algoritmikus (nem tartalmaz algoritmikus szerkezeteket: ciklus, eljárás, elágazás) Nem rekurzív (önmagát nem hívhatja) Halmazorientált.
Adatbázis rendszerek I
Adatbázis-kezelés 3-4. Adatok lekérdezése utasítás általános formája SELECT [ALL/DISTINCT] {*/, …, } FROM [ ], …, [ ] [WHERE GROUP BY, …, HAVING ORDER.
Hadoop Gyakorlat 1 Korszerű adatbázisok.
Ha(doop) akkor adatok... Hadoop és Node.JS adatfeltöltő (BME – NYME) Szalai László, Major Kálmán TÁMOP 4.1.1/C-12/1/KONV
Adatbázisok SQL.
Logisztikai projekt - gyakorlat Adatbázis-elmélet
Előadás másolata:

Magasszintű nyelvek MR alapokon Hive és Pig Kazi Sándor Magasszintű nyelvek MR alapokon 2014.

MapReduce – Hive / Pig Teljes workflow egyben Nem nekünk kell a folyamatok egyes belső állapotait kezelni Optimalizációs lehetőség MapReduce jobok belseje, sorrend Akár a teljes feladat ismert Deklaratív(abb) környezet Eltolódik a programozási feladat hangsúlya Az a kérdés, mit szeretnénk Kevésbé kérdés (de néha kérdés), hogy pontosan hogyan is HiveQL és Pig Latin Megjelenhetnek sémainformációk (félig-meddig) Típus megkötések Tárolási formátumok Jogosultságok

Mikor melyik? – Hive / Pig Mindkettő MR framework feletti A Hive jó nekünk, ha Lekérdezésekhez Az adat már betöltve, ennek egy struktúrált kivonata kell Adott kérdések megválaszolására SQL-ből készülünk átszokni A HiveQL-nél alacsony a belépési küszöb A Pig jó nekünk, ha ETL (Extract-Transform-Load) folyamatokhoz Adatelőkészítésre elemzés előtt Hosszú műveletsorok véghezvitelére Gyakran együtt használják őket Nem teljesen váltják ki egymás funkcionalitásban Pl.: Yahoo, Facebook

Tartalom Alapok Architektúra Kliensek Csomagban Egyéb Adatbetölés Internal/External Adattípusok Formátum Impala HiveQL DDL DML Lekérdezések Mintavételezés Nézetek Indexek, Végrehajtás Függvények Streaming Jogosultságok Tervezés, Konfiguráció

Alapok – Mi a Hive Adattárház megvalósítás Hadoop felett A MapReduce framework felett Műveletektől függően lehet MR nélkül Séma csak olvasáshoz (OLAP, nem OLTP) Félstruktúrált adatokon is Alapvetően soralapú tárolás Mit nem ad a Hive Nem biztosít gyors válaszokat ad-hoc lekérdezésekre Nincs rekord szintű insert/update/delete Saját lekérdező nyelv (HiveQL) SQL-hez hasonló szintaxis Magasszintű, deklaratív Az optimizer lényegében a MapReduce jobbal dolgozik

Alapok – Architektúra Metastore Metaadatok az adatokról Metadatok az adatbázisról Táblák Típusos oszlopok Összetett adatstruktúrák is (0NF) Partíciók Statikus illetve dinamikus partíciók Dinamikus partíciók alaphelyzetben kikapcsolva Gyorsítja a partíciókra irányuló lekérdezéseket Vödrök (Buckets) Hash partíciók Gyorsítja a join műveleteket

Hive – Kliensek CLI: Command Line Interface HWI: Hive Web Interface Editor, History, Table/Database browser JDBC, ODBC, Thrift Adatbázishozzáférés sztandard interfészeken Hue (Beeswax) – <server>:8000 (default port) Editor (syntax highlighting, save/load), History, Table/Database browser Qubole – Big Data as a Service Query Optimizer (Hive): cache, job optmizier Aqua Data Studio Vizuális query építés, import/export, stb. FluidShell – saját szkriptkörnyezet

Adatbetöltés – In/External Internal Adatok ténylegesen a Hive struktúrájában Adatstruktúra törlésekor az adat is elveszik CREATE TABLE <name> …; LOAD DATA INPATH <path> [OVERWRITE] INTO TABLE <name>; External HDFS, mint külső adathely Az adatok a helyükön maradnak Adatstruktúra törlésekor csak az absztrakció tűnik el CREATE EXTERNAL TABLE <name> …;

Adatbetöltés – Adattípusok Leírás Méret Példa TINYINT Egész 1 B 99, 99Y SMALLINT 2 B 99, 99S INT 4 B 99 BIGINT 8 B 99, 99L BOOLEAN Bool 1 b True FLOAT Lebegőpontos szám 3.14159 DOUBLE DECIMAL Lebegőpontos decimális szám (max 38) 16 B 40004, 1E14 STRING Karaktersorozat … 'String', "String" VARCHAR Karaktersorozat méretmaximummal CHAR Karakter TIMESTAMP Időbélyeg (10-9 s) DATE Dátum (1 day) BINARY Bittömb STRUCT Struktúra struct<…, …> MAP Kulcs-érték struktúra map<'k', 'v‘, …> ARRAY Tömb array<…> UNIONTYPE Típusok összeolvasztása (OR művelete) uniontype<…, …>

Adatbetöltés – Formátum Háromféle határoló karakter (delimiter) Sor (default: soremelés, \n) Oszlop (default: ^A, \001) Összetett struktúra (default: ^B, \002) Map kulcs-érték (default: ^C, \003) CREATE TABLE <name> (…) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\001' COLLECTION ITEMS TERMINATED BY '\002' MAP KEYS TERMINATED BY '\003' LINES TERMINATED BY '\n' STORED AS TEXTFILE; De van más ROW FORMAT lehetőség is (SerDe)…

Cloudera Impala Impala Elosztott adattárház, nem MR felett MPP az HBase és a HDFS adatain SQL Interaktív lekérdező engine Open source Disztribúciókban: Cloudera, MapR, AWS Kapcsolódó Hive jövő Hive on Spark: HIVE-7292 jira Stinger.next: from Hive to Hadoop-SQL Tehát a Hive és az Impala egyirányba mozognak Csökken az együttes létjogosultságuk Apache Drill

HiveQL – Változók Négy namespace hivevar --define key=value --hivevar key=value hiveconf --hiveconf key=value system env (bent read only) -- értékadás SET [<namespace>:]<key>=<value>; -- lekérdezés SET [<namespace>:]<key>; -- alapértelmezett namespace: hivevar

HiveQL – DDL (database) CREATE DATABASE [IF NOT EXISTS] <name> [LOCATION <path>] [COMMENT <comment>]; ALTER DATABASE <name> SET DBPROPERTIES (<key> = <value>); DROP DATABASE [IF EXISTS] <name> [CASCADE]; DESCRIBE DATABASE [EXTENDED] <name>; SHOW DATABASES [LIKE <pattern>]; USE <name>; SHOW TABLES [IN <database>];

HiveQL – DDL (table) CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [<database>.]<table>( <column> <type> [COMMENT <comment>], …) [COMMENT <comment>] [TBLPROPERTIES (<key> = <value>, …)] …; ALTER TABLE [<database>.]<table> …; DROP TABLE [IF EXISTS] [<database>.]<table>; CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [<database>.]<table> LIKE [<database>.]<table>; CREATE [EXTERNAL] TABLE AS SELECT …; DESCRIBE [EXTENDED] [<database>.]<table>; SHOW PARTITIONS <partitions> PARTION(<column>=<value>);

HiveQL – DDL (table++) További klózok a CREATE TABLE után: PARTITIONED BY (<column> <type>, …) statikus/dinamikus partícionálás (az oszloplistától külön) CLUSTERED BY (<column>, …) INTO <b> BUCKETS szétdarabolás értékkészlet szerint vödrökbe ROW FORMAT <format> rekordformátum (DELIMITED, SERDE <class>) STORED AS <format> tárolás formátuma (TEXTFILE, …, INPUTFORMAT <format>, …) STORED BY <store> Hive storage handler osztály (SERDE) LOCATION <path> az adat helye (mentés helye) WITH HINTS <name>=<value> optimalizációs hintek

HiveQL – DML (load, insert) LOAD DATA [LOCAL] INPATH <path> [OVERWRITE] INTO TABLE <table> [PARTITION (<column>[=<value>], …)]; -- hive.exec.dynamic.partition INSERT [OVERWRITE] TABLE <table> [PARTITION (<column>[=<value>], …)] SELECT …; INSERT [OVERWRITE] LOCAL DIRECTORY '/tmp/ca_employees' FROM <table> [<alias>] INSERT … [INSERT …] …;

HiveQL – Lekérdezések Klózok SELECT FROM WHERE GROUP BY HAVING oszlop, számított érték, alias CASE WHEN <bool> THEN <value> … ELSE … END FROM tábla, belső select + alias, JOIN, SEMI JOIN, UNION ALL WHERE CAST(<ertek> AS <tipus>), LIKE, RLIKE GROUP BY HAVING DISTRIBUTE BY / CLUSTER BY partitioning, partitioning + per reducer sort ORDER BY / SORT BY total order, per reducer sort LIMIT

HiveQL – Mintavételezés Mintavételezni nagyon fontos lehet: A fejlesztési idő rövidítésére (tesztelés gyorsítása) Adatelemzési módszerek támogatására … SELECT … FROM <table> TABLESAMPLE(<sample>) <sample> lehetőségek: BUCKET <n> OUT OF <N> ON rand() BUCKET <n> OUT OF <N> ON <oszlop> <percent> PERCENT HDFS blokknál kisebbet nem tudunk visszaadni

HiveQL – Nézetek -- nem materializált CREATE VIEW [IF NOT EXISTS] <view> AS [COMMENT <comment>] [TBLPROPERTIES (<key>=<value>, …)] SELECT …; ALTER VIEW <view> SET TBLPROPERTIES (<key>=<value>, …); DROP VIEW [IF EXISTS] <view>; SHOW TABLES [IN <database>]; DESCRIBE [EXTENDED] [<database>].<view>; CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [<database>.]<table> LIKE [<database>.]<view>;

HiveQL – Indexek CREATE INDEX <index> ON TABLE <table>(<column>, …) [<splitting>] AS {'HBASE' | <handler>} [WITH DEFERRED REBUILD] [IDXPROPERTIES (<name>=<value>, …)] [COMMENT <comment>] [IN TABLE <indextable>] [PARTITIONED BY (<column>, …)]; ALTER INDEX <index> ON TABLE <table> [PARTITION (<column>=<value>, …)] REBUILD; DROP INDEX [IF EXISTS] <index> ON <table>; SHOW [FORMATTED] INDEX EXPLAIN [EXTENDED] SELECT …;

HiveQL – Függvények SHOW FUNCTIONS; DESCRIBE FUNCTION [EXTENDED] <func>; ADD JAR <path>; CREATE TEMPORARY FUNCTION <func> AS <class>; DROP TEMPORARY FUNCTION [IF EXISTS] <func>; ADD FILE <file>; CREATE TEMPORARY MACRO <name> (<value> <type>) …; 3 User Defined Function (UDF) flag: Deterministic (true), Stateful (false), Distinctlike (false) Depivotálás: explode(), LATERAL VIEW [OUTER]

HiveQL – Streaming SELECT TRANSFORM (<columns>) USING <program> AS <columns> FROM …; Pl.: SELECT TRANSFORM (column1, column2) USING '/bin/cat' AS newcolumn1, newcolumn2 FROM a;

HiveQL – Jogosultságok SET hive.security.authorization.enabled=true; SET system:user.name; SHOW GRANT <entity> [ON …]; <entity>: USER <user>, GROUP <group>, ROLE <role> CREATE ROLE <role>; GRANT ROLE <role> TO <entity>; REVOKE ROLE … FROM …; GRANT <priv> TO <entity>; <priv>: ALL, ALTER, CREATE, DROP, INDEX, LOCK, SELECT, SHOW_DATABASE, UPDATE SET TBLPROPERTIES(<name>=<value>) SET TBLPROPERTIES("PARTITION_LEVEL_PRIVILEGE"="TRUE") hive.security.authorization.createtable.owner.grants hive.security.authorization.createtable.user.grants

Hive – Tervezés Table-by-Day minta: CREATE TABLE <table> … PARTITIONED BY (<column>, …); ALTER TABLE <table> ADD PARTITION(<column>=<value>, …); Lehetőleg ne normalizáljunk: Eleve nem csak relációs adatokat tudunk tárolni Nincs UPDATE, nincs referenciális integritás garancia :( Többszörös olvasás: a FROM klóz előrehozása, több művelet együttes felsorolása Tömörítés: Szinte mindig érdemes Oszlop alapú tárolás: Ha nagyon sok az oszlop vagy kicsi az értékkészlet RCFile fájltípus

Hive – Konfiguráció hive.cli.print.current.db={true|false} Az aktuálisan kiválasztott adatbázis neve a konzolon. hive.stat.retries.max=<number> Maximum újrapróbálkozások száma. hive.stat.retries.wait=<millisec> Két újrapróbálkozás közötti idő. hive.mapred.mode={strict|nonstrict} Pontosabb illeszkedés elvárása… hive.enforce.bucketing={true|false} Szeletelés automatizálása íráskor (default: false). mapred.map.tasks.speculative.execution={true|false} Spekulatív Map indítás. mapred.reduce.tasks.speculative.execution={true|false} Spekulatív Reduce indítás.

Apache Pig

Tartalom Pig Mi a Pig Belső működés Interfész Grunt, Hue ElephantBird Pygmalion, Piglet, PigPy DataFu, PiggyBank Adatmodell Típusok Sémák Pig Latin Alapok Input / Output Relációs műveletek Join UDF Szerkezetek Streaming MapReduce Beállítások Preprocesszor Tesztelés

Alapok – Mi a Pig Adatkezelő szkriptnyelv A MapReduce framework felett Félstruktúrált adatokon is, sokféle adattípuson A MapReduce feletti natív párhuzamosíthatóság a cél Hadoop ETL folyamatok tipikus platformja Mit nem ad a Pig Nem SQL, nem egy IDE Nincs rekord szintű insert/update/delete Saját szkriptnyelv (Pig latin) Referenciák beágyazása, optimalizálás Célok Pigs eat anything, Pigs can live (almost) anywhere Pigs are domestic animals ( ~ user friendly) Pigs fly ( ~ gyors)

Alapok – Belső működés Kétféle végrehajtási mód Local mode java -cp $PIGDIR/pig.jar org.apache.pig.Main -x local script.pig Lehetnek Warning-ok az outputban Prototípus gyártáshoz MapReduce mode java -cp $PIGDIR/pig.jar:$HCONF org….Main script.pig Végrehajtás szakaszai: Input: Pig latin kód (data flow language) Irányított, körmentes gráf MapReduce workflow

Alapok – WordCount

Interfészek – Grunt és Hue Grunt CLI – interaktív parancssoros interfész (pig parancs) Pig parancsok, HDFS utasítások, job-menedzsment: cat, clear, fs, sh, cd, cp, copyFromLocal, copyToLocal, dump, describe, aliases, explain, help, history, kill, ls, mv, mkdir, pwd, quit, register, rm, rmf, set, illustrate, run, exec, scriptDone Hue Web felület Hortonworks: 8000-s port Cloudera: 8888-s port Syntax highlighting Mentés / Betöltés (szkriptek) PIG Helper JAR feltöltés

Interfészek – Egyéb ElephantBird Mindenféle Input- és OutputFormatok Pig, Hive, HBase, stb. Twitter által open source-olt Pygmalion Apache Cassandra integráció Piglet Ruby integráció Pigpy Python integráció PiggyBank / DataFu Pig UDF (user defined function) kollekciók AWS AWS-en is elérhető

Adatmodell – Típusok Skalár típusok Int 10 long 1000L float 6.9f 3.2e-3f double 6.9 3.2e-3 chararray 'string' 'elso\nmasodik\u0001' bytearray - Komplex típusok map: (chararray, value) dictionary… a value bytearray-ként ['nev'#'Antal', 'foglalkozas'#'mosogepszerelo'] tuple: fix méretű, rendezett elemhalmaz ('bob', 92) bag: tuple-ök halmaza {('alice', 532), ('bob', 92), …} NINCS set típus NULL koncepció, mint az SQL-ben

Adatmodell – Sémák Adattípusok megadására van lehetőség (séma) dataset = load 'dataset' as (x:chararray, y:chararray, z:float); Adattípusok megadására van lehetőség (séma) Bármilyen tuple-re megadható Megadható bármilyen tuplehalmazra is (pl.: bag) Ha nem adjuk meg akkor a legjobb tippjeivel dolgozik Az alapvető szám típus a double Egyszerű típusokon: as (x:<type>) Komplex típusokon as (x:map[]) as (x:map[int]) as (x:tuple()) as (x:tuple(y:int, z:int)) as (x:bag{}) as (x:bag{<tuplenev>:(y:int, z:int)}) Castolás (csonkolás lehetséges; null lehetséges) Ahogy procedurálisan megszokott: (int)x mdata = load 'mydata' using HCatLoader();

Pig Latin – Alapok Az utasításokat ;-vel zárjuk Aliasokat / referenciákat használunk A = load 'sample_table' (column1, column2, column3); B = filter A by column3 > 0; C = foreach B generate UPPER(column1); dump C; Lehet ugyanazt a nevet is használni, de nem ajánlott Rontja az olvashatóságot Nem tudja segíteni a memóriakezelést Angol betűvel kezdődő alfanumerikus nevek (_ is megengedett) Case sensitive is, meg nem is Kulcsszavak NEM Relációk, mezők, referenciák és függvények nevei IGEN SQL-stílusban kommentelhetünk -- után a sorkomment /* */ között a blokk-komment

Pig Latin – Input / Output LOAD <file> [USING <loadfunc>] [AS <schema>]; <file>: abszolút vagy relatív ('home/<username>'-ből) path, object <schema>: sémainformációk (oszlopnevek, típusok) <loadfunc>: valamilyen betöltési függvény PigStorage: csv, tsv beolvasás (default) TextLoader: text beolvasás HBaseStorage: hbase-ből olvasás … STORE <alias> INTO <file> [USING <storefunc>]; DUMP <alias>; -- felületre DESCRIBE <alias>; -- séma kiírása Alias szinte bármi elé mehet: [<alias> = ] Globok: ?, *, [abc], [a-z], [^abc], [^a-z], \*, {ab, cd}

Pig Latin – Relációs 1/2 FOREACH <alias> GENERATE <genexpr>; -- minden elemre <genexpr>: Oszlopok, oszlopintervallum (oszlop1..oszlop2), pozíciók ($0) Függvény eredménye (UDF, ?:, aritmetika)  névtelen lesz Átnevezett oszlop, függvény, stb. (<expr> AS <name>) FILTER <alias> BY <filterexpr>; -- szűrés <filterexpr>: Hasonlító operátorok ==, !=, >, <, >=, <=, IS [NOT] NULL Reguláris kifejezés: [NOT] <oszl> MATCHES <regexp> GROUP <alias> BY <groupexpr>; -- csoportosítás <groupexpr>: Kifejezés ~ <genexpr> Kifejezések zárójelben, vesszővel elválasztva Tipikusan FOREACH és aggregáló függvények társaságában

Pig Latin – Relációs 2/2 ORDER <alias> BY <orderexpr>; -- rendezés <orderexpr>: akár több feltételt is felsorolva Oszlop és ASC vagy DESC DISTINCT <alias>; -- ismétlődésszűrés JOIN <joinon1> [<jointype>], <joinon2> …; -- illesztés <joinon*>: <alias> BY <cols>, <cols>: kb. <groupexpr> <jointype>: a szokásos, az illesztés típusa LIMIT <alias> <num>; -- sorszámlimit Jelenleg nem azt csinálja, amit a head parancs… :( SAMPLE <alias> <ratio>; -- véletlen mintavétel <cmd> PARALLEL <num>; -- reducerek száma <cmd> bármilyen RANK <alias> BY <orderexpr>; -- sorszámozás

Pig Latin – UDF Vannak beépített function-ök Csomó hasznos dolog már library-ből elérhető PiggyBank, DataFu UDF = User Defined Function Java class használata REGISTER <jarpath>; … <package>.<class>(…) …; Névrövidítés definícióval: DEFINE <name> <package>.<class>(); Statikus java függvények: DEFINE <name> InvokeFor<javarettype>(<sfunc>, <param>); Python UDF használat példa (export PYTHONPATH=…): REGISTER example.py USING jython AS bballudfs; … bballudfs.example(…) …

Pig Latin – Szerkezetek FOREACH … Flatten: lista kisimítása (~ keresztszorzat, Hive explode()) “?:” operátorral és az isEmpty()-vel kezelhető az üres lista is Beágyazott foreach daily = LOAD 'NYSE_daily' AS (exchange, symbol); grpd = GROUP daily BY exchange uniqcnt = FOREACH grpd { sym = daily.symbol; uniq_sym = DISTINCT sym; GENERATE group, COUNT(uniq_sym);} JOIN … USING <mode>; <mode>: 'replicated', 'skewed', 'merge', … COGROUP <alias1> BY <cols1>, <alias2> BY <cols2> …; UNION <aliases>; -- konkatenálás (!) CROSS <aliases>; -- keresztszorzat (!!!)

Pig Latin – Streaming STREAM <alias> THROUGH <streamprog> [AS <schema>]; divs = LOAD 'table' AS (a, b); highdivs = STREAM divs THROUGH `example.pl` AS (a, b); Rövid név megadása DEFINE-nal DEFINE ex `example.pl` ship('example.pl'); highdivs = STREAM divs THROUGH ex AS (a, b); Egyéb szükséges fájlok átadása DEFINE ex `example.pl` ship('example.pl', 'other.pm'); Distributed Cache DEFINE ex `ex.pl` cache('/data/shared/data#exdata'); Input, Output DEFINE ex `ex.pl abc def` input('abc') output('def');

Pig Latin – MapReduce Alap MapReduce hívás MAPREDUCE <jarfile> STORE <alias> INTO 'input' LOAD 'output' AS <alias>; A szokásos LOAD és STORE paraméterek működnek… Speciális paraméterezés LOAD 'output' AS <alias> `<package>.<class> input output`;

Pig Latin – Beállítások SET <param> <value>; SET default_parallel 3; SET job.name my_job; users = LOAD 'users'; … A partitioner alaphelyzetben felüldefiniálható Kivéve: order és skew join esetében REGISTER partpkg.jar; users = LOAD 'users' AS (id, age, zip); grp = GROUP users BY id PARTITION BY partpkg.part PARALLEL 10;

Pig Latin – Preprocesszor Paraméterbehelyettesítés yesterday = FILTER daily BY date == '$DATE'; Ha nincs megadva futtatáskor, hibát kapunk… pig -p DATE=2014-12-18 daily.pig Paramfile: <param>=<value> sorok, # a kommentjel Makrók DEFINE <name> (<params>) RETURNS <resalias> {<body>}; A makró törzsében a paraméterek (out is) neve elé $-jelet kell írni Előnézet is van a -dryrun paramétert használva… Pigception [SET pig.import.search.path '<path1>[,…]';] IMPORT '<path>'; Kódbehelyettesítés, egy közös namespace Egy fájl csak egyszer lehet (makró kell a töbszöröshöz)

Pig – Tesztelés A sémát tudjuk ellenőrizni egy-egy aliasnál DESCRIBE <alias>; Ha az nem futásidőben derül ki A Pig igyekszik elrejteni a MapReduce részleteket, de: ASCII-art végrehajtási terv: pig -x local -e 'explain -script e.pig' Grafikus végrehajtási terv: … -dot -out e.dot Ránézhetünk az előálló adatok struktúrájára is pig -e 'illustrate -script i.pig' v0.8-től kezdődően minden futtatás végén statisztkákat is kapunk Optimalizációs feature-ök kikapcsolhatók a -t <name> paraméterrel SplitFilter, MergeFilter, PushUpFilter, PushDownForEachFlatten, ColumnMapKeyPrune, LimitOptimizer, AddForeach, MergeForeach, LogicalExpressionSimplifier, All