当前位置:   article > 正文

hive存储过程示例_hive存储过程写法

hive存储过程写法
--第一种:正常的存储
	CREATE OR REPLACE PROCEDURE CDP_PRO_TRUC_XXXX(v_date IN String)                             
	is																							
	--声明变量                                                                                  
	v_pro_name String                                                                           
	v_sql  String                                                                               
	v_step int                                                                                  
	error_meg String                                                                            
	begin                                                                                       
		---v_date  yyyy-mm-dd                                                                   
		---业务模块:XXXXXXX                                                                    
		---开发日期:2020-04-21                                                                 
		---开发人:XXXXX                                                                         
	--如果需要给变量赋初始值                                                                    
	v_step  := 0;                                                                               
	v_pro_name   := 'CDP_PRO_TRUC_XXXX';                                                        
	v_date := replace(v_date,'-','');                                                           
	--手动判断源表
	 IF (V_STEP = 0) THEN
	CDP_PRO_LOG(v_pro_name,v_step,to_char(sysdate,'yyyyMMddhhmmss'),v_date,'0')
	
	--0.1 取来源表和结果表的最大日期
	select to_char(date(max(txdate)),'yyyy-mm-dd') into person_base_date from jyt_t_personal_base_info; -- 2021-07-07
	select to_char(max(txdate),'yyyy-mm-dd') into base_info_date from ndata.CMT_EBC_BASE_INFO; -- 基本信息表 2021-07-08
	select to_char(max(txdate),'yyyy-mm-dd') into cbk_cls_date  from ndata.LGF_PK_CBK_CLS; -- 渠道信息表 2021-07-08
	
	SELECT to_char(date(max(txdate)),'yyyy-mm-dd') into change_maxdate FROM jyt_t_wy_sjyh_change ; --20210705 2021-07-05
	dbms_output.put_line('结果表最大日期:'||change_maxdate);
	
	--0.2 根据参数判断数据执行日期,如果参数无效根据结果表日期去计算;
	if (v_date is null or v_date = '') then
		-- 判断结果日期是否为空,为空则赋值铺底日期上个周期的数据
		if (change_maxdate is null or change_maxdate = '') then
		change_maxdate := '2021-07-06';
		end if ;
		-- 计算下一次执行日期
		--select to_char(add_months(to_date(change_maxdate, 'YYYY-MM-DD'),1),'YYYY-MM-DD') into next_exec_date  FROM DUAL;
		select DATE_ADD(change_maxdate, 1) into next_exec_date   FROM system.DUAL;
	else
		next_exec_date := v_date;
	end if;
	--0.3 比较执行日期和源表日期,不符合要求不执行
		if (next_exec_date > person_base_date or next_exec_date > base_info_date or next_exec_date > cbk_cls_date ) then
			dbms_output.put_line('不执行');
			-- 如果未满足条件,则删除文本表,防止数据重复插入
			v_sql := 'truncate table jyt_wy_sjyh_change_x'
			execute immediate v_sql; 
		V_STEP := V_STEP + 100;
		dbms_output.put_line('不正常执行,执行的步数:'||V_STEP);
		else
		dbms_output.put_line('执行');
		end if;
	-- 需要使用去掉“-’的日期
	next_exec_date_trim := replace(next_exec_date,'-','');
	dbms_output.put_line('执行日期为: '||next_exec_date);
	dbms_output.put_line('执行日期去掉‘-’为: '||next_exec_date_trim);
	dbms_output.put_line('jyt_t_personal_base_info最大日期为: '||person_base_date);
	dbms_output.put_line('基本信息表的最大日期: '||base_info_date);
	dbms_output.put_line('渠道信息表最大日期: '||cbk_cls_date);
	
	CDP_PRO_LOG(v_pro_name,v_step,to_char(sysdate,'yyyyMMddhhmmss'),v_date,'1')
	V_STEP := V_STEP + 1;
	END IF;
	
	if (v_step = 1)  then                                                                      
	---按步骤执行 脚本日志监控                                                                 
	CDP_PRO_LOG(v_pro_name,v_step,to_char(sysdate,'yyyyMMddhhmmss'),v_date,'0')                 
																								
	v_sql := 'truncate table CDP_XXXXXXXX';                                                    
	DBMS_OUTPUT.PUT_LINE(v_sql);                                                               
	execute immediate v_sql;                                                                   
	CDP_PRO_LOG(v_pro_name,v_step,to_char(sysdate,'yyyyMMddhhmmss'),v_date,'1')                 
	v_step :=v_step+1
	end IF
	
	exception
	when others then
	error_meg:=sqlerrm
	CDP_PRO_LOG(v_pro_name,v_step,to_char(sysdate,'yyyyMMddhhmmss'),error_meg,'e')
	return
	end CDP_PRO_TRUC_XXXX;	
