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

Hive és Pig

Embed Size (px)

DESCRIPTION

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 - PowerPoint PPT Presentation

Citation preview

Page 1: Hive  és  Pig

Kazi SándorMagasszintű nyelvek MR

alapokon

Hive és Pig

2014.

Page 2: Hive  és  Pig

MapReduce – Hive / PigTeljes workflow egyben

Nem nekünk kell a folyamatok egyes belső állapotait kezelniOptimalizációs lehetőség

MapReduce jobok belseje, sorrendAkár a teljes feladat ismert

Deklaratív(abb) környezetEltolódik a programozási feladat hangsúlya

Az a kérdés, mit szeretnénkKevésbé kérdés (de néha kérdés), hogy pontosan hogyan is

HiveQL és Pig LatinMegjelenhetnek sémainformációk (félig-meddig)

Típus megkötésekTárolási formátumokJogosultságok

Page 3: Hive  és  Pig

Mikor melyik? – Hive / PigMindkettő MR framework felettiA Hive jó nekünk, ha

LekérdezésekhezAz adat már betöltve, ennek egy struktúrált kivonata kell

Adott kérdések megválaszolásáraSQL-ből készülünk átszokni

A HiveQL-nél alacsony a belépési küszöbA Pig jó nekünk, ha

ETL (Extract-Transform-Load) folyamatokhozAdatelőkészítésre elemzés előttHosszú műveletsorok véghezvitelére

Gyakran együtt használják őketNem teljesen váltják ki egymás funkcionalitásbanPl.: Yahoo, Facebook

Page 4: Hive  és  Pig
Page 5: Hive  és  Pig

TartalomAlapok

– ArchitektúraKliensek

– 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ó

Page 6: Hive  és  Pig

Alapok – Mi a HiveAdattá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

Page 7: Hive  és  Pig

Alapok – ArchitektúraMetastore

Metaadatok az adatokrólMetadatok az adatbázisról

TáblákTípusos oszlopokÖsszetett adatstruktúrák is (0NF)

PartíciókStatikus illetve dinamikus partíciók

Dinamikus partíciók alaphelyzetben kikapcsolvaGyorsítja a partíciókra irányuló lekérdezéseket

Vödrök (Buckets)Hash partíciókGyorsítja a join műveleteket

Page 8: Hive  és  Pig

Hive – KliensekCLI: Command Line InterfaceHWI: Hive Web Interface

– Editor, History, Table/Database browserJDBC, ODBC, Thrift

– Adatbázishozzáférés sztandard interfészeken

Hue (Beeswax) – <server>:8000 (default port)– Editor (syntax highlighting, save/load), History, Table/Database

browserQubole – Big Data as a Service

– Query Optimizer (Hive): cache, job optmizierAqua Data Studio

– Vizuális query építés, import/export, stb.– FluidShell – saját szkriptkörnyezet

Page 9: Hive  és  Pig

Adatbetöltés – In/ExternalInternal

– Adatok ténylegesen a Hive struktúrájában– Adatstruktúra törlésekor az adat is elveszikCREATE 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 elCREATE EXTERNAL TABLE <name> …;LOAD DATA INPATH <path> [OVERWRITE] INTO TABLE <name>;

Page 10: Hive  és  Pig

Adatbetöltés – AdattípusokTípus Leírás Méret Példa

TINYINT Egész 1 B 99, 99Y

SMALLINT Egész 2 B 99, 99S

INT Egész 4 B 99

BIGINT Egész 8 B 99, 99L

BOOLEAN Bool 1 b True

FLOAT Lebegőpontos szám 4 B 3.14159

DOUBLE Lebegőpontos szám 8 B 3.14159

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<…, …>

Page 11: Hive  és  Pig

Adatbetöltés – FormátumHáromféle határoló karakter (delimiter)

1. Sor (default: soremelés, \n)2. Oszlop (default: ^A, \001)3. Összetett struktúra (default: ^B, \002)4. Map kulcs-érték (default: ^C, \003)

CREATE TABLE <name> (…)ROW FORMAT DELIMITEDFIELDS 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)…

