- Pig 教程
- Pig 体系结构
- Pig 安装
- Pig 执行
- Pig Grunt Shell
- Pig Latin 基础
- Pig 读取数据
- Pig 存储数据
- Pig Dump 运算符
- Pig Describe 运算符
- Pig Explain 运算符
- Pig illustrate 运算符
- Pig GROUP 运算符
- Pig Cogroup 运算符
- Pig JOIN 运算符
- Pig Cross 运算符
- Pig Union 运算符
- Pig SPLIT 运算符
- Pig FILTER 运算符
- Pig DISTINCT 运算符
- Pig FOREACH 运算符
- Pig ORDER BY 运算符
- Pig LIMIT 运算符
- Pig eval(求值) 函数
- Pig Load & Store 函数
- Pig Bag & Tuple 函数
- Pig 字符串(String)函数
- Pig 日期时间函数
- Pig 数学函数
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
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 | 查看一系列语句的分步执行。 |
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论