赞
踩
这里转换成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表中需要删除的数据
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。