Pig Latin 基礎(chǔ)

2018-12-30 18:52 更新

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ù)類型說明&示例
1int

表示有符號(hào)的32位整數(shù)。

示例:8

2long

表示有符號(hào)的64位整數(shù)。

示例:5L

3float

表示有符號(hào)的32位浮點(diǎn)。

示例:5.5F

4double

表示64位浮點(diǎn)。

示例:10.5

5chararray

表示Unicode UTF-8格式的字符數(shù)組(字符串)。

示例:‘w3cschool’

6Bytearray

表示字節(jié)數(shù)組(blob)。

7Boolean

表示布爾值。

示例:true / false。

8Datetime

表示日期時(shí)間。

示例:1970-01-01T00:00:00.000 + 00:00

9Biginteger

表示Java BigInteger。

示例:60708090709

10Bigdecimal

表示Java BigDecimal

示例:185.98376256272893883

復(fù)雜類型
11Tuple

元組是有序的字段集。

示例:(raja,30)

12Bag

包是元組的集合。

示例:{(raju,30),(Mohhammad,45)}

13Map

地圖是一組鍵值對。

示例:['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 - 評估布爾運(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<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)算符

下表描述了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)系中對數(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í)行。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)