Pig join用法举例

jnd = join a by f1, b by f2;

join操作默认的是内连接,只有两边都匹配才会保留

需要用null补位的那边需要知道它的模式:

如果是左外连接,需要知道右边的数据集的模式,不匹配的字段用null补位

如果是右外连接,需要知道左边的数据集的模式,不匹配的字段用null补位

如果是全外连接,需要知道两边的数据集的模式,不匹配的字段用null补位

触发reduce阶段

基本用法

a = load ‘input1‘;
b = load ‘input2‘;
jnd = join a by $0, b by $1;

   

多字段连接

a = load ‘input1‘ as (username, age, city);
b = load ‘input2‘ as (orderid, user, city);
jnd = join a by (username, city), b by (user, city);

  

:: join后的字段引用

a = load ‘input1‘ as (username, age, address);
b = load ‘input2‘ as (orderid, user, money;
jnd = join a by username, b by user;
result = foreach jnd generate a::username, a::age, address, b::orderid;

  

多数据集连接

a = load ‘input1‘ as (username, age);
b = load ‘input2‘ as (orderid, user);
c = load ‘input3‘ as (user, acount);
jnd = join a by username, b by user, c by user;

  

外连接 仅限两个数据集

a = load ‘input1‘ as (username, age);
b = load ‘input2‘ as (orderid, user);
jnd = join a by username left outer, b by user;
jnd = join a by username right, b by user;
jnd = join a by username full, b by user;

  

自连接 需要加载自身数据集两次,使用不同的别名

a = load ‘data‘ as (node, parentid, name);
b = load ‘data‘ as (node, parentid, name);
jnd = join a by node, b by parentid;

  

时间: 2024-08-07 21:16:43

Pig join用法举例的相关文章

Pig load 用法举例

users = load '/users.data' using PigStorage() as (name:chararray, age:int, address:chararray); load 'xx': 1)xx可以是文件,也可以是文件夹.如果是文件夹,则文件夹下的所有文件(包括子文件夹)都作为输入文件. 2)xx可以是匹配字符,参考Hadoop的globStatushttp://hadoop.apache.org/docs/current/api/org/apache/hadoop/f

Pig group用法举例

group语句可以把具有相同键值的数据聚合在一起,与SQL中的group操作有着本质的区别,在SQL中group by字句创建的组必须直接注入一个或多个聚合函数.在Pig Latin中group和聚合函数之间没有直接的关系. group关键字正如它字面所表达的:将包含了特定的键所对应的值的所有记录封装到一个bag中,之后,用户可以将这个结果传递给一个聚合函数或者使用它做其他一些处理. 触发reduce阶段 数据文件内容如下: [[email protected] ~]$ cat orders.d

Pig distinct用法举例

dst = distinct data: DISTINCT只能对整个记录(整行)去重,不能在字段级别去重. 触发reduce阶段 data = load 'data'; distinct data;

Pig limit用法举例

lmt = limit data 10; 只获取指定条数的数据,不能保证每次得到的结果一致,先执行order再limit可以保证一致. 输入数据全部载入. 会触发reduce阶段 a = load 'a.txt'; b = group a all; c = foreach b generate COUNT(a) as sum; d = order a by $0; e = limit d c.sum/100;

Pig foreach用法举例

foreach:一行一行的遍历数据,处理一行的数据,然后返回一个tuple. users = load '/users.data';   1)别名引用 f = foreach users generate name, age;   2)位置引用 f = foreach users generate $0, $1; 3)字段区间 .. 从name字段开始到最后一个字段 f = foreach users generate name.. 从第一个字段开始到age字段 f = foreach user

Pig sample用法举例

some = sample data 0.1 遍历整个数据集,获取指定比例的行数的数据,获取的数据不确定,条数也不准确. 内部重写为filter data by random() <= 0.1 抽取100行数据 data = load 'data'; grpd = group data all; sums = foreach grpd generate COUNT(data) as c; some = sample data 100/(double)sums.c;

Pig filter用法举例

filter:过滤数据,只有符合特定条件的数据才会被保留下来,然后进入下一个数据流. 1)等值比较 filter data by $0 == 1 filter data by $0 != 1 2)字符串 正则匹配  JAVA的正则表达式 字符串以CM开头 filter data by $0 matches 'CM.*'; 字符串包含CM filter data by $0 matches '.*CM.*'; 3)not filter data by not $0==1; filter data

Pig store用法举例

store:将数据存储到HDFS等文件系统里 将数据保存到/data目录 store data into '/data'; 以逗号为分隔符 store data into '/data' using PigStorage(',');

聚集索引与非聚集索引的用法举例与使用注意

聚集索引 用法举例 小明需要查找一个人的姓名,知道他在公司的营销部门的1010办公室的4号座位.这个时候如果需要专门为小明建一个聚集索引表就是,以公司部门表内部门名称排序,再以房间总表序号排序,最后以房间详细表的座位表排序,这样就可以最快的找到他要找的人 聚集索引类似于一个字典,我们知道拼音来寻找字,首先我们知道字音节的首字母,从按a-z排序的字典中找到这个字首字母所在的区域,再从这个区域找到韵母所在的区域,当然韵母在字典中也有顺序,最后就可以找到我们想要的字了 注意事项 限制原则 每个表只能有