Apache Pig 简明教程
Pig Latin – Basics
Pig Latin 是用于使用 Apache Pig 分析 Hadoop 中数据的语言。在本章中,我们将讨论 Pig Latin 的基础知识,例如 Pig Latin 语句、数据类型、常规运算符和关系运算符以及 Pig Latin UDF。
Pig Latin – Data Model
如同在前面的章节中所讨论的,Pig 的数据模式是完全嵌套的。 Relation 是 Pig Latin 数据模型的最外层结构。并且它是一个 bag ,其中:
-
一个 Bag 是元组的集合。
-
一个元组是有序字段集。
-
一个字段是一小段数据。
Pig Latin – Statemets
在使用 Pig Latin 处理数据时, statements 是基本结构。
-
这些语句使用 relations 。它们包含 expressions 和 schemas 。
-
每个语句以分号 (;) 结尾。
-
我们将通过语句使用 Pig Latin 提供的操作符执行各种操作。
-
除了 LOAD 和 STORE,在执行所有其他操作时,Pig Latin 语句将关系作为输入,并生成另一个关系作为输出。
-
只要你在 Grunt shell 中输入 Load 语句,就会对其执行语义检查。要查看模式的内容,你需要使用 Dump 操作符。只有在执行 dump 操作后,才会执行将数据加载到文件系统中的 MapReduce 作业。
Pig Latin – Data types
下表描述了 Pig Latin 数据类型。
S.N. |
Data Type |
Description & Example |
1 |
int |
表示带符号的 32 位整数。 Example : 8 |
2 |
long |
表示带符号的 64 位整数。 Example : 5L |
3 |
float |
表示带符号的 32 位浮点数。 Example : 5.5F |
4 |
double |
表示 64 位浮点数。 Example : 10.5 |
5 |
chararray |
表示 Unicode UTF-8 格式中的字符数组(字符串)。 Example : ‘tutorials point’ |
6 |
Bytearray |
表示字节数组(blob)。 |
7 |
Boolean |
表示布尔值。 Example : true/ false。 |
8 |
Datetime |
代表日期时间。 Example : 1970-01-01T00:00:00.000+00:00 |
9 |
Biginteger |
代表 Java BigInteger。 Example : 60708090709 |
10 |
Bigdecimal |
代表 Java BigDecimal Example : 185.98376256272893883 |
Complex Types |
11 |
Tuple |
元组是有序的字段集。 Example : (raja, 30) |
12 |
Bag |
集合是由元组构成的集合。 Example : {(raju,30),(Mohhammad,45)} |
13 |
Map |
Null Values
所有以上数据类型的值均可以为 NULL。Apache Pig 对 null 值的处理方式与 SQL 类似。
NULL 可以是未知值或不存在的值。它用作可选值中的占位符。这些 Null 可能自然发生或可以是某个操作的结果。
Pig Latin – Arithmetic Operators
下表描述了 Pig Latin 的算术运算符。假设 a = 10 且 b = 20。
Operator |
Description |
Example |
+ |
Addition − 加法运算符位于左右两侧。 |
a + b 将得到 30 |
− |
Subtraction − 减法运算符,运算符右边减去左边。 |
a-b 的结果为 -10 |
* |
Multiplication − 乘法运算符位于左右两侧。 |
a * b 将得到 200 |
/ |
Division − 除法运算符,运算符左边除以右边。 |
b / a 将得到 2 |
% |
Modulus − 除法运算符,运算符左边除以右边,取得余数。 |
b % a 将得到 0 |
? : |
Bincond − 布尔值运算符,如下所示有三个运算符。变量 x = (表达式)? value1 为 true 时: value2 为 false 时。 |
b = (a == 1)?20: 30;如果 a = 1,则 b 的值为 20。如果 a!=1,则 b 的值为 30。 |
CASE WHEN THEN ELSE END |
Case − case 运算符等同于嵌套的 bincond 运算符。 |
CASE f2 % 2WHEN 0 THEN 'even’WHEN 1 THEN 'odd’END |
Pig Latin – Comparison Operators
下表描述了 Pig Latin 的比较运算符。
Operator |
Description |
Example |
== |
Equal - 检查两个操作数的值是否相等;如果相等,则条件变为真。 |
(a = b) 为假 |
!= |
Not Equal - 检查两个操作数的值是否相等。如果值不相等,则条件变为真。 |
(a != b) 为 true。 |
> |
Greater than - 检查左操作数的值是否大于右操作数的值。如果大于,则条件变为真。 |
(a > b) 为 false。 |
< |
Less than - 检查左操作数的值是否小于右操作数的值。如果小于,则条件变为真。 |
(a < b) 为 true。 |
>= |
Greater than or equal to - 检查左操作数的值是否大于或等于右操作数的值。如果大于或等于,则条件变为真。 |
(a >= b) 为 false。 |
⇐ |
Less than or equal to - 检查左操作数的值是否小于或等于右操作数的值。如果小于或等于,则条件变为真。 |
(a ⇐ b) 为 true。 |
matches |
Pattern matching - 检查左手边的字符串是否与右手边的常量匹配。 |
f1 matches '.tutorial.' |
Pig Latin – Type Construction Operators
下表描述了 Pig Latin 的 Type 构造运算符。
Operator |
Description |
Example |
() |
Tuple constructor operator - 此运算符用于构造一个元组。 |
(Raju, 30) |
{} |
Bag constructor operator - 此运算符用于构造一个包。 |
{(Raju, 30), (Mohammad, 45)} |
[] |
Map constructor operator - 此运算符用于构造一个元组。 |
[name#Raja, age#30] |
Pig Latin – Relational Operations
下表描述了 Pig Latin 的关系运算符。
Operator |
Description |
Loading and Storing |
LOAD |
将数据从文件系统(本地/HDFS)加载到关系。 |
STORE |
将关系保存到文件系统(本地/HDFS)。 |
Filtering |
FILTER |
从关系中删除不需要的行。 |
DISTINCT |
从关系中删除重复的行。 |
FOREACH, GENERATE |
根据数据列生成数据转换。 |
STREAM |
使用外部程序转换关系。 |
Grouping and Joining |
JOIN |
连接两个或更多关系。 |
COGROUP |
对两个或更多关系中的数据进行分组。 |
GROUP |
对单个关系中的数据进行分组。 |
CROSS |
创建两个或更多关系的笛卡尔积。 |
Sorting |
ORDER |
根据一个或更多字段,按升序或降序对关系进行排序。 |
LIMIT |
从关系中获取有限数量的元组。 |
Combining and Splitting |
UNION |
将两个或更多关系合并到一个关系中。 |
SPLIT |
将一个关系拆分为两个或更多关系。 |
Diagnostic Operators |
DUMP |
在控制台上打印关系内容。 |
DESCRIBE |
描述关系的模式。 |
EXPLAIN |
查看用于计算关系的逻辑、物理或 MapReduce 执行计划。 |
ILLUSTRATE |
查看一系列语句的分步执行。 |