Pig Latin 基础
Pig Latin是使用Apache Pig在Hadoop中分析数据的语言。在本章中,我们将讨论Pig Latin的基础知识,例如Pig Latin语句,数据类型,通用和关系运算符以及Pig Latin UDF。
Pig Latin 数据模型
如前几章所述,Pig的数据模型是完全嵌套的。一个关系是隐语数据模型的最外层结构。这是一个bag:
- bag是元组的集合。
- 元组是一组有序的字段。
- 字段是一条数据。
Pig Latin 语句块
使用Pig Latin处理数据时,语句是基本构造。
- 这些陈述与 relations 有关。它们包括表达式和模式。
- 每个语句以分号(;)结尾。
- 通过声明,我们将使用Pig Latin提供的运算符执行各种操作。
- 除LOAD和STORE外,在执行所有其他操作时,Pig Latin语句将一个 relations 作为输入,并产生另一个关系作为输出。
- 在Grunt shell中输入Load语句后,将立即执行其语义检查。要查看模式的内容,您需要使用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 Pig的数据类型。
基本数据类型
数据类型 |
描述与例子 |
int |
表示一个有符号的32位整数。Example : 8 |
long |
表示一个有符号的64位整数。 Example : 5L |
float |
表示一个有符号的32位浮点。 Example : 5.5F |
double |
表示64位浮点。 Example : 10.5 |
chararray |
表示Unicode UTF-8格式的字符数组(字符串)。 Example : ‘tutorials point’ |
Bytearray |
表示一个字节数组(blob)。 |
Boolean |
表示一个布尔值。 Example : true/ false. |
Datetime |
代表日期时间。 Example : 1970-01-01T00:00:00.000+00:0 |
Biginteger |
表示一个Java BigInteger。 Example : 60708090709 |
Bigdecimal |
代表Java BigDecimal Example : 185.98376256272893883 |
复合数据类型
数据类型 |
描述与例子 |
Tuple |
元组是一组有序的字段。 Example : (raja, 30) |
Bag |
包是元组的集合。Example : {(raju,30),(Mohhammad,45)} |
Map |
映射是一组键值对。Example : [ ‘name’#’Raju’, ‘age’#30] |
Null 值
以上所有数据类型的值都可以为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-评估布尔运算符。 它具有三个操作数,如下所示。 variable x = (expression) ? value1 if true : value2 if false |
b = (a == 1)? 20: 30;if a = 1 the value of b is 20.if a!=1 the value of b is 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) 非 true> |
!= |
不等 − 检查两个操作数的值是否相等。 如果值不相等,则条件为真。 |
(a != b) is true. |
> |
大于 − 检查左操作数的值是否大于右操作数的值。 如果是,则条件变为真。 |
(a > b) 非 true. |
< |
小于 − 检查左操作数的值是否小于右操作数的值。 如果是,则条件变为真。 |
(a < b) is true. |
>= |
大于等于 − 检查左操作数的值是否大于或等于右操作数的值。 如果是,则条件变为真。 |
(a >= b) 非 true. |
<= |
小于等于 − 检查左操作数的值是否小于或等于右操作数的值。 如果是,则条件变为真。 |
(a <= b) is true. |
matches |
模式匹配 − 检查左侧的字符串是否与右侧的常量匹配。 |
f1 matches ‘.jc2182.‘ |
Pig Latin–类型构造运算符
下表描述了Pig Latin的Type构造运算符。
操作符 |
描述 |
例子 |
() |
元组构造函数运算符 − 该运算符用于构造一个元组。 |
(Raju, 30) |
{} |
bag构造函数运算符 − 该运算符用于构造bag。 |
{(Raju, 30), (Mohammad, 45)} |
[] |
map构造函数运算符 − 该运算符用于构造一个元组。 |
[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 |
查看一系列语句的分步执行。 |