Page 12: Hive  és  Pig

Cloudera ImpalaImpala

– 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-SQLTehát a Hive és az Impala egyirányba mozognak

• Csökken az együttes létjogosultságukApache Drill

Page 13: Hive  és  Pig

HiveQL – VáltozókNégy namespace

1. hivevar--define key=value--hivevar key=value

2. hiveconf--hiveconf key=value

3. system--hiveconf key=value

4. env (bent read only)-- értékadásSET [<namespace>:]<key>=<value>;-- lekérdezésSET [<namespace>:]<key>;-- alapértelmezett namespace: hivevar

Page 14: Hive  és  Pig

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>];

Page 15: Hive  és  Pig

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>);

Page 16: Hive  és  Pig

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> BUCKETSszé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

Page 17: Hive  és  Pig

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'[PARTITION (<column>[=<value>], …)]SELECT …;

FROM <table> [<alias>]INSERT …[INSERT …]…;

Page 18: Hive  és  Pig

HiveQL – LekérdezésekKlózok

1. SELECToszlop, számított érték, aliasCASE WHEN <bool> THEN <value> … ELSE … END

2. FROMtábla, belső select + alias, JOIN, SEMI JOIN, UNION ALL

3. WHERECAST(<ertek> AS <tipus>), LIKE, RLIKE

4. GROUP BY5. HAVING6. DISTRIBUTE BY / CLUSTER BY

partitioning, partitioning + per reducer sort

7. ORDER BY / SORT BYtotal order, per reducer sort

8. LIMIT

Page 19: Hive  és  Pig

HiveQL – MintavételezésMintavé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

Page 20: Hive  és  Pig

HiveQL – Nézetek-- nem materializáltCREATE 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>;

Page 21: Hive  és  Pig

HiveQL – IndexekCREATE 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] INDEXON <table>;

EXPLAIN [EXTENDED] SELECT …;

Page 22: Hive  és  Pig

HiveQL – FüggvényekSHOW 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]

Page 23: Hive  és  Pig

HiveQL – StreamingSELECT TRANSFORM (<columns>)USING <program> AS <columns>FROM …;

Pl.:SELECT TRANSFORM (column1, column2)USING '/bin/cat' AS newcolumn1, newcolumn2FROM a;

Page 24: Hive  és  Pig

Hive – TervezésTable-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

Page 25: Hive  és  Pig

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.

Page 26: Hive  és  Pig

Apache Pig

Page 27: Hive  és  Pig

TartalomPig

– 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

Page 28: Hive  és  Pig

Alapok – Mi a PigAdatkezelő 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)

Page 29: Hive  és  Pig

Alapok – Belső működésKétféle végrehajtási mód

– Local modejava -cp $PIGDIR/pig.jar org.apache.pig.Main -x local script.pig» Lehetnek Warning-ok az outputban» Prototípus gyártáshoz

– MapReduce modejava -cp $PIGDIR/pig.jar:$HCONF org….Main script.pig

Végrehajtás szakaszai:1. Input: Pig latin kód (data flow language)2. Irányított, körmentes gráf3. MapReduce workflow

Page 30: Hive  és  Pig

Alapok – WordCount

Page 31: Hive  és  Pig

Interfészek – Grunt és HueGrunt

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

HueWeb felület

Hortonworks: 8000-s portCloudera: 8888-s port

Syntax highlightingMentés / Betöltés (szkriptek)PIG HelperJAR feltöltés

Page 32: Hive  és  Pig

Interfészek – EgyébElephantBird

Mindenféle Input- és OutputFormatokPig, Hive, HBase, stb.

Twitter által open source-oltPygmalion

Apache Cassandra integrációPiglet

Ruby integrációPigpy

Python integrációPiggyBank / DataFu

Pig UDF (user defined function) kollekciókAWS

AWS-en is elérhető

Page 33: Hive  és  Pig

Adatmodell – TípusokSkalár típusok

Int 10long 1000Lfloat 6.9f 3.2e-3fdouble 6.9 3.2e-3chararray 'string' 'elso\nmasodik\u0001'bytearray -

Komplex típusokmap: (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

Page 34: Hive  és  Pig

Adatmodell – Sémákdataset = 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 doubleEgyszerű 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();

Page 35: Hive  és  Pig

Pig Latin – AlapokAz utasításokat ;-vel zárjukAliasokat / 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ánlottRontja az olvashatóságotNem tudja segíteni a memóriakezelést

Angol betűvel kezdődő alfanumerikus nevek (_ is megengedett)Case sensitive is, meg nem is

Kulcsszavak NEMRelá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

Page 36: Hive  és  Pig

Pig Latin – Input / OutputLOAD <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ületreDESCRIBE <alias>; -- séma kiírása

Alias szinte bármi elé mehet: [<alias> = ]Globok: ?, *, [abc], [a-z], [^abc], [^a-z], \*, {ab, cd}

Page 37: Hive  és  Pig

Pig Latin – Relációs 1/2FOREACH <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

Page 38: Hive  és  Pig

Pig Latin – Relációs 2/2ORDER <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ésJOIN <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ámlimitJelenleg nem azt csinálja, amit a head parancs… :(

SAMPLE <alias> <ratio>; -- véletlen mintavétel<cmd> PARALLEL <num>; -- reducerek száma

<cmd> bármilyenRANK <alias> BY <orderexpr>; -- sorszámozás

Page 39: Hive  és  Pig

Pig Latin – UDFVannak beépített function-ökCsomó hasznos dolog már library-ből elérhető

PiggyBank, DataFuUDF = User Defined Function

Java class használataREGISTER <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(…) …

Page 40: Hive  és  Pig

Pig Latin – SzerkezetekFOREACH …

Flatten: lista kisimítása (~ keresztszorzat, Hive explode())“?:” operátorral és az isEmpty()-vel kezelhető az üres lista is

Beágyazott foreachdaily = LOAD 'NYSE_daily' AS (exchange, symbol);grpd = GROUP daily BY exchangeuniqcnt = 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 (!!!)

Page 41: Hive  és  Pig

Pig Latin – StreamingSTREAM <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-nalDEFINE ex `example.pl` ship('example.pl');divs = LOAD 'table' AS (a, b);highdivs = STREAM divs THROUGH ex AS (a, b);

Egyéb szükséges fájlok átadásaDEFINE ex `example.pl` ship('example.pl', 'other.pm');divs = LOAD 'table' AS (a, b);highdivs = STREAM divs THROUGH ex AS (a, b);

Distributed CacheDEFINE ex `ex.pl` cache('/data/shared/data#exdata');

Input, OutputDEFINE ex `ex.pl abc def` input('abc') output('def');

Page 42: Hive  és  Pig

Pig Latin – MapReduceAlap 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ésMAPREDUCE <jarfile>STORE <alias> INTO 'input'LOAD 'output' AS <alias>`<package>.<class> input output`;

Page 43: Hive  és  Pig

Pig Latin – BeállításokSET <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ébenREGISTER partpkg.jar;users = LOAD 'users' AS (id, age, zip);grp = GROUP users BY id PARTITION BY partpkg.partPARALLEL 10;

Page 44: Hive  és  Pig

Pig Latin – PreprocesszorParamé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 kommentjelMakrók

DEFINE <name> (<params>) RETURNS <resalias> {<body>};

A makró törzsében a paraméterek (out is) neve elé $-jelet kell írniElő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 namespaceEgy fájl csak egyszer lehet (makró kell a töbszöröshöz)

Page 45: Hive  és  Pig

Pig – TesztelésA sémát tudjuk ellenőrizni egy-egy aliasnál

DESCRIBE <alias>;

Ha az nem futásidőben derül kiA 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 ispig -e 'illustrate -script i.pig'

v0.8-től kezdődően minden futtatás végén statisztkákat is kapunkOptimalizációs feature-ök kikapcsolhatók a -t <name> paraméterrel

SplitFilter, MergeFilter, PushUpFilter, PushDownForEachFlatten, ColumnMapKeyPrune, LimitOptimizer, AddForeach, MergeForeach, LogicalExpressionSimplifier, All