当前位置:   article > 正文

oracle存储过程的SQL语句转化成HIVE的SQL_oracle sql 转换成 hive sql -子查询转关联查

oracle sql 转换成 hive sql -子查询转关联查

这里转换成hive的sql语句:hql,其根本问题是为了解决hive不支持事物处理、数据删除操作,这两点是hive的sql和传统sql差异的主要点;
就比如一段存储过程,现在需要迁移到hive上运行,一般主要过程:声明变量、初始化批次状态表(记录程序运行的位置及数据状态)、业务数据处理(事物处理)、更新批次状态表、删除业务数据(无效数据\已处理数据);
声明变量:通过java工具(项目开发中的一个功能)将声明的变量(原先是oracle存储过程声明的)转成shell变量声明,通过shell传参的方式传到hql中使用;针对循环变量通过shell的for循环实现循环获取;
初始化批次状态:这里基本上和sql差不多,新增批次表数据,初始化批次数据状态
业务数据处理:主要是事物处理(更新操作),保留原先处理过程不变,如果是更新,比如 要更新a表(name、score、date)中的数据(更新条件是大于一个月之前的数据:scored),首先简历一张转换表b(name),存储大于一个月之前的数据(保留name),
              通过name将a表、b表比对,将在b中表但不在a表中的socre(要更新的数据)全部取出来和不在b表但在a表的score(不需要更新的)合并到一起覆盖到a表中,这样a表中的数据就实现了更新,如果更新条件更为复杂
              比如说 通过c表(name、score)更新,a表中和c表中共有的name需要将a表中score更新为c表中的值,那提取b表时,就使用c表关联a表(name关联)提取的结果作为b表的数据即可;
更新批次状态:类似上面的更新过程,将批次状态表中的状态值更新掉;
删除业务数据:在上面的更新过程中,将b表存储的更新数据提取为要删除的数据(日期大约一个月或c表为删除提取条件),然后将a表和b表关联,将不在b表但在a表中的数据覆盖到a表中,从而实现清除a表中需要删除的数据


 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/176892
推荐阅读
相关标签
  

闽ICP备14008679号