新聞中心
Pig Latin是用于使用Apache Pig分析Hadoop中數(shù)據(jù)的語言。在本章中,我們將討論Pig Latin的基礎知識,如Pig Latin語句,數(shù)據(jù)類型,通用運算符,關系運算符和Pig Latin UDF。

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


咨詢
建站咨詢
