行集与集合操作(Scope)

main~

 

假设,我们有以下的两个行集:

A
id:int    Name
1         Smith
1         Smith
2         Brown
3         Case


B
id:int    Name
1         Smith
1         Smith
1         Smith
2         Brown
4         Dey
4         Dey

 

我们加载这些数据集: 

a = EXTRACT 
    Id:int, Name:string
    FROM @"/my/SampleData/SetOps_A.txt"
    USING DefaultTextExtractor();

b = EXTRACT 
    Id:int, Name:string
    FROM @"/my/SampleData/SetOps_B.txt"
    USING DefaultTextExtractor();

 

 

 

实例(行集的合并):

存在两种,一种为UNION ALL(保留所有),一种为UNION(删除重复)

 


union_distinct =    SELECT * FROM a
                        UNION DISTINCT
                    SELECT * FROM b;  

OUTPUT union_distinct
TO @"/my/Outputs/union_distinct.txt";

 

结果:

UNION DISTINCT
id:int    Name
1         Smith
2         Brown
3         Case
4         Dey

 

 

union_all =         SELECT * FROM a
                        UNION ALL
                    SELECT * FROM b;  

OUTPUT union_all
TO @"/my/Outputs/union_all.txt";

结果:

UNION ALL
id:int    Name
1         Smith
1         Smith
2         Brown
3         Case
1         Smith
1         Smith
1         Smith
2         Brown
4         Dey
4         Dey

 

 

 

 

实例(集合的公共行)

可以使用INTERSECT来实现。

同样的存在两种,INTERSECT ALL(保留所有),INTERSECT(删除重复)。

rs1 =  SELECT * FROM a 
       INTERSECT DISTINCT
       SELECT * FROM b;

rs2 =  SELECT * FROM a 
       INTERSECT ALL
       SELECT * FROM b;

OUTPUT rs1
TO @"/my/Outputs/intersect.txt";

OUTPUT rs2
TO @"/my/Outputs/intersect-all.txt";

 

结果:

INTERSECT DISTINCT
id:int    name
1         Smith
2         Brown

 

INTERSECT ALL
id:int    name
1         Smith
1         Smith
2         Brown

 

 

 

实例(查找在左rowset中,不在右rowset中的所有行)

可以使用EXCEPT实现,同样的存在两种,EXCEPT ALL(保留全部),EXCEPT (删除重复)。

rs0 =  SELECT * FROM a 
        EXCEPT DISTINCT
       SELECT * FROM b;


rs1 =  SELECT * FROM a 
        EXCEPT ALL
       SELECT * FROM b;

rs2 =  SELECT * FROM b 
        EXCEPT DISTINCT
       SELECT * FROM a;

rs3 =  SELECT * FROM b 
        EXCEPT ALL
       SELECT * FROM a;

 

OUTPUT rs0 TO @"/my/Outputs/except_distinct_a_b.txt";

OUTPUT rs1 TO @"/my/Outputs/except-all_a_b.txt";

OUTPUT rs2 TO @"/my/Outputs/except_distinct_b_a.txt";

OUTPUT rs3 TO @"/my/Outputs/except-all_b_a.txt";

 

结果:

EXCEPT ALL (A,B)
id:int    name
3         Case

 

EXCEPT DISTINCT (A,B)
id:int    name
3         Case

 

EXCEPT ALL (B,A)
id:int    name
1         Smith
4         Dey
4         Dey

 


EXCEPT DISTINCT (B,A)
id:int    name
4         Dey
 

 

 

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值