Apache Pig 简明教程

Pig Latin – Basics

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

Pig Latin – Data Model

如同在前面的章节中所讨论的,Pig 的数据模式是完全嵌套的。 Relation 是 Pig Latin 数据模型的最外层结构。并且它是一个 bag ,其中:

  1. 一个 Bag 是元组的集合。

  2. 一个元组是有序字段集。

  3. 一个字段是一小段数据。

Pig Latin – Statemets

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

  1. 这些语句使用 relations 。它们包含 expressionsschemas

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

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

  4. 除了 LOAD 和 STORE,在执行所有其他操作时,Pig Latin 语句将关系作为输入,并生成另一个关系作为输出。

  5. 只要你在 Grunt shell 中输入 Load 语句,就会对其执行语义检查。要查看模式的内容,你需要使用 Dump 操作符。只有在执行 dump 操作后,才会执行将数据加载到文件系统中的 MapReduce 作业。

Example

下面给出了一个 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 – Data types

下表描述了 Pig Latin 数据类型。

S.N.

Data Type

Description & Example

1

int

表示带符号的 32 位整数。 Example : 8

2

long

表示带符号的 64 位整数。 Example : 5L

3

float

表示带符号的 32 位浮点数。 Example : 5.5F

4

double

表示 64 位浮点数。 Example : 10.5

5

chararray

表示 Unicode UTF-8 格式中的字符数组(字符串)。 Example : ‘tutorials point’

6

Bytearray

表示字节数组(blob)。

7

Boolean

表示布尔值。 Example : true/ false。

8

Datetime

代表日期时间。 Example : 1970-01-01T00:00:00.000+00:00

9

Biginteger

代表 Java BigInteger。 Example : 60708090709

10

Bigdecimal

代表 Java BigDecimal Example : 185.98376256272893883

Complex Types

11

Tuple

元组是有序的字段集。 Example : (raja, 30)

12

Bag

集合是由元组构成的集合。 Example : {(raju,30),(Mohhammad,45)}

13

Map

Null Values

所有以上数据类型的值均可以为 NULL。Apache Pig 对 null 值的处理方式与 SQL 类似。

NULL 可以是未知值或不存在的值。它用作可选值中的占位符。这些 Null 可能自然发生或可以是某个操作的结果。

Pig Latin – Arithmetic Operators

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

Operator

Description

Example

+

Addition − 加法运算符位于左右两侧。

a + b 将得到 30

Subtraction − 减法运算符,运算符右边减去左边。

a-b 的结果为 -10

*

Multiplication − 乘法运算符位于左右两侧。

a * b 将得到 200

/

Division − 除法运算符,运算符左边除以右边。

b / a 将得到 2

%

Modulus − 除法运算符,运算符左边除以右边,取得余数。

b % a 将得到 0

? :

Bincond − 布尔值运算符,如下所示有三个运算符。变量 x = (表达式)? value1 为 true 时: value2 为 false 时。

b = (a == 1)?20: 30;如果 a = 1,则 b 的值为 20。如果 a!=1,则 b 的值为 30。

CASE WHEN THEN ELSE END

Case − case 运算符等同于嵌套的 bincond 运算符。

CASE f2 % 2WHEN 0 THEN 'even’WHEN 1 THEN 'odd’END

Pig Latin – Comparison Operators

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

Operator

Description

Example

==

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

(a = b) 为假

!=

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

(a != b) 为 true。

>

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

(a > b) 为 false。

<

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

(a < b) 为 true。

>=

Greater than or equal to - 检查左操作数的值是否大于或等于右操作数的值。如果大于或等于,则条件变为真。

(a >= b) 为 false。

Less than or equal to - 检查左操作数的值是否小于或等于右操作数的值。如果小于或等于,则条件变为真。

(a ⇐ b) 为 true。

matches

Pattern matching - 检查左手边的字符串是否与右手边的常量匹配。

f1 matches '.tutorial.'

Pig Latin – Type Construction Operators

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

Operator

Description

Example

()

Tuple constructor operator - 此运算符用于构造一个元组。

(Raju, 30)

{}

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

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

[]

Map constructor operator - 此运算符用于构造一个元组。

[name#Raja, age#30]

Pig Latin – Relational Operations

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

Operator

Description

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

查看一系列语句的分步执行。