关于Pig

Pig 是作为一个客户端应用程序运行的。

运行pig三种方法:
1. pig   script.pig         2.在Grunt 环境中,也可以通过 run exec 命令运行 Pig 脚本。  3.也可以在 Java 中运行 Pig 程序。

Pig 对复杂、嵌套数据结构的支持也使其不同于能处理平面数据类型的 SQL。几个支持在线和低延迟查询的特性是 RDBMS 有但 Pig 没有的,例如事务和索引。和 Pig 一样, Hive 也被设计为用 HDFS 作为存储。但是它们之间有着显著的区别。 Hive 的查询语言 HiveQL ,是基于 SQL 的。任何熟悉 SQL 的人都可以轻松使用 HiveQL 写查询。和RDBMS 相同, Hive 要求所有数据必须存储在表中,表必须有模式,而模式由 Hive 进行管理。但是, Hive 允许为预先存在于 HDFS 的数据关联一个模式。所以,数据的加载步骤是可选的。和 Pig 一样, Hive 也不支持低延迟查询。

pig 语句结尾加“;”号。Pig Latin 程序执行时,每个命令按次序进行解析。如果遇到句能错误或其他 (语义)错误,例如未定义的别名,解释器会终止运行,井显示错误消息。解释器会给每个关系操作建立一个逻辑计划。逻辑计划构成了 Pig Latin 程序的核心。让 Pig 开始执行的是 DUMP 语句。此时,逻辑计划被编译成物 理计划,井执行。

hive表与iceberg表对比 hive与pig应用上的比较_hive表与iceberg表对比

hive表与iceberg表对比 hive与pig应用上的比较_字段_02

表达式

hive表与iceberg表对比 hive与pig应用上的比较_hive表与iceberg表对比_03

Pig 有四种数值类型: int,long,float,double。Pig 的这种模式声明方式提供了很大的灵活性。这和传统SQL 数据库要求在数据加载前必须先声明模式的方式截然不同。设计 Pig 的目的是用于分析不包含数据类型信息的纯文本输入文件的,因此,它为字段确定类型的时机不同于 RDBMS 也是理所当然的。

计算函数:

计算函数(Eval function),计算函数获取一个或多个表达式作为输入,井返回另一个表达式。

过虑函数(Filter function) ,过虑函数是一类特殊的计算函数。这类函数返回的是逻辑布尔值。

加载函数(Load function) ,计算函数获取一个或多个表达式作为输入,井返回另一个表达式。

存储函数(Store function) ,存储函数指明如何把一个关系中的内容存到外部存储。

hive表与iceberg表对比 hive与pig应用上的比较_数据_04

用户自定义函数

为了使用新函数,我们首先进行编译,井把它打包到一个 JAR 文件,然后,我们通过 RIGISTER 操作指定文件的本地路径(不带引号) ,告诉 Pig 这个 JAR 文件的信息,Pig 把函数名作为 Java 类名,井试图用该类名来加载类以完成函数调用。(这也就是为什么函数名是大小写敏感的,因为 Java 类名是大小写敏感的。),使用Grunt将包加入到搜索路径中去,invoker可以在pig脚本中直接调用java方法。

过滤数据

FOREACH.. .GENERATE 操作用于逐个处理一个关系中的行。它可用于移除字段或创建新的字段。嵌套 FOREACH... GENERATE 语句必须以 GENERATE 语句作为最后一层嵌套语句。STREAM 操作让你可以用外部程序或脚本对关系中的数据进行变换。COGROUP 为每个不同的分组键值生成一个元组。每个元组的第一个字段就是那个键值。其他字段是各个关系中匹配该键值的元组所组成的"包" (bag) 。第一个包包含关系 中有该键值的匹配元组。同样,第二个包包含关系中有该键值的匹配元组。


COGROUP 用于把两个或多个关系中的数据放到一起,而 GROUP 语句则对一个关系中的数据进行分组。GROUP 会创建一个关系,它的第一个字段是分组宇段,其别名指定 group. 第二个字段是包含与原关系。有两种特殊的分组操作: ALL ANY. ALL 把一个关系中的所有元组放入一个包。All 没有关键词 BY. ALL 分组常用于计算关系中的元

组个数, 关键词 ANY 用于对关系中的元组随机分组。它对于取样非常有用。



 




hive表与iceberg表对比 hive与pig应用上的比较_字段_05


如果想设置输出的顺序,可以使用 ORDER 操作按照某个或某几个字段对关系中的数据进行排序。默认的排序方式是对具有相同类型的字段值使用自然序进行排序 (natural ordering) ,而不同类型字段值之间的排序则是任意的、确定的。