--存储调起
DECLARE 
yb_max_date STRING
result_max_date string
BEGIN 
	
	yb_max_date:= '2022-02-22';
	result_max_date := '2022-02-22'
	WHILE result_max_date < yb_max_date AND result_max_date <> ''
	LOOP 
	   result_max_date := date_add(result_max_date,1)
	  	dbms_output.put_line(result_max_date);
        --CDP_PRO_T_EMP_INFO_DAY(result_max_date);
	END LOOP
END 	


----第二种:数据中台,任务调度存储
--	CREATE OR REPLACE PROCEDURE  CDP_PRO_RGS_XXXX (v_date IN String)
--	is
--		v_pro_name String
--		v_sql  String 
--		v_step int
--		error_meg String 
--	begin
--		/**
--		*存储入参及格式: v_date  yyyy-mm-dd                
--		*业务模块:数据中台——贵金属存储
--		*开发日期:2020-06-17              
--		*开发人: 张晓波                     
--		*/
--		v_step  := 1
--		v_pro_name   := 'CDP_PRO_RGS_XXXX'
--		---脚本最开始 将执行状态置为 正在执行
--		UPDATE cdp_t_pro_status t SET t.is_running='0' ---0正在执行  1执行完毕
--		WHERE t.pro_name=v_pro_name;
--		--调度表    插入本存储最新一条的状态status
--		CDP_PRO_INSERT_JOB_BEG(v_pro_name,v_date);
--	
--	if (v_step = 1)  then
--	CDP_PRO_LOG(v_pro_name,v_step,to_char(sysdate,'yyyyMMddhhmmss'),v_date,'0')
--		v_sql := 'truncate table CDP_T_RGS_INFO';
--		DBMS_OUTPUT.PUT_LINE(v_sql);                                                               
--		execute immediate v_sql
--	
--	CDP_PRO_LOG(v_pro_name,v_step,to_char(sysdate,'yyyyMMddhhmmss'),v_date,'1')
--	v_step :=v_step+1
--	end IF	
--	if (v_step = 2)  then
--	CDP_PRO_LOG(v_pro_name,v_step,to_char(sysdate,'yyyyMMddhhmmss'),v_date,'0')
--		v_sql := 'truncate table CDP_T_RGS_INFO_MERGE'
--		execute immediate v_sql		
--		--插入数据,满足条件就更新,不满足就插入一条
--		MERGE INTO cpd_t_cust_label p1
--		USING CDP_T_RGS_INFO_MERGE p2
--		ON (p1.CUST_BASE_ZZHM = p2.cert_code)
--		when matched then
--			update
--				SET
--				p1.prod_is_gjs = '1'
--		WHEN NOT MATCHED THEN
--		INSERT (cust_base_zzhm,prod_is_gjs)
--		values(cert_code,'1');
--		--更新剩余不为空的值
--		UPDATE cpd_t_cust_label SET prod_is_gjs = '0' WHERE  prod_is_gjs IS NULL;	
--	CDP_PRO_LOG(v_pro_name,v_step,to_char(sysdate,'yyyyMMddhhmmss'),v_date,'1')
--	v_step :=v_step+1
--	end IF	
--	if (v_step = 3)  then
--	CDP_PRO_LOG(v_pro_name,v_step,to_char(sysdate,'yyyyMMddhhmmss'),v_date,'0')
--		--脚本结束
--		UPDATE cdp_t_pro_status t SET t.is_running='1' ---0正在执行  1执行完毕
--		WHERE t.pro_name=v_pro_name;
--		--更新结果表 日期以及设定下次需要执行日期exectime
--		CDP_PRO_UPD_JGTABEL(replace(v_pro_name,'_PRO_','_T_')); ---注意此处参数为表名
--	CDP_PRO_LOG(v_pro_name,v_step,to_char(sysdate,'yyyyMMddhhmmss'),v_date,'1')
--	v_step :=v_step+1
--	end IF	
--	if (v_step = 4)  then
--	CDP_PRO_LOG(v_pro_name,v_step,to_char(sysdate,'yyyyMMddhhmmss'),v_date,'0')
--		--调度表,更新是否可以执行状态(挂起存储)
--		CDP_PRO_INSERT_JOB_END(v_pro_name);  --注意此处参数为存储名
--	CDP_PRO_LOG(v_pro_name,v_step,to_char(sysdate,'yyyyMMddhhmmss'),v_date,'1')
--	v_step :=v_step+1
--	end IF
--	exception
--	when others then
--	error_meg:=sqlerrm
--	CDP_PRO_LOG(v_pro_name,v_step,to_char(sysdate,'yyyyMMddhhmmss'),error_meg,'e')
--	return
--	END CDP_PRO_RGS_XXXX;	
--	--调用存储过程
--	--CALL CDP_PRO_RGS_XXXX("2020-06-07");
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/176902
推荐阅读
相关标签
  

闽ICP备14008679号