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 查看一系列语句的逐步执行过程。
广告