14.3.2 Pig Latin的使用

这一节我们着重讲一下Pig Latin可以用在哪些方面。

1.运行Pig Latin

用户可以通过多种方式使用Pig Latin语句,如14.2.3所述。通常,Pig按如下方式执行Pig Latin语句:

1)Pig对所有语句的语法和语义进行确认;

2)如果遇到DUMP或者STORE命令,Pig将顺序执行上面所有的语句。

在下面的示例中,Pig将只确认LOAD和FOREACH语句,但不执行:


A=LOAD'Student'USING PigStorage(':')AS(Sno:chararray, Sname:chararray, Ssex:

chararray, Sage:int, Sdept:chararray);

B=FOREACH A GENERATE Sname;


在下面的示例中,Pig将确认并执行LOAD、FOREACH和DUMP语句:


A=LOAD'Student'USING PigStorage(':')AS(Sno:chararray, Sname:chararray, Ssex:c

hararray, Sage:int, Sdept:chararray);

B=FOREACH A GENERATE Sname;

DUMP B;


因为Pig的一些命令并不会自动执行,而是需要通过其他命令来触发,也就是说如果用户连续地使用某些命令,它并不会马上执行,而是在最后的一个触发操作的调用下,连续地一次性地执行完毕。

2.查看Pig Latin的运行结果

Pig Latin包括一些用来查看语句运行结果的操作。

1)使用DUMP操作把操作的结果显示在屏幕上,如下所示:


DUMP alias;


2)使用STORE操作把操作的结果存储在文件中,如下所示:


STORE alias INTO'directory'[USING function];


3.Pig Latin的调试

Pig Latin包括一些可以帮助用户进行调试的操作。

1)使用DECSRIBE操作查看关系的模式,如下所示:


DESCRIBE alias;


2)使用EXPLAIN操作查看对某个关系进行操作的逻辑的、物理的或者MapReduce的执行计划,如下所示:


EXPLAIN[-script pigscript][-out path][-brief][-dot][-param param_name=

param_value][-param_file file_name]alias;


3)使用ILLUSTRATE操作对Pig Latin语句进行单步执行,如下所示:


ILLUSTRATE alias;


4.注释在Pig Latin脚本中的使用

注释就是对代码的解释和说明。目的是为了让别人和自己很容易看懂。像其他的编程语言一样,Pig Latin脚本中也可以包含注释,下面是两种常用的注释格式:

(1)多行注释:/……/

示例:


/*

myscript.pig

My script includes three simple Pig Latin Statements.

*/


(2)单行注释:—

示例:


A=LOAD'Student'USING PigStorage(':');—语句

B=FOREACH A GENERATE Sname;—foreach语句

DUMP B;—dump语句


5.大小写相关性

在Pig Latin中,关系名、域名、函数名是区分大小写的。参数名和所有Pig Latin关键字是不区分大小写的。

请注意下面的示例:

关系名A、B、C等是区分大小写的;

域名f1,f2、f3等是区分大小写的;

函数名PigStorage、COUNT等是区分大小写的;

关键字LOAD, USING, AS, GROUP, BY, FOREACH, GENERATE, DUMP等是不区分大小写的,它们也能被写成load、using、as、group、by、foreach、generate、dump等。在FOREACH语句中,关系B中的域通过位置来访问,如下所示:


grunt>A=LOAD'data'USING PigStorage()AS(f1:int, f2:int, f3:int);

grunt>B=GROUP A BY f1;

grunt>C=FOREACH B GENERATE COUNT($0);

grunt>DUMP C;