Pig Latin是用于使用Apache Pig分析Hadoop中數(shù)據(jù)的語言。在本章中,我們將討論P(yáng)ig Latin的基礎(chǔ)知識(shí),如Pig Latin語句,數(shù)據(jù)類型,通用運(yùn)算符,關(guān)系運(yùn)算符和Pig Latin UDF。
如前面章節(jié)所討論的,Pig的數(shù)據(jù)模型是完全嵌套的。Relation是Pig Latin數(shù)據(jù)模型的最外層結(jié)構(gòu)。它是一個(gè)包其中:
在使用Pig Latin處理數(shù)據(jù)時(shí),語句是基本結(jié)構(gòu)。
這些語句使用關(guān)系(relation),它們包括表達(dá)式(expression)和模式(schema)。
每個(gè)語句以分號(hào)(;)結(jié)尾。
我們將使用Pig Latin提供的運(yùn)算符通過語句執(zhí)行各種操作。
除了LOAD和STORE,在執(zhí)行所有其他操作時(shí),Pig Latin語句采用關(guān)系作為輸入,并產(chǎn)生另一個(gè)關(guān)系作為輸出。
只要在Grunt shell中輸入 Load 語句,就會(huì)執(zhí)行語義檢查。要查看模式的內(nèi)容,需要使用 Dump 運(yùn)算符。只有在執(zhí)行 dump 操作后,才會(huì)執(zhí)行將數(shù)據(jù)加載到文件系統(tǒng)的MapReduce作業(yè)。
下面給出一個(gè)Pig Latin語句,它將數(shù)據(jù)加載到Apache Pig中。
grunt> Student_data = LOAD 'student_data.txt' USING PigStorage(',')as ( id:int, firstname:chararray, lastname:chararray, phone:chararray, city:chararray );
下面給出的表描述了Pig Latin數(shù)據(jù)類型。
序號(hào) | 數(shù)據(jù)類型 | 說明&示例 |
---|---|---|
1 | int | 表示有符號(hào)的32位整數(shù)。 示例:8 |
2 | long | 表示有符號(hào)的64位整數(shù)。 示例:5L |
3 | float | 表示有符號(hào)的32位浮點(diǎn)。 示例:5.5F |
4 | double | 表示64位浮點(diǎn)。 示例:10.5 |
5 | chararray | 表示Unicode UTF-8格式的字符數(shù)組(字符串)。 示例:‘w3cschool’ |
6 | Bytearray | 表示字節(jié)數(shù)組(blob)。 |
7 | Boolean | 表示布爾值。 示例:true / false。 |
8 | Datetime | 表示日期時(shí)間。 示例:1970-01-01T00:00:00.000 + 00:00 |
9 | Biginteger | 表示Java BigInteger。 示例:60708090709 |
10 | Bigdecimal | 表示Java BigDecimal 示例:185.98376256272893883 |
復(fù)雜類型 | ||
11 | Tuple | 元組是有序的字段集。 示例:(raja,30) |
12 | Bag | 包是元組的集合。 示例:{(raju,30),(Mohhammad,45)} |
13 | Map | 地圖是一組鍵值對。 示例:['name'#'Raju','age'#30] |
所有上述數(shù)據(jù)類型的值可以為NULL。Apache Pig以與SQL類似的方式處理空值。null可以是未知值或不存在值,它用作可選值的占位符。這些空值可以自然出現(xiàn)或者可以是操作的結(jié)果。
下表描述了Pig Latin的算術(shù)運(yùn)算符。假設(shè)a = 10和b = 20。
運(yùn)算符 | 描述 | 示例 |
---|---|---|
+ | 加 - 運(yùn)算符的兩側(cè)的值相加 | a+b將得出30 |
? | 減 - 從運(yùn)算符左邊的數(shù)中減去右邊的數(shù) | a-b將得出-10 |
* | 乘 - 運(yùn)算符兩側(cè)的值相乘 | a*b將得出200 |
/ | 除 - 用運(yùn)算符左邊的數(shù)除右邊的數(shù) | b / a將得出2 |
% | 系數(shù) - 用運(yùn)算符右邊的數(shù)除左邊的數(shù)并返回余數(shù) | b%a將得出0 |
? : | Bincond - 評估布爾運(yùn)算符。它有三個(gè)操作數(shù),如下所示。 變量 x =(expression)? value1 (如果為true): value2(如果為false)。 | b =(a == 1)? 20:30; 如果a = 1,則b的值為20。 如果a!= 1,則b的值為30。 |
CASE WHEN THEN ELSE END | Case - case運(yùn)算符等效于嵌套的bincond運(yùn)算符。 | CASE f2 % 2 WHEN 0 THEN 'even' WHEN 1 THEN 'odd' END |
下表描述了Pig Latin的比較運(yùn)算符。
運(yùn)算符 | 描述 | 示例 |
---|---|---|
== | 等于 - 檢查兩個(gè)數(shù)的值是否相等;如果是,則條件變?yōu)閠rue。 | (a = b)不為true。 |
!= | 不等于 - 檢查兩個(gè)數(shù)的值是否相等。如果值不相等,則條件為true。 | (a!= b)為true。 |
> | 大于 - 檢查左邊數(shù)的值是否大于右邊數(shù)的值。 如果是,則條件變?yōu)閠rue。 | (a> b)不為true。 |
< | 小于 - 檢查左邊數(shù)的值是否小于右邊數(shù)的值。 如果是,則條件變?yōu)閠rue。 | (a<b)為true。 |
>= | 大于或等于 - 檢查左邊數(shù)的值是否大于或等于右邊數(shù)的值。如果是,則條件變?yōu)閠rue。 | (a>=b)不為true。 |
<= | 小于或等于 - 檢查左邊數(shù)的值是否小于或等于右邊數(shù)的值。如果是,則條件變?yōu)閠rue。 | (a<=b)為true。 |
matches | 模式匹配 - 檢查左側(cè)的字符串是否與右側(cè)的常量匹配。 | f1 matches '.* tutorial.*' |
下表描述了Pig Latin的類型結(jié)構(gòu)運(yùn)算符。
運(yùn)算符 | 描述 | 示例 |
---|---|---|
() | 元組構(gòu)造函數(shù)運(yùn)算符 - 此運(yùn)算符用于構(gòu)建元組。 | (Raju,30) |
{} | 包構(gòu)造函數(shù)運(yùn)算符 - 此運(yùn)算符用于構(gòu)造包。 | {(Raju,30),(Mohammad,45)} |
[] | 映射構(gòu)造函數(shù)運(yùn)算符 - 此運(yùn)算符用于構(gòu)造一個(gè)映射。 | [name#Raja,age#30] |
下表描述了Pig Latin的關(guān)系運(yùn)算符。
運(yùn)算符 | 描述 |
---|---|
加載和存儲(chǔ) | |
LOAD | 將數(shù)據(jù)從文件系統(tǒng)(local/ HDFS)加載到關(guān)系中。 |
STORE | 將數(shù)據(jù)從文件系統(tǒng)(local/ HDFS)存儲(chǔ)到關(guān)系中。 |
過濾 | |
FILTER | 從關(guān)系中刪除不需要的行。 |
DISTINCT | 從關(guān)系中刪除重復(fù)行。 |
FOREACH,GENERATE | 基于數(shù)據(jù)列生成數(shù)據(jù)轉(zhuǎn)換。 |
STREAM | 使用外部程序轉(zhuǎn)換關(guān)系。 |
分組和連接 | |
JOIN | 連接兩個(gè)或多個(gè)關(guān)系。 |
COGROUP | 將數(shù)據(jù)分組為兩個(gè)或多個(gè)關(guān)系。 |
GROUP | 在單個(gè)關(guān)系中對數(shù)據(jù)進(jìn)行分組。 |
CROSS | 創(chuàng)建兩個(gè)或多個(gè)關(guān)系的向量積。 |
排序 | |
ORDER | 基于一個(gè)或多個(gè)字段(升序或降序)按排序排列關(guān)系。 |
LIMIT | 從關(guān)系中獲取有限數(shù)量的元組。 |
合并和拆分 | |
UNION | 將兩個(gè)或多個(gè)關(guān)系合并為單個(gè)關(guān)系。 |
SPLIT | 將單個(gè)關(guān)系拆分為兩個(gè)或多個(gè)關(guān)系。 |
診斷運(yùn)算符 | |
DUMP | 在控制臺(tái)上打印關(guān)系的內(nèi)容。 |
DESCRIBE | 描述關(guān)系的模式。 |
EXPLAIN | 查看邏輯,物理或MapReduce執(zhí)行計(jì)劃以計(jì)算關(guān)系。 |
ILLUSTRATE | 查看一系列語句的分步執(zhí)行。 |
更多建議: