hive 语法检查_Apache pig 语法

Apache Pig是一种用于大规模数据集分析的工具,提供高级语言pig Latin,它以数据流形式处理数据。Pig Latin支持元组、包、映射等数据模型,以及多种运算符如LOAD、STORE、JOIN、FILTER等。与Hadoop配合使用,Pig Latin脚本会被转化为MapReduce任务执行。Pig Latin与Hive不同,它更侧重于数据流和并行处理。此外,Pig支持用户定义函数(UDF),可用于创建自定义操作。
摘要由CSDN通过智能技术生成

Apache pig概述

pig是MapReduce的一个抽象。它是一个工具,用于分析较大的数据集,并将其表示为数据流。常与Hadoop一起使用,可以使用pig在Hadoop中执行所有的数据处理操作。

pig提供了一种名为pig Latin的高级语言。使用pig分析数据,需要编写pig Latin脚本,这些脚本在内部都转化为MapReduce任务。

pig与MapReduce的区别:

4ecc6a0bce798bca765202e33d18f335.png

pig与hive的区别

57eaa5876ec788a9a5cea96aec234ee6.png

pig Latin 一种并行的数据流语言

用户从一个或多个数据源并行读取数据,然后并行的处理,最后将结果并行的输出到一个或者多个结果集中。pig描述的是一个有向无环图。

pig Latin数据模型

Pig Latin的数据模型是完全嵌套的,它允许复杂的非原子数据类型。

eeb6f3d48e4485815a2205e18c0286e8.png

原子(atom):任何单个值,无论其数据类型都是atom。它存储为字符串,可以用作字符串和数字。:“raja“或“30"

元组(tuple):由有序字段集合形成的记录称为元组,字段可以是任何类型。例:(Raja,30)。tuple的映射操作是用 .(点操作符)。可以通过字段名引用,也可以通过位置引用。t.x,t.$1。

包(bag):一个包是一组无序的元组。换句话说,元组(非唯一)的集合被称为包。每个元组可以有任意数量的字段(灵活模式)。包由“{}"表示。:{(Raja,30),(Mohammad,45)}。用户需要映射bag字段的时候,可以通过创建一个包含用户需要字段的bag。

映射(map):k-v对。k是chararray类型,v可以是任何类型,由[]表示。:[name#Raja,age#30]

关系(relation):一个关系是一个元组的包,pig Latin中的关系是无需的。

模式:为数据定义的模式

将用户的数据模式传达给pig最简单的方式就是在加载数据时告诉pig用户加载的数据是什么样子的。当用户生命一个数据模式时,也不一定要声明其中的复杂数据类型,比如声明了一个tuple,但是也可以不申明其中包含了哪些字段。

pig Latin基础

1、 数据模型:关系是pig数据模型最外层的结构。它是一个包,其中:

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

2、 语句:语句是基本结构

  • 语句使用关系,包括 表达式模式
  • 语句用 ; 结尾。
  • pig提供运算符执行各种操作。
  • 除了 load 和 store,在其他的各种操作下,pig都用关系作为输入,产生另外一个关系作为输出
  • 要查看模式的内容需要使用dump运算符。只有执行了dump后,才会执行将数据加载到MapReduce的作业。

3、 数据类型

int long float double chararray bytearray boolean datetime biginteger bigdecimal

复杂类型:tuple bag map

null值

4、 算数运算符

+ - * / % ? :

case when then else end

5、 比较运算符

== != > < >= <= matches

6、 类型结构运算符

() 元组构造函数运算符

{} 包构造函数运算符

[] 映射构造函数运算符

7、 关系运算符

25fea2b21e9af8654c3a7f58c1bdb2fe.png

4f479f72d45fa04dcd6e353b4c074068.png

pig Latin是一种数据流语言,每个处理步骤都会产生一个新的数据集,或者产生一个新的关系。关系名称也就是我们所说的别名。

除了关系名称外,pig Latin还有一个概念就是字段名称,表示一个关系中所包含的列的名称。

pig加载数据

Relation_name = LOAD 'Input file path' USING function as schema;

  • relation_name - 我们必须提到要存储数据的关系。
  • Input file path - 我们必须提到存储文件的HDFS目录。(在MapReduce模式下)
  • function - 我们必须从Apache Pig提供的一组加载函数中选择一个函数( BinStorage,JsonLoader,PigStorage,TextLoader )。
  • Schema - 我们必须定义数据的模式,可以定义所需的模式如下 :(column1 : data type, column2 : data type, column3 : data type);
  • 注意:我们加载数据而不指定模式。在这种情况下,列将被寻址为$01,$02,等...(检查)。

pig存储数据

STORE Relation_name INTO ' required_directory_path ' [USING function];

pig diagnostic运算符

验证load语句的执行,必须使用diagnostic运算符。

pig Latin提供了四种不同类型的诊断运算符:

  • dump
  • describe
  • explanation
  • illustration

Dump 运算符用于运行Pig Latin语句,并在屏幕上显示结果,它通常用于调试目的。

Dump Relation_Name

describe运算符用于查看关系的模式。

Describe Relation_name

执行上述 Pig Latin 语句后,将生成以下输出。

grunt> student: { id: int,firstname: chararray,lastname: chararray,phone: chararray,city: chararray }

explain运算符用于显示关系的逻辑,物理和MapReduce执行计划。

explain Relation_name;

illustrate 运算符为你提供了一系列语句的逐步执行。

illustrate Relation_name;

pig group运算符

GROUP运算符用于在一个或多个关系中对数据进行分组,它收集具有相同key的数据。

Group_data = GROUP Relation_name BY age;

group all 将数据集的所有数据放到一个分组里

按多列分组

让我们按年龄和城市对关系进行分组,如下所示。

grunt> group_multiple = GROUP student_details by (age, city);

Pig Cogroup运算符

COGROUP运算符的运作方式与GROUP运算符相同。两个运算符之间的唯一区别是group运算符通常用于一个关系,而cogroup运算符用于涉及两个或多个关系的语句。

cogroup_data = COGROUP student_details by age, employee_details by age;

Pig Join运算符

JOIN 运算符用于组合来自两个或多个关系的记录。在执行连接操作时,我们从每个关系中声明一个(或一组)元组作为key。 当这些key匹配时,两个特定的元组匹配,否则记录将被丢弃。连接可以是以下类型:

  • Self-join
  • Inner-join
  • Outer-join − left join, right join, and full join

1、 Self-join(自连接)

Self-join 用于将表与其自身连接,就像表是两个关系一样,临时重命名至少一个关系。通常,在Apache Pig中,为了执行self-join,我们将在不同的别名(名称)下多次加载相同的数据。

语法

下面给出使用 JOIN 运算符执行self-join操作的语法。

grunt> Relation3_name = JOIN Relation1_name BY key, Relation2_name BY key ;

2、 Inner Join(内部连接)

Inner Join使用较为频繁;它也被称为等值连接。当两个表中都存在匹配时,内部连接将返回行。基于连接谓词(join-predicate),通过组合两个关系(例如A和B)的列值来创建新关系。查询将A的每一行与B的每一行进行比较,以查找满足连接谓词的所有行对。当连接谓词被满足时,A和B的每个匹配的行对的列值被组合成结果行。

grunt> result = JOIN relation1 BY columnname, relation2 BY columnname;

3、 Outer Join:与inner join不同,outer join返回至少一个关系中的所有行。outer join操作以三种方式执行:

  • Left outer join
  • Right outer join
  • Full outer join

3-1、Left Outer Join(左外连接)

left outer join操作返回左表中的所有行,即使右边的关系中没有匹配项。

Relation3_name = JOIN Relation1_name BY id LEFT OUTER, Relation2_name BY customer_id;

3-2、Right Outer Join(右外连接)

right outer join操作将返回右表中的所有行,即使左表中没有匹配项。

outer_right = JOIN customers BY id RIGHT, orders BY customer_id;

3-3、Full Outer Join(全外连接)

当一个关系中存在匹配时,full outer join操作将返回行。

outer_full = JOIN customers BY id FULL OUTER, orders BY customer_id;

4、 使用多个Key

我们可以使用多个key执行JOIN操作。

Relation3_name = JOIN Relation2_name BY (key1, key2), Relation3_name BY (key1, key2);

Pig Cross运算符

CROSS 运算符计算两个或多个关系的向量积。

Pig Union运算符

Pig Latin的 UNION 运算符用于合并两个关系的内容。

Relation_name3 = UNION Relation_name1, Relation_name2;

Pig Split运算符

SPLIT 运算符用于将关系拆分为两个或多个关系。

SPLIT Relation1_name INTO Relation2_name IF (condition1), Relation2_name (condition2),

Pig Filter运算符

FILTER 运算符用于根据条件从关系中选择所需的元组。

Relation2_name = FILTER Relation1_name BY (condition);

Pig Distinct运算符

DISTINCT 运算符用于从关系中删除冗余(重复)元组。

Relation_name2 = DISTINCT Relatin_name1;

Pig Foreach运算符

FOREACH 运算符用于基于列数据生成指定的数据转换。

Relation_name2 = FOREACH Relatin_name1 GENERATE (required data);

foreach_data = FOREACH student_details GENERATE id,age,city;

Pig Order By运算符

ORDER BY 运算符用于以基于一个或多个字段的排序顺序显示关系的内容。

Relation_name2 = ORDER Relatin_name1 BY (ASC|DESC);

Pig Limit运算符

LIMIT 运算符用于从关系中获取有限数量的元组。

Result = LIMIT Relation_name required number of tuples;

limit_data = LIMIT student_details 4;

Pig Eval函数

Apache Pig Eval函数​www.w3cschool.cn
9ee6add65a10cc0e13e043d7d812bd32.png

Apache Pig提供了各种内置函数。

1、 AVG()函数:求包内均值

2、 BagToString()函数:将包的元素连接成字符串

3、 CONCAT()函数:连接两个或多个相同类型的表达式

4、 COUNT()函数:获取包中元素的数量,同时计算包中元组的数量

5、 COUNT_STAR()函数:它类似于COUNT() 函数。它用于获取包中的元素数量。

6、DIFF()函数:比较元组中的两个包(字段)。

7、IsEmpty()函数:检查包或映射是否为空。

8、MAX()函数(MIN同):计算单列包中的列(数值或字符)的最大值。

9、 PluckTuple()函数:可以定义字符串Prefix,并过滤以给定prefix开头的关系中的列。

10、SIZE()函数:基于任何Pig数据类型计算元素的数量。

11、SUBTRACT()函数:两个包相减,它需要两个包作为输入,并返回包含第一个包中不在第二个包中的元组的包。

12、SUM()函数:要获取单列包中某列的数值总和。

13、TOKENIZE()函数:要在单个元组中拆分字符串(其中包含一组字),并返回包含拆分操作的输出的包。

pig 加载和存储函数

Apache Pig 加载和存储函数​www.w3cschool.cn
9ee6add65a10cc0e13e043d7d812bd32.png

1、PigStorage:加载和存储结构化文件

2、 TextLoader:非结构化数据加载到pig中

3、 BinStorage:机器可读模式将数据加载到pig中

4、 Handing Compression:加载和压缩数据

pig 包和元组函数

Apache Pig 包和元组函数​www.w3cschool.cn
9ee6add65a10cc0e13e043d7d812bd32.png

1、 TOBAG:多个表达式转换为包

2、 TOP:关系顶部的N个元组

3、 TOTUPLE:多个表达式转化为元组

4、 TOMAP:k-v转化为Map

pig用户定义函数(UDF)

除了内置函数之外,Apache Pig还为UserDefinedFunction(UDF:用户定义函数)提供广泛的支持。使用这些UDF,可以定义我们自己的函数并使用它们。UDF支持六种编程语言,即Java,Jython,Python,JavaScript,Ruby和Groovy。

Pig 运行脚本

多行注释

我们将用'/*'开始多行注释,以'*/'结束。

/* These are the multi-line comments 
  In the pig script */ 

单行注释

我们将用“--"开始单行注释。

--we can write single line comments like this.

pig -f:执行的脚本路径

-p:执行的参数,k-v对

-m:参数文件路径

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值