将下面代码改写成hive create procedure "rptdev"."sp_wjq_jf_value_dhfz_show"( in @data_date integer default cast("dateformat"("now"()-1,'yyyymmdd') as integer), in @is_run_flag1 integer default 1, in @is_run_flag2 integer default 10 ) on exception resume begin declare @stat_date varchar(8); --统计日期 declare @month_id integer; --统计月份 declare @month_first_date varchar(8); --统计月的第一天 set @stat_date = convert(varchar(8),@data_date); set @month_id = @data_date/100; set @month_first_date = "dateformat"(@data_date,'yyyymm01'); --统计月的第一天 truncate table "rptdev"."rpt_wjq_jf_value_dhfz_list"; insert into "rpt_wjq_jf_value_dhfz_list"( "cust_id","cust_name","price","gift_code","gift_name" ) select "cust_id","cust_name","price","gift_code","gift_name" --into rpt_wjq_jf_value_dhfz_list from "zwfxdev"."TB_COMM_CM_INT_USE_GIF_ALL" where convert(date,"change_date") >= @month_first_date and convert(date,"change_date") <= @stat_date; end
时间: 2023-11-12 22:04:19 浏览: 111
Hive不支持使用变量来作为表名或者列名,因此需要对代码进行一些修改。以下是修改后的代码:
```
CREATE PROCEDURE `rptdev`.`sp_wjq_jf_value_dhfz_show`(IN data_date INT, IN is_run_flag1 INT DEFAULT 1, IN is_run_flag2 INT DEFAULT 10)
BEGIN
DECLARE stat_date STRING; --统计日期
DECLARE month_id INT; --统计月份
DECLARE month_first_date STRING; --统计月的第一天
SET stat_date = CAST(data_date AS STRING);
SET month_id = data_date / 100;
SET month_first_date = CONCAT(SUBSTR(stat_date, 1, 6), '01'); --统计月的第一天
TRUNCATE TABLE `rptdev`.`rpt_wjq_jf_value_dhfz_list`;
INSERT INTO `rptdev`.`rpt_wjq_jf_value_dhfz_list`(`cust_id`, `cust_name`, `price`, `gift_code`, `gift_name`)
SELECT `cust_id`, `cust_name`, `price`, `gift_code`, `gift_name`
FROM `zwfxdev`.`TB_COMM_CM_INT_USE_GIF_ALL`
WHERE date_format(`change_date`, 'yyyyMMdd') >= month_first_date
AND date_format(`change_date`, 'yyyyMMdd') <= stat_date;
END
```
在 Hive 中,变量必须使用 SET 命令进行赋值,而不是使用 DECLARE 命令。同时,Hive 支持使用 date_format 函数来格式化日期,因此将原来的 "dateformat" 函数替换为了 date_format 函数。另外,由于 Hive 不支持 truncate table,因此需要使用 DELETE FROM 命令来清空表。
阅读全文