猪拉丁语 – 基础知识


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

Pig Latin – 数据模型

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

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

猪拉丁语 – Statemets

使用 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 整数

表示有符号的 32 位整数。

示例:8

2 长的

表示有符号的 64 位整数。

示例:5L

3 漂浮

表示有符号的 32 位浮点数。

示例:5.5F

4 双倍的

表示 64 位浮点数。

示例:10.5

5 字符数组

表示 Unicode UTF-8 格式的字符数组(字符串)。

示例:“教程点”

6 字节数组

表示字节数组 (blob)。

7 布尔值

代表一个布尔值。

示例:真/假。

8 约会时间

代表日期时间。

示例:1970-01-01T00:00:00.000+00:00

9 大整数

表示 Java BigInteger。

示例:60708090709

10 大十进制

表示 Java BigDecimal

示例:185.98376256272893883

复杂类型
11 元组

元组是一组有序的字段。

示例:(raja,30)

12 包

包是元组的集合。

示例:{(raju,30),(Mohhammad,45)}

13 地图

Map 是一组键值对。

示例: [ '姓名'#'Raju', '年龄'#30]

空值

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

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

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 = (表达式) ? 如果为 true ,则为 value1 :如果为 false ,则为value2。

b = (a == 1)? 20:30;

如果 a = 1,则 b 的值为 20。

如果 a!=1,则 b 的值为 30。

案件

什么时候

然后

否则结束

Case - case 运算符相当于嵌套 bincond 运算符。

情况 f2 % 2

当 0 时则“偶数”

当 1 那么“奇数”

结尾

Pig Latin – 比较运算符

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

操作员 描述 例子
==

等于- 检查两个操作数的值是否相等;如果是,则条件成立。

(a = b) 不正确
!=

不等于- 检查两个操作数的值是否相等。如果值不相等,则条件成立。

(a != b) 为真。
>

大于- 检查左操作数的值是否大于右操作数的值。如果是,则条件成立。

(a > b) 不正确。
<

小于- 检查左操作数的值是否小于右操作数的值。如果是,则条件成立。

(a < b) 为真。
>=

大于或等于- 检查左操作数的值是否大于或等于右操作数的值。如果是,则条件成立。

(a >= b) 不正确。
<=

小于或等于- 检查左操作数的值是否小于或等于右操作数的值。如果是,则条件成立。

(a <= b) 为真。
火柴

模式匹配- 检查左侧的字符串是否与右侧的常量匹配。

f1 匹配 '.*tutorial.*'

Pig Latin – 类型构造运算符

下表描述了 Pig Latin 的类型构造运算符。

操作员 描述 例子
()

元组构造函数运算符- 该运算符用于构造元组。

(拉朱,30 岁)
{}

包构造函数运算符- 该运算符用于构造一个包。

{(拉朱,30),(穆罕默德,45)}
[]

映射构造函数运算符- 该运算符用于构造元组。

[姓名#Raja,年龄#30]

Pig Latin – 关系运算

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

操作员 描述
加载和存储
加载 将文件系统(本地/HDFS)中的数据加载到关系中。
店铺 保存与文件系统(本地/HDFS)的关系。
过滤
筛选 从关系中删除不需要的行。
清楚的 从关系中删除重复的行。
FOREACH,生成 基于数据列生成数据转换。
溪流 使用外部程序转换关系。
分组和加入
加入 加入两个或多个关系。
集团 将数据分组为两个或多个关系。
团体 将数据分组到单个关系中。
叉 创建两个或多个关系的叉积。
排序
命令 根据一个或多个字段(升序或降序)按排序顺序排列关系。
限制 从关系中获取有限数量的元组。
合并与拆分
联盟 将两个或多个关系组合成一个关系。
分裂 将单个关系拆分为两个或多个关系。
诊断操作符
倾倒 在控制台上打印关系的内容。
描述 描述关系的模式。
解释 查看计算关系的逻辑、物理或 MapReduce 执行计划。
阐明 查看一系列语句的逐步执行情况。