- Apache Pig 教程
- Apache Pig - 首页
- Apache Pig 简介
- Apache Pig - 概述
- Apache Pig - 架构
- Apache Pig 环境
- Apache Pig - 安装
- Apache Pig - 执行
- Apache Pig - Grunt Shell
- Pig Latin
- Pig Latin - 基础
- 加载 & 存储操作符
- Apache Pig - 读取数据
- Apache Pig - 存储数据
- 诊断操作符
- Apache Pig - 诊断操作符
- Apache Pig - Describe 操作符
- Apache Pig - Explain 操作符
- Apache Pig - Illustrate 操作符
- 分组 & 连接
- Apache Pig - Group 操作符
- Apache Pig - Cogroup 操作符
- Apache Pig - Join 操作符
- Apache Pig - Cross 操作符
- Pig Latin 内置函数
- Apache Pig - Eval 函数
- 加载 & 存储函数
- Apache Pig - Bag & Tuple 函数
- Apache Pig - 字符串函数
- Apache Pig - 日期时间函数
- Apache Pig - 数学函数
- Apache Pig 有用资源
- Apache Pig - 快速指南
- Apache Pig - 有用资源
- Apache Pig - 讨论
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 | 查看一系列语句的逐步执行过程。 |