You are on page 1of 4

Apache Pig, Hadoop üzerinde script tarzı uygulamalar yazabilmemize olanak sağlayan

bir ortam olarak tanımlayabiliriz.

Pig Latin, scriptlerimizi oluşturacağımız script dilidir. Ben bu dili biraz linq'e
benzetiyorum. Syntax yapısını anahtar kelimelerini aşağıda oluşturmaya çalışalım.

Data Tipleri
Tip Açıklama Örnek
int Signed 32-bit 11
long Signed 64-bit 10L or 10l
float 32-bit floating point 10.5F or 10.5f or 10.5e2f or 10.5E2F
double 64-bit floating point 10.5 or 10.5e2 or 10.5E2
chararray (string) Unicode UTF-8 format Merhaba Dünya
bytearray Byte array (blob)  
boolean boolean true veya false
datetime datetime 1970-01-01T00:00:00.000+00:00
biginteger Java BigInteger 200000000000
bigdecimal Java BigDecimal 33.456783321323441233442
Complex Types
tuple Sıralı Küme (19,2)
bag Bir dizi koleksiyonu {(19,2), (18,1)}
map Bir anahtar değer çifti kümesi [open#apache]

load, Hadoop üzerimizde yer alan dosyamızı bir değişkene atamamız için kullanırız
syntax yapısı aşağıdaki gibidir.
LOAD 'TableName' AS (ColumnNames)

Örnek

ziyaretciler = LOAD 'ziyaretciler' AS (Protokol, Referrer, Ip,


RequestUrl)

filter, şartlar oluşturup verileri süzmek için kullanırız. Sql deki where şartı gibi
düşünebilirsiniz, syntax yapısı aşağıdaki gibidir.
FILTER 'TableName' BY
sart1=0 AND sart2=1

Örnek

sart = FILTER ziyaretciler BY


Protokol = 'https' AND Referrer = 'direct'

join, iki veya daha fazla ilişkisel kayıtları birleştirmek için kullanılır. Aynı anahtara sahip
verileri eşleştirir.
JOIN FirstTable BY key, SecondTable BY key;

group, çıktılarımızı istediğimiz alanlar üzerinde gruplamamamızı sağlar.


GROUP TableName BY ColumnName;

foreach, kayıtlar üzerinde belirtilen sütunların ayıtlanarak oluşturulması için kullanılır.


FOREACH TableName GENERATE ColumnName1,ColumnName3,ColumnName5;

order by, bir veya daha fazla alanın içeriğini sıralamak için kullanılır.
ORDER TableName BY (ASC|DESC);

limit, sınırlı sayıda kayıt oluşturmak için kullanılır.


LIMIT TableName n;

store, Apache Pig ile oluşturduğumuz verileri depolamak için bu operatörü kullanırız.
STORE Values INTO 'FileName'

Karşılaştırma Operatörleri
Operatör Sembol Örnek
Eşit == FILTER Values BY ColumnName == Val
Eşit Değil != FILTER Values BY ColumnName != Val
Küçük < FILTER Values BY ColumnName < Val
Büyük > FILTER Values BY ColumnName > Val
Küçük Eşit <= FILTER Values BY ColumnName <= Val
Büyük Eşit >= FILTER Values BY ColumnName >= Val
Regex matches FILTER Values BY ColumnName matches '.*text.*'
Mantıksal Operatörler
Operatör Sembol Örnek
AND and FILTER Values BY ColumnName1 == Val1 AND ColumnName2 == Val2
OR or FILTER Values BY ColumnName1 == Val1 OR ColumnName2 == Val2
NOT not FILTER Values BY NOT ColumnName1 == Val1

Null Operatörleri
Operatör Sembol Örnek
is null is null FILTER Values BY ColumnName1 is null
is not null is not null FILTER Values BY ColumnName1 is not null

distinct, bu fonksiyon birden fazla benzer olan kayıtların tekrarlamasını önler, benzer
kayıtları tek bir kayıt olarak döndürür.

Apache Pig Fonksiyonlar


 AVG, Ortalam
 COUNT, Kayıt Sayısı
 MIN, Minumum
 MAX, Maximum
 SUM, Toplam

Şimdiye kadar öğrendiklerimizi ufak bir örnek ile uygulayalım. Bu örneğimizde


ziyaretcilerimizin swarm kelimesi gecen sayfalarımızı, https protokulü üzerinden kaçar
defa ziyaret ettikleri IP üzerinden gruplayarak listeleyelim.
ziyaretciBilgileri = LOAD '/pythontr/ziyaretciler.csv' USING
PigStorage(',') AS
(
ID : int,
PROTOKOL : chararray,
REFERER : chararray,
IP : chararray,
REQUEST_URL : chararray,
TARIH : datetime,
USER_AGENT : chararray
);
filterZiyaretci = FILTER ziyaretciBilgileri By
PROTOKOL == 'https' AND
REFERER == 'www.pythontr.com' AND
REQUEST_URL matches '.*swarm-hesabi.*';
distinctZiyaretci = DISTINCT filterZiyaretci;
groupZiyaretci = GROUP distinctZiyaretci BY IP;

maxSonZiyaret = FOREACH groupZiyaretci {


Generate
group,
COUNT(distinctZiyaretci.ID);
};

DUMP maxSonZiyaret;

You might also like