在Oracle中minus运算的主要功能是: 在进行两个表格或者两个查询结果的时候,返回在第一个表格/查询结果中与第二个表格/查询结果不同样的记录。

结果不同样的记录包括两种情况:A,B 表中某一行的内容不同和A表中的数据在B表中不存在。总之返回的是A表的数据。

Hive中没有实现minus功能的函数,仅仅好分步实现。

一、找出在A表中的数据在B表中不存在的数据

insert overwrite table tmp_A partition(name='A_innot_B')

select

a.*

from A a left outer join  B b on (a.id = b.id)  where b.id is NULL;

二、找出在A表和B表都存在但内容不同的数据

UDF函数例如以下:

public class Minus extends UDF{

String A="";

String B="";

public Text evaluate(String... strs){

for(int i=0;i<strs.length/2;i++){

A=A+strs[i];

}

for(int i=strs.length/2;i<strs.length;i++){

B=B+strs[i];

}

if(A.replace(" ", "").equals(B.replace(" ", ""))){

return new Text("NULL");

}else{

return new Text(strs[0].replace(" ", ""));

}

}

相应的查询例如以下:

insert overwrite table tmp_A_diff

select iminus(

a.*,b.*

) from A a join B b on (a.id=b.id);

上面的sql会执行Minus的java程序,改程序语句中有循环。假设数据量非常大非常耗时间。job进度卡着不动。也能够使用hive自带的函数实现

insert overwrite table tmp_A_diff

select if(

        regexp_replace(

                  concat(                        

                        a.*

                        ),

                          " ","")

       =

        regexp_replace(

                 concat(

                        b.*

                        ),

                          " ","")

       ,NULL,b.id)

    from A a

             join 

         B b 

             on (a.id=b.id);

这样效率好些。

tmp_A_diff存储的是A表和B表都存在但内容不同的数据的id和一些“NULL”。

依据id获得每行数据

insert overwrite table tmp_A partition(name="A_in_B")

select            a.*

from tmp_A_diff b join A a on (a.id=b.id);

如今tmp_A中分区A_innot_B和分区A_in_B的数据就是oracle中(select * from A)minus (select * from B)的数据。

最新文章

  1. 浅谈linux 下,利用Nginx服务器代理实现ajax跨域请求。
  2. HDFS shell
  3. CommonJS的模块规范
  4. 解析Json的谷歌官方方法Gson和阿里巴巴的fastJson方法。
  5. 最小生成树Kruskal算法
  6. 010GCC程序编译
  7. spark概论,补充
  8. Codeforces Gym 100002 Problem F &quot;Folding&quot; 区间DP
  9. POJ3697+BFS+hash存边
  10. Java Executor 框架学习总结
  11. proxy pattern 代理模式
  12. 利用Tkinter和matplotlib两种方式画饼状图
  13. mybatis快速入门(八)-spring-mybatis动态代理整合
  14. SUSE11虚拟机安装与Oracle 11g安装
  15. java框架之springboot
  16. cowboy源码分析(二)
  17. js 奇偶判断
  18. JavaScript基础视频教程总结(031-040章)
  19. 【C++ Primer | 19】嵌套类、局部类
  20. MXNET:权重衰减

热门文章

  1. HTML5入门(一)
  2. 使用命令行将Excel数据表导入Mysql中的方法小结
  3. 浅谈Servlet(三)
  4. BZOJ 1050 旅行comf
  5. PHP-购物网站开发设计(一)
  6. codeforces 626E. Simple Skewness 三分
  7. python笔记之第一次使用(未入门)
  8. 让Apache支持中文Directory的最简方法
  9. 禁止apache显示目录索引
  10. vs2010经常使用快捷键