Pig Latin基础知识


Pig Latin是用于使用Apache Pig在Hadoop中分析数据的语言。在本章中,我们将讨论Pig Latin的基本知识,例如Pig Latin语句,数据类型,常规和关系操作符以及Pig Latin UDF。

pig拉丁文 - 数据模型

正如前面章节所讨论的,Pig的数据模型是完全嵌套的。一个 关系 是隐语数据模型的最外层结构。它是一个 -

  • 一个包是元组的集合。
  • 元组是一组有序的字段。
  • 一个字段是一段数据。

pig拉丁语 - Statemets

使用Pig Latin处理数据时, 语句 是基本结构。

  • 这些陈述适用于 关系 。它们包括 表达式模式

  • 每个语句以分号(;)结尾。

  • 我们将使用Pig Latin提供的操作员通过语句执行各种操作。

  • 除LOAD和STORE外,执行所有其他操作时,Pig拉丁语句将关系作为输入并生成另一个关系作为输出。

  • 只要在Grunt shell中输入 Load 语句,就会执行语义检查。要查看模式的内容,您需要使用转 储运 算符。只有在执行 转储 操作后,才会执行将数据加载到文件系统的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拉丁语 - 数据类型

下表给出了Pig拉丁数据类型。

SN 数据类型 说明和示例
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
Complex Types
11 Tuple 元组是一组有序的字段。 例如 :(raja,30)
12 Bag 一个包是元组的集合。 例子 :{(raju,30),(Mohhammad,45)}
13 Map 地图是一组键值对。 例如 :['name'#'Raju','age'#30]

空值

所有上述数据类型的值都可以为NULL。Apache Pig以与SQL相似的方式处理空值。

null可以是未知值或不存在的值。它用作可选值的占位符。这些空值可以自然发生,也可以是操作的结果。

拉丁语算术操作符

下表描述了Pig Latin的算术运算符。假设a = 10和b = 20。

Operator Description Example
+ 增加 \- 在操作员的两侧添加值 a + b会给30
\- 减法 \- 从左侧操作数中减去右侧操作数 a - b会给-10
* 乘法 \- 将运算符两侧的值相乘 a * b会给200
/ 分区 \- 用右手操作数分开左手操作数 b / a会给2
模数 \- 用右手操作数分开左手操作数并返回余数 b%a会给0
?: Bincond \- 评估布尔运算符。 它有三个操作数,如下所示。 变量 x =(表达式)? value1 _如果为true_ : value2 _如果为false_ 。 b =(a == 1)?20:30; 如果a = 1,则b的值是20。 如果!= 1,则b的值是30。
CASE WHEN THEN ELSE END ELSE END 案例 \- 案例操作符相当于嵌套的二进制操作符。 CASE f2%2 当0那么'偶' 当1那么'奇' 结束

Pig Latin - 比较运算符

下表描述了Pig Latin的比较运算符。

Operator Description Example
== 相等 \- 检查两个操作数的值是否相等; 如果是的话,则条件成立。 (a = b)is not true
!= 不等于 \- 检查两个操作数的值是否相等。 如果值不相等,则条件成立。 (a!= b)true。
> 大于 \- 检查左操作数的值是否大于右操作数的值。 如果是,那么条件成立。 (a> b) is not true。
< 小于 \- 检查左操作数的值是否小于右操作数的值。 如果是,那么条件成立。 (a
> = 大于或等于 \- 检查左操作数的值是否大于或等于右操作数的值。 如果是,那么条件成立。 (a> = b)is not true。
<= 小于或等于 \- 检查左操作数的值是否小于或等于右操作数的值。 如果是,那么条件成立。 (a <= b)is true。
matches 模式匹配 \- 检查左侧的字符串是否与右侧的常量匹配。 f1 matches '.*tutorial.*'

Pig Latin - 类型建设操作员

下表描述了Pig Latin的类型构造操作符。

Operator Description Example
() 元组构造函数 - 此运算符用于构造元组。 (Raju,30)
{} 包构造函数 - 该操作员用于构造袋子。 {(Raju,30),(Mohammad,45)}
[] Map 构造函数 - 该运算符用于构造元组。 [name#Raja, age#30]

Pig Latin - 关系操作

下表描述了Pig Latin的关系运算符。

Operator 描述
加载和存储
LOAD 将文件系统(本地/ HDFS)中的数据加载到关系中。
STORE 保存与文件系统(本地/ HDFS)的关系。
Filtering
Filtering 从关系中删除不需要的行。
不同 从关系中删除重复的行。
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 查看一系列语句的逐步执行。