新聞中心
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。

Pig Latin - 數(shù)據(jù)模型
如前面章節(jié)所討論的,Pig的數(shù)據(jù)模型是完全嵌套的。Relation是Pig Latin數(shù)據(jù)模型的最外層結(jié)構(gòu)。它是一個(gè)包其中:
- 包是元組的集合。
- 元組是有序的字段集。
- 字段是一段數(shù)據(jù)。
Pig Latin - 語句
在使用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ù)類型
下面給出的表描述了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ù)組(字符串)。 示例:‘XWCX.NET’ |
| 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 | 地圖是一組鍵值對(duì)。 示例:['name'#'Raju','age'#30] |
Null值
所有上述數(shù)據(jù)類型的值可以為NULL。Apache Pig以與SQL類似的方式處理空值。null可以是未知值或不存在值,它用作可選值的占位符。這些空值可以自然出現(xiàn)或者可以是操作的結(jié)果。
Pig Latin - 算術(shù)運(yùn)算符
下表描述了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 - 評(píng)估布爾運(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)算符
下表描述了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 |
| >= | 大于或等于 - 檢查左邊數(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)算符
下表描述了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)算符
下表描述了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)系中對(duì)數(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í)行。 |
網(wǎng)站題目:創(chuàng)新互聯(lián)ApachePig教程:PigLatin基礎(chǔ)
當(dāng)前鏈接:http://www.5511xx.com/article/dpispgi.html


咨詢
建站咨詢
