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 檢視一系列語句的逐步執行過程。
廣告

© . All rights reserved.