- Apache Pig 教程
- Apache Pig - 首頁
- Apache Pig 簡介
- Apache Pig - 概述
- Apache Pig - 架構
- Apache Pig 環境
- Apache Pig - 安裝
- Apache Pig - 執行
- Apache Pig - Grunt Shell
- Pig Latin
- Pig Latin - 基礎
- 載入 & 儲存運算子
- Apache Pig - 讀取資料
- Apache Pig - 儲存資料
- 診斷運算子
- Apache Pig - 診斷運算子
- Apache Pig - Describe 運算子
- Apache Pig - Explain 運算子
- Apache Pig - Illustrate 運算子
- 分組 & 連線
- Apache Pig - Group 運算子
- Apache Pig - Cogroup 運算子
- Apache Pig - Join 運算子
- Apache Pig - Cross 運算子
- Pig Latin 內建函式
- Apache Pig - Eval 函式
- 載入 & 儲存函式
- Apache Pig - Bag & Tuple 函式
- Apache Pig - 字串函式
- Apache Pig - 日期時間函式
- Apache Pig - 數學函式
- Apache Pig 有用資源
- Apache Pig - 快速指南
- Apache Pig - 有用資源
- Apache Pig - 討論
Pig Latin 基礎
Pig Latin 是用於使用 Apache Pig 在 Hadoop 中分析資料的語言。在本章中,我們將討論 Pig Latin 的基礎知識,例如 Pig Latin 語句、資料型別、通用和關係運算符以及 Pig Latin UDF。
Pig Latin - 資料模型
如前幾章所述,Pig 的資料模型是完全巢狀的。關係是 Pig Latin 資料模型的最外層結構。它是一個包,其中 -
- 包是元組的集合。
- 元組是欄位的有序集合。
- 欄位是一段資料。
Pig Latin - 語句
在使用 Pig Latin 處理資料時,語句是基本構造。
這些語句與關係一起工作。它們包括表示式和模式。
每個語句以分號 (;) 結尾。
我們將透過語句使用 Pig Latin 提供的運算子執行各種操作。
除了 LOAD 和 STORE 之外,在執行所有其他操作時,Pig Latin 語句都將關係作為輸入並生成另一個關係作為輸出。
一旦您在 Grunt shell 中輸入Load 語句,就會執行其語義檢查。要檢視模式的內容,您需要使用Dump 運算子。只有在執行dump 操作後,載入資料到檔案系統的 MapReduce 作業才會執行。
示例
下面是一個 Pig Latin 語句,它將資料載入到 Apache Pig 中。
grunt> Student_data = LOAD 'student_data.txt' USING PigStorage(',')as
( id:int, firstname:chararray, lastname:chararray, phone:chararray, city:chararray );
Pig Latin - 資料型別
下表描述了 Pig Latin 資料型別。
| 序號 | 資料型別 | 描述 & 示例 |
|---|---|---|
| 1 | int | 表示有符號 32 位整數。 示例 : 8 |
| 2 | long | 表示有符號 64 位整數。 示例 : 5L |
| 3 | float | 表示有符號 32 位浮點數。 示例 : 5.5F |
| 4 | double | 表示 64 位浮點數。 示例 : 10.5 |
| 5 | chararray | 表示 Unicode UTF-8 格式的字元陣列(字串)。 示例 : ‘tutorials point’ |
| 6 | Bytearray | 表示位元組陣列(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 | Map 是一組鍵值對。 示例 : [ ‘name’#’Raju’, ‘age’#30] |
空值
以上所有資料型別的值都可以為 NULL。Apache Pig 對空值處理方式與 SQL 類似。
空值可以是未知值或不存在的值。它用作可選值的佔位符。這些空值可以自然出現,也可以是操作的結果。
Pig Latin - 算術運算子
下表描述了 Pig Latin 的算術運算子。假設 a = 10 且 b = 20。
| 運算子 | 描述 | 示例 |
|---|---|---|
| + | 加法 - 將運算子兩側的值相加 |
a + b 將得到 30 |
| - | 減法 - 從左運算元中減去右運算元 |
a − b 將得到 -10 |
| * | 乘法 - 將運算子兩側的值相乘 |
a * b 將得到 200 |
| / | 除法 - 將左運算元除以右運算元 |
b / a 將得到 2 |
| % | 取模 - 將左運算元除以右運算元並返回餘數 |
b % a 將得到 0 |
| ? : | Bincond - 評估布林運算子。它有三個運算元,如下所示。 變數 x = (表示式) ? value1 如果為真 : value2 如果為假。 |
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 的比較運算子。
| 運算子 | 描述 | 示例 |
|---|---|---|
| == | 等於 - 檢查兩個運算元的值是否相等;如果是,則條件變為真。 |
(a = b) 不為真 |
| != | 不等於 - 檢查兩個運算元的值是否相等。如果值不相等,則條件變為真。 |
(a != b) 為真。 |
| > | 大於 - 檢查左運算元的值是否大於右運算元的值。如果是,則條件變為真。 |
(a > b) 不為真。 |
| < | 小於 - 檢查左運算元的值是否小於右運算元的值。如果是,則條件變為真。 |
(a < b) 為真。 |
| >= | 大於或等於 - 檢查左運算元的值是否大於或等於右運算元的值。如果是,則條件變為真。 |
(a >= b) 不為真。 |
| <= | 小於或等於 - 檢查左運算元的值是否小於或等於右運算元的值。如果是,則條件變為真。 |
(a <= b) 為真。 |
| matches | 模式匹配 - 檢查左側的字串是否與右側的常量匹配。 |
f1 matches '.*tutorial.*' |
Pig Latin - 型別構造運算子
下表描述了 Pig Latin 的型別構造運算子。
| 運算子 | 描述 | 示例 |
|---|---|---|
| () | 元組構造運算子 - 此運算子用於構造元組。 |
(Raju, 30) |
| {} | 包構造運算子 - 此運算子用於構造包。 |
{(Raju, 30), (Mohammad, 45)} |
| [] | 對映構造運算子 - 此運算子用於構造元組。 |
[name#Raja, age#30] |
Pig Latin - 關係操作
下表描述了 Pig Latin 的關係運算符。
| 運算子 | 描述 |
|---|---|
| 載入和儲存 | |
| LOAD | 將資料從檔案系統(本地/HDFS)載入到關係中。 |
| STORE | 將關係儲存到檔案系統(本地/HDFS)。 |
| 過濾 | |
| FILTER | 從關係中刪除不需要的行。 |
| DISTINCT | 從關係中刪除重複的行。 |
| FOREACH, GENERATE | 根據資料列生成資料轉換。 |
| STREAM | 使用外部程式轉換關係。 |
| 分組和連線 | |
| JOIN | 連線兩個或多個關係。 |
| COGROUP | 對兩個或多個關係中的資料進行分組。 |
| GROUP | 對單個關係中的資料進行分組。 |
| CROSS | 建立兩個或多個關係的笛卡爾積。 |
| 排序 | |
| ORDER | 根據一個或多個欄位(升序或降序)對關係進行排序。 |
| LIMIT | 從關係中獲取有限數量的元組。 |
| 合併和拆分 | |
| UNION | 將兩個或多個關係合併成一個關係。 |
| SPLIT | 將一個關係拆分成兩個或多個關係。 |
| 診斷運算子 | |
| DUMP | 在控制檯上列印關係的內容。 |
| DESCRIBE | 描述關係的模式。 |
| EXPLAIN | 檢視計算關係的邏輯、物理或 MapReduce 執行計劃。 |
| ILLUSTRATE | 檢視一系列語句的逐步執行過程。 |