猪拉丁语 – 基础

猪拉丁语 – 基础


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运算符。只有在执行转储操作后,才会执行将数据加载到文件系统的 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 数据类型。

S.N. 数据类型 说明和示例
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

Complex Types
11 元组

元组是一组有序的字段。

示例: (raja, 30)

12

包是元组的集合。

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

13 地图

Map 是一组键值对。

示例:[‘name’#’Raju’, ‘age’#30]

空值

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

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

Pig Latin – 算术运算符

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

Operator 描述 例子
&plus

加法– 在运算符的任一侧添加值

a &plus b 将给 30

减法– 从左手操作数中减去右手操作数

a – b 将给出 -10
*

乘法– 将运算符两侧的值相乘

a * b 将给出 200
/

除法– 将左手操作数除以右手操作数

b / a 会给 2
%

模数– 将左手操作数除以右手操作数并返回余数

b % a 将给出 0
? :

Bincond – 评估布尔运算符。它具有三个操作数,如下所示。

变量x = (表达式) ? value1 如果为 truevalue2 如果为 false

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

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

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

CASE

WHEN

THEN

ELSE END

Case – case 运算符等效于嵌套的 bincond 运算符。

案例 f2 % 2

WHEN 0 THEN ‘偶数’

WHEN 1 THEN ‘奇数’

结尾

Pig Latin – 比较运算符

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

Operator 描述 例子
==

Equal – 检查两个操作数的值是否相等;如果是,则条件变为真。

(a = b) 不是真的
!=

不等于– 检查两个操作数的值是否相等。如果值不相等,则条件变为真。

(a != b) 是真的。
>

大于– 检查左操作数的值是否大于右操作数的值。如果是,则条件变为真。

(a > b) 不正确。
<

小于– 检查左操作数的值是否小于右操作数的值。如果是,则条件变为真。

(a < b) 是真的。
>=

大于或等于– 检查左操作数的值是否大于或等于右操作数的值。如果是,则条件变为真。

(a >= b) 不是真的。
<=

小于或等于– 检查左操作数的值是否小于或等于右操作数的值。如果是,则条件变为真。

(a <= b) 是真的。
matches

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

f1 匹配 ‘.*tutorial.*’

Pig Latin – 类型构造运算符

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

Operator 描述 例子
()

元组构造器运算符– 此运算符用于构造元组。

(拉朱,30 岁)
{}

Bag constructor operator – 此运算符用于构造一个包。

{(Raju, 30), (Mohammad, 45)}
[]

Map constructor operator – 此运算符用于构造元组。

[姓名#Raja,年龄#30]

Pig Latin – 关系运算

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

Operator 描述
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 查看一系列语句的逐步执行。

觉得文章有用?

点个广告表达一下你的爱意吧 !😁