数据开发(三)_weixin_30341745的博客-程序员秘密

一、Hive概述

        Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据表,并提供类似于SQL(HiveSQL)的操作功能。在Hive中,本质上是将SQL转换成为MapReduce程序。

二、

1、建表语句

CREATE TABLE `app.app_test`(
  `data_dt` string COMMENT '时间', 
  `start_city_id` string COMMENT '城市ID', 
  `start_city_name` string COMMENT '城市名称', 
  `predict_list` string COMMENT '序列', 
  `order_num` string COMMENT '单量')
COMMENT '分拣中心预测表--预处理'

PARTITIONED BY ( `dt` string)

ROW FORMAT DELIMITED 
  FIELDS TERMINATED BY '\t' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  'hdfs://ns14/user/mart_coo/app.db/app_test'
TBLPROPERTIES (
  'transient_lastDdlTime'='1527746321')
(1)STORED AS TEXTFILE:默认的是文本格式,当然也可以通过设置hive.default.fileformat修改默认设置;使用DELIMITED语句解析分割文件,通过ESCAPED BY语句设置分隔符的转义符号,当数据中含有分隔符时,就必须转义;通过NULL DEFINED AS语句可以设置一个自定义的空处理格式,默认情况下NULL='\N'
②STORED AS SEQUENCEFILE:压缩序列文件格式
③STORED AS ORC:ORC文件格式
④STORED AS PARQUET
⑤STORED AS AVRO
⑥STORED AS RCFILE:Record Columnar File
⑦STORED BY:non-native table format
⑧INPUTFORMAT and OUTPUTFORMAT
(2)PARTITIONED BY
在创建表时,使用PARTITIONED BY语句,则所创建表就是分区表;分区表可以有一个或多个分区列,给唯一的分区列值创建一个目录。表或分区可以继续通过CLUSTERED BY细分桶,使用SORT BY语句使桶内的数据按升序或降序排序,在某些情况下,可以提升某种查询的性能。
注意点:①分区列式虚拟的,不属于数据本身 ②分区列不能和表结构字段重名,如果需要直接用表结构字段中的名字作为分区列,那必须将表结构中字段重新命名,否则会报错
(3)外部表
创建外部表时,通过指定location语句的路径来覆盖配置文件中指定的文件夹,外部表的特点:当外部表被删除时,其对应的数据并非也从系统中删除。

 2、查询表

三、注意编码格式

1、报错

 

出现这种情况时是格式问题。

重新建个文本,复制粘贴下试试。

四、

1、建表

drop table app.app_basic_dashboard_goods_sale_predict_daily;
CREATE TABLE app.app_basic_dashboard_goods_sale_predict_daily (
  seller_id bigint COMMENT '商家id', 
  seller_name string COMMENT '商家名称', 
  dept_id bigint COMMENT '事业部门id', 
  dept_no string COMMENT '事业部门编号',  
  dept_name string COMMENT '事业部名字', 
  goods_id bigint COMMENT '商品id', 
  goods_no string COMMENT '商品序号', 
  goods_name string COMMENT '商品名称', 
  warehouse_id bigint COMMENT '入仓id', 
  warehouse_no string COMMENT '入仓编号', 
  warehouse_name string COMMENT '入仓名称', 
  in_warehouse_city string COMMENT '入仓城市',
  satisfy_alpha string COMMENT '入仓服务水平C', 
  safe_stock_days string COMMENT '安全库存天数', 
  alt string COMMENT '出仓ALT', 
  vlt string COMMENT '出仓VLT', 
  in_stock_safety_num int COMMENT '安全库存', 
  target_stock_days string COMMENT '目标库存天数', 
  bp string COMMENT 'BP', 
  out_warehouse_no string COMMENT '出仓编号', 
  out_warehouse_name string COMMENT '出仓名称', 
  out_warehouse_city string COMMENT '出仓城市', 
  in_stock_max_num int COMMENT '目标库存', 
  bef_sales_1d string COMMENT 'T-1日销量', 
  bef_sales_2d string COMMENT 'T-2日销量', 
  bef_sales_3d string COMMENT 'T-3日销量',
  bef_sales_4d string COMMENT 'T-4日销量', 
  bef_sales_5d string COMMENT 'T-5日销量', 
  bef_sales_6d string COMMENT 'T-6日销量',
  bef_sales_7d string COMMENT 'T-7日销量', 
  in_stock_sales_14d string COMMENT '历史14日销量和', 
  in_stock_sales_28d string COMMENT '历史28日销量和',
  predict_sales_1d string COMMENT 'T+1日预测销量',
  predict_sales_2d string COMMENT 'T+2日预测销量', 
  predict_sales_3d string COMMENT 'T+3日预测销量',
  predict_sales_4d string COMMENT 'T+4日预测销量',
  predict_sales_5d string COMMENT 'T+5日预测销量', 
  predict_sales_6d string COMMENT 'T+6日预测销量',
  predict_sales_7d string COMMENT 'T+7日预测销量',
  in_stock_predict_sales_14d string COMMENT '14日预测销量和', 
  in_stock_predict_sales_28d string COMMENT '28日预测销量和',
  yn int COMMENT '删除标识 1为没删,0为删除', 
  create_pin string COMMENT '创建人', 
  update_pin string COMMENT '更新人', 
  create_time timestamp COMMENT '创建时间', 
  update_time timestamp COMMENT '更新时间', 
  ts timestamp COMMENT '时间戳')
COMMENT 'KA商品销量预测接口表'
PARTITIONED BY ( 
  dt string)
ROW FORMAT DELIMITED 
  FIELDS TERMINATED BY '\t' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'

2、

2.1只删除表中数据,不删除表

truncate table app.app_basic_dashboard_goods_sale_predict_daily_tem

2.2删除分区

ALTER TABLE app_basic_dashboard_goods_sale_predict_daily_tem
DROP partition(dt = '2018-08-16')

 

2.3 按条件删除

2.3删除表及其数据

drop table app.app_basic_dashboard_goods_sale_predict_daily_tem

 显示建表语句

show create app.app_XXXXXXX

 

3、配置任务

#!/usr/bin/env python3
################################################################
# AUTHOR:         wn
# CREATED TIME:   2018-08-09
# MODIFIED BY:    
# MODIFTED TIME:  
# REVIEWED BY:    
# REVIEWED TIME:  
# COMMENTS: goods

################################################################
#===============================================================================
#  FILE: exe_app_basic_goods_stock_num_daily_da_d.py
#  USAGE: ./exe_app_basic_goods_stock_num_daily_da_d.py
#  SRC_TABLE: 
#  TGT_TABLE: app_basic_goods_stock_num_daily_da
#===============================================================================
import sys
import os
import time
import datetime
import logging 
import calendar

sys.path.append(os.getenv('HIVE_TASK'))
from HiveTask import HiveTask
ht = HiveTask()
today = ht.oneday(1)[0:10]
yesterday  = ht.oneday(0)[0:10] 


sql1 = """
use app;
	insert overwrite table app.app_basic_dashboard_goods_sale_predict_daily_tem partition
	(
	   dt = '"""+yesterday+"""'
	) 
	select
	c.seller_id, --商家编号
	c.seller_name, --商家名称
	c.dept_id,  --事业部id
	c.dept_no, --事业部编号
	c.dept_name, --事业部名称
	--c.seller_no, --供应商编号
	--c.seller_name, --供应商名称
	c.goods_id, --商品id
	c.goods_no, --商品编号
	c.goods_name, --商品名称
	c.warehouse_id, --入仓id
	c.warehouse_no, --入仓编号
	c.warehouse_name, --入仓名称
	h.loc_city_name as in_warehouse_city, --入仓城市
	case
		when d.satisfy_alpha is null
		then '0.8'
		else d.satisfy_alpha
	end as satisfy_alpha, -- 出仓服务水平c (basis)
	case
		when d.safe_stock_days is null
		then '5'
		else d.safe_stock_days
	end as safe_stock_days, -- 安全库存天数(basis)
	case
		when d.alt is null
		then '10'
		else d.alt
	end as alt, -- 出仓alt(小时)(basis)
    case
		when j.totaltime is null
		then '36'
		else j.totaltime
	end as vlt, --运输时间
	f.in_stock_safety_num as in_stock_safety_num, --安全库存(计划调拨表取数)
	case
		when d.target_stock_days is null
		then '10'
		else d.target_stock_days
	end as target_stock_days, -- 目标库存天数(basis)
	case
		when d.bp is null
		then '20'
		else d.bp
	end as BP, -- BP
	f.out_warehouse_no as out_warehouse_no, --配出仓编码
	f.out_warehouse_name as out_warehouse_name, --配出仓名称
	i.loc_city_name as out_warehouse_city, --入仓城市
	f.in_stock_max_num as in_stock_max_num, --目标库存(计划调拨表取数)
	case
		when split(g.sales_week_detail, ',') [6] is NULL 
		then '0'
		else split(g.sales_week_detail, ',') [6]
	end as bef_sales_1d, --T-1日销量(逆向)
	case
		when split(g.sales_week_detail, ',') [5] is NULL
		then '0'
		else split(g.sales_week_detail, ',') [5]
	end as bef_sales_2d, --T-2日销量
	case
		when split(g.sales_week_detail, ',') [4] is NULL
		then '0'
		else split(g.sales_week_detail, ',') [4]
	end as bef_sales_3d, --T-3日销量
	case
		when split(g.sales_week_detail, ',') [3] is NULL
		then '0'
		else split(g.sales_week_detail, ',') [3]
	end as bef_sales_4d, --T-4日销量
	case
		when split(g.sales_week_detail, ',') [2] is NULL
		then '0'
		else split(g.sales_week_detail, ',') [2]
	end as bef_sales_5d, --T-5日销量
	case
		when split(g.sales_week_detail, ',') [1] is NULL
		then '0'
		else split(g.sales_week_detail, ',') [1]
	end as bef_sales_6d, --T-6日销量
	case
		when split(g.sales_week_detail, ',') [0] is NULL
		then '0'
		else split(g.sales_week_detail, ',') [0]
	end as bef_sales_7d, --T-7日销量
	case
		when g.sales_14d is NULL
		then '0'
		else g.sales_14d
	end as in_stock_sales_14d, --14日销量
	case
		when g.sales_28d is NULL
		then '0'
		else g.sales_28d
	end as in_stock_sales_28d, --28日销量
	case
		when split(g.predict_sales_week_detail, ',')[0] is NULL and m.avg_year_sellnum is NULL --都空为0
		then '0'
		when split(g.predict_sales_week_detail, ',')[0] is NULL and m.avg_year_sellnum is not NULL --没有预测值,按销量平均值计
		then round(m.avg_year_sellnum)
		else split(g.predict_sales_week_detail, ',') [0] --预测值计
	end as predict_sales_1d, --T+1日预测销量(正向)
	case
		when split(g.predict_sales_week_detail, ',')[1] is NULL and m.avg_year_sellnum is NULL
		then '0'
		when split(g.predict_sales_week_detail, ',')[1] is NULL and m.avg_year_sellnum is not NULL
		then round(m.avg_year_sellnum)
		else split(g.predict_sales_week_detail, ',') [1]
	end as predict_sales_2d, --T+2日预测销量
	case
		when split(g.predict_sales_week_detail, ',')[2] is NULL and m.avg_year_sellnum is NULL  
		then '0'
		when split(g.predict_sales_week_detail, ',')[2] is NULL and m.avg_year_sellnum is not NULL 
		then round(m.avg_year_sellnum)
		else split(g.predict_sales_week_detail, ',') [2]
	end as predict_sales_3d, --T+3日预测销量
	case
		when split(g.predict_sales_week_detail, ',')[3] is NULL and m.avg_year_sellnum is NULL
		then '0'
		when split(g.predict_sales_week_detail, ',')[3] is NULL and m.avg_year_sellnum is not NULL
		then round(m.avg_year_sellnum)
		else split(g.predict_sales_week_detail, ',') [3]
	end as predict_sales_4d, --T+4日预测销量
	case
		when split(g.predict_sales_week_detail, ',')[4] is NULL and m.avg_year_sellnum is NULL
		then '0'
		when split(g.predict_sales_week_detail, ',')[4] is NULL and m.avg_year_sellnum is not NULL
		then round(m.avg_year_sellnum)
		else split(g.predict_sales_week_detail, ',') [4]
	end as predict_sales_5d, --T+5日预测销量
	case
		when split(g.predict_sales_week_detail, ',')[5] is NULL and m.avg_year_sellnum is NULL
		then '0'
		when split(g.predict_sales_week_detail, ',')[5] is NULL and m.avg_year_sellnum is not NULL
		then round(m.avg_year_sellnum)
		else split(g.predict_sales_week_detail, ',') [5]
	end as predict_sales_6d, --T+6日预测销量
	case
		when split(g.predict_sales_week_detail, ',')[6] is NULL and m.avg_year_sellnum is NULL
		then '0'
		when split(g.predict_sales_week_detail, ',')[6] is NULL and m.avg_year_sellnum is not NULL
		then round(m.avg_year_sellnum)
		else split(g.predict_sales_week_detail, ',') [6]
	end as predict_sales_7d, --T+7日预测销量
	case
		when g.predict_sales_14d is NULL and m.avg_year_sellnum is NULL
		then '0'
		when g.predict_sales_14d is NULL and m.avg_year_sellnum is not NULL
		then round(m.avg_year_sellnum*14)
		else g.predict_sales_14d
	end as in_stock_predict_sales_14d, --14日预测销量
	case
		when g.predict_sales_28d is NULL and m.avg_year_sellnum is NULL
		then '0'
		when g.predict_sales_28d is NULL and m.avg_year_sellnum is not NULL
		then round(m.avg_year_sellnum*28)
		else g.predict_sales_28d
	end as in_stock_predict_sales_28d, --28日预测销量
    1 AS yn, --删除标识 1为没删,0为删除 
    'plumber' AS create_pin, --创建人
    'plumber' AS update_pin , --更新人
    current_timestamp AS create_time, --创建时间
    current_timestamp AS update_time, --更新时间
    current_timestamp AS ts --时间戳
from
	fdm.fdm_eclp_stock1_saleable_warehouse_stock_chain c --可销售库存表
join
	(
		select
			a.dept_no,
			a.goods_id,
			a.warehouse_no,
			max(a.start_date) as start_date
		from
			fdm.fdm_eclp_stock1_saleable_warehouse_stock_chain a
		where
			a.dept_no in
			(
				select dept_no from app.app_basic_dashboard_goods_seller --商户名称表
			)
			and a.dp = 'ACTIVE'
			and a.yn = 1
		group by
			a.dept_no,
			a.warehouse_no,
			a.goods_id
	)
	b
on
	c.dept_no = b.dept_no
	and c.warehouse_no = b.warehouse_no
	and c.goods_id = b.goods_id
	and c.start_date = b.start_date
left join fdm.fdm_log_scm_ka_allot_sys_pre_allot d --参数表
on
	c.dept_no = d.dept_no
	and c.warehouse_no = d.warehouse_no
	and c.goods_no = d.goods_id
	and d.yn = 1
	and d.dt = sysdate( - 1)
left join
	(
		select
			*
		from
			fdm.fdm_log_scm_ka_allot_allot_plan --调拨计划表
		where
			id in
			(
				select
					max(e.id)
				from
					fdm.fdm_log_scm_ka_allot_allot_plan e
				where
					e.dt = sysdate( - 1)
				group by
					e.dept_name,
					e.in_warehouse_no,
					e.goods_no
			)
			and dt = sysdate( - 1)
	)
	f
on
	f.dept_no = c.dept_no
	and f.in_warehouse_no = c.warehouse_no
	and f.goods_no = c.goods_no
left join app.app_ka_predict_sales_da g ---线下门店销量预测表
on
	c.dept_no = g.dept_no
	and c.goods_no = g.goods_no
	and c.warehouse_no = g.warehouse_no
	and g.dt = sysdate( - 1)
left join dim.dim_wms_store h --库房维表,取出入仓所属城市
on
	c.warehouse_name = h.dim_store_name
left join dim.dim_wms_store i --库房维表,取出仓所属城市
on
	f.out_warehouse_name = i.dim_store_name
left join
	(
		select
			startcityid,
			startcityname,
			endcityid,
			endcityname,
			totalaging,
			totaltime,
			yn
		from
			(
				select
					case
						when
							(
								startprovinceid in(1, 2, 3, 4)
							)
						then startprovinceid
						else startcityid
					end as startcityid,
					case
						when
							(
								startprovinceid in(1, 2, 3, 4)
							)
						then concat(startprovincename, '市')
						else startcityname
					end as startcityname,
					case
						when
							(
								endprovinceid in(1, 2, 3, 4)
							)
						then endprovinceid
						else endcityid
					end as endcityid,
					case
						when
							(
								endprovinceid in(1, 2, 3, 4)
							)
						then concat(endprovincename, '市')
						else endcityname
					end as endcityname,
					ceil(avg(totalaging)) as totalaging,
					ceil(avg(totaltime)) as totaltime,
					max(1) as yn
				from
					fdm.fdm_staticroutebatchgenerate_staticroutebatchgenerate_chain
				where
					dp = 'ACTIVE'
					and yn = 1
				group by
					case
						when
							(
								startprovinceid in(1, 2, 3, 4)
							)
						then startprovinceid
						else startcityid
					end,
					case
						when
							(
								startprovinceid in(1, 2, 3, 4)
							)
						then concat(startprovincename, '市')
						else startcityname
					end,
					case
						when
							(
								endprovinceid in(1, 2, 3, 4)
							)
						then endprovinceid
						else endcityid
					end,
					case
						when
							(
								endprovinceid in(1, 2, 3, 4)
							)
						then concat(endprovincename, '市')
						else endcityname
					end
			)
			route
	)
	j --vlt
on
	h.loc_city_name = j.startcityname
	and i.loc_city_name = j.endcityname
left join app.app_basic_goods_stock_num_daily_da  m
on 
   c.seller_id=m.seller_id 
   and c.warehouse_id=m.warehouse_id
   and c.goods_id=m.goods_id    
   and m.dt = sysdate( - 1)         
             
"""

ht.exec_sql(schema_name = 'app', table_name = 'app_basic_dashboard_goods_sale_predict_daily_tem', sql = sql1, merge_flag = True) 

 4、

#!/usr/bin/env python3
################################################################
# AUTHOR:         wn
# CREATED TIME:   2018-08-09
# MODIFIED BY:    
# MODIFTED TIME:  
# REVIEWED BY:    
# REVIEWED TIME:  
# COMMENTS: goods

################################################################
#===============================================================================
#  FILE: exe_app_basic_dashboard_goods_sale_predict_daily.py
#  USAGE: ./exe_app_basic_dashboard_goods_sale_predict_daily.py
#  SRC_TABLE: 
#  TGT_TABLE: app.app_basic_dashboard_goods_sale_predict_daily
#===============================================================================
import sys
import os
import time
import datetime
import logging 
import calendar

sys.path.append(os.getenv('HIVE_TASK'))
from HiveTask import HiveTask
ht = HiveTask()
today = ht.oneday(1)[0:10]
yesterday  = ht.oneday(0)[0:10] 


sql1 = """
use app;
	insert overwrite table app.app_basic_dashboard_goods_sale_predict_daily partition
	(
	   dt = '"""+yesterday+"""'
	) 
	select
	k.seller_id, --商家编号
	k.seller_name, --商家名称
	k.dept_id, --事业部id
	k.dept_no, --事业部编号
	k.dept_name, --事业部名称
	k.goods_id, --商品id
	k.goods_no, --商品编号
	k.goods_name, --商品名称
	k.warehouse_id, --入仓id
	k.warehouse_no, --入仓编号
	k.warehouse_name, --入仓名称
	k.in_warehouse_city, --入仓城市
	k.satisfy_alpha, -- 出仓服务水平c (basis)
	k.safe_stock_days, -- 安全库存天数(basis)
	k.alt, -- 出仓alt(小时)(basis)
	k.vlt, --运输时间
	case
		when k.in_stock_safety_num is null
			and
			(
				m.safe_stock_days + m.alt / 24 + m.vlt / 24
			)
			>= 0
			and
			(
				m.safe_stock_days + m.alt / 24 + m.vlt / 24
			)
			<= 1
		then round(m.satisfy_alpha *(m.safe_stock_days + m.alt / 24 + m.vlt / 24) * m.predict_sales_1d)
		when k.in_stock_safety_num is null
			and
			(
				m.safe_stock_days + m.alt / 24 + m.vlt / 24
			)
			> 1
			and
			(
				m.safe_stock_days + m.alt / 24 + m.vlt / 24
			)
			<= 2
		then round(m.satisfy_alpha *(m.safe_stock_days + m.alt / 24 + m.vlt / 24) *(m.predict_sales_1d + m.predict_sales_2d) / 2)
		when k.in_stock_safety_num is null
			and
			(
				m.safe_stock_days + m.alt / 24 + m.vlt / 24
			)
			> 2
			and
			(
				m.safe_stock_days + m.alt / 24 + m.vlt / 24
			)
			<= 3
		then round(m.satisfy_alpha *(m.safe_stock_days + m.alt / 24 + m.vlt / 24) *(m.predict_sales_1d + m.predict_sales_2d + m.predict_sales_3d) / 3)
		when k.in_stock_safety_num is null
			and
			(
				m.safe_stock_days + m.alt / 24 + m.vlt / 24
			)
			> 3
			and
			(
				m.safe_stock_days + m.alt / 24 + m.vlt / 24
			)
			<= 4
		then round(m.satisfy_alpha *(m.safe_stock_days + m.alt / 24 + m.vlt / 24) *(m.predict_sales_1d + m.predict_sales_2d + m.predict_sales_3d + m.predict_sales_4d) / 4)
		when k.in_stock_safety_num is null
			and
			(
				m.safe_stock_days + m.alt / 24 + m.vlt / 24
			)
			> 4
			and
			(
				m.safe_stock_days + m.alt / 24 + m.vlt / 24
			)
			<= 5
		then round(m.satisfy_alpha *(m.safe_stock_days + m.alt / 24 + m.vlt / 24) *(m.predict_sales_1d + m.predict_sales_2d + m.predict_sales_3d + m.predict_sales_4d + m.predict_sales_5d) / 5)
		when k.in_stock_safety_num is null
			and
			(
				m.safe_stock_days + m.alt / 24 + m.vlt / 24
			)
			> 5
			and
			(
				m.safe_stock_days + m.alt / 24 + m.vlt / 24
			)
			<= 6
		then round(m.satisfy_alpha *(m.safe_stock_days + m.alt / 24 + m.vlt / 24) *(m.predict_sales_1d + m.predict_sales_2d + m.predict_sales_3d + m.predict_sales_4d + m.predict_sales_5d + m.predict_sales_6d) / 6)
		when k.in_stock_safety_num is null
			and
			(
				m.safe_stock_days + m.alt / 24 + m.vlt / 24
			)
			> 6
			and
			(
				m.safe_stock_days + m.alt / 24 + m.vlt / 24
			)
			<= 7
		then round(m.satisfy_alpha *(m.safe_stock_days + m.alt / 24 + m.vlt / 24) *(m.predict_sales_1d + m.predict_sales_2d + m.predict_sales_3d + m.predict_sales_4d + m.predict_sales_5d + m.predict_sales_6d + m.predict_sales_7d) / 7)
		when k.in_stock_safety_num is null
			and
			(
				m.safe_stock_days + m.alt / 24 + m.vlt / 24
			)
			> 7
			and
			(
				m.safe_stock_days + m.alt / 24 + m.vlt / 24
			)
			<= 14
		then round(m.satisfy_alpha *(m.safe_stock_days + m.alt / 24 + m.vlt / 24) *(m.in_stock_predict_sales_14d) / 14)
		when k.in_stock_safety_num is null
			and
			(
				m.safe_stock_days + m.alt / 24 + m.vlt / 24
			)
			> 14
		then round(m.satisfy_alpha *(m.safe_stock_days + m.alt / 24 + m.vlt / 24) *(m.in_stock_predict_sales_28d) / 28)
		else round(k.in_stock_safety_num)
	end as in_stock_safety_num, --安全库存
	k.target_stock_days, -- 目标库存天数(basis)
	k.BP, -- BP
	k.out_warehouse_no, --配出仓编码
	k.out_warehouse_name, --配出仓名称
	k.out_warehouse_city, --出仓城市
	case
		when k.in_stock_max_num is null
		then round(m.satisfy_alpha * m.target_stock_days * m.in_stock_predict_sales_14d / 14 + m.BP)
		else round(k.in_stock_max_num)
	end as in_stock_max_num, --目标库存
	k.bef_sales_1d, --T-1日销量(逆向)
	k.bef_sales_2d, --T-2日销量
	k.bef_sales_3d, --T-3日销量
	k.bef_sales_4d, --T-4日销量
	k.bef_sales_5d, --T-5日销量
	k.bef_sales_6d, --T-6日销量
	k.bef_sales_7d, --T-7日销量
	k.in_stock_sales_14d, --14日销量
	k.in_stock_sales_28d, --28日销量
	k.predict_sales_1d, --T+1日预测销量(正向)
	k.predict_sales_2d, --T+2日预测销量
	k.predict_sales_3d, --T+3日预测销量
	k.predict_sales_4d, --T+4日预测销量
	k.predict_sales_5d, --T+5日预测销量
	k.predict_sales_6d, --T+6日预测销量
	k.predict_sales_7d, --T+7日预测销量
	k.in_stock_predict_sales_14d, --14日预测销量
	k.in_stock_predict_sales_28d, --28日预测销量
	1 AS yn, --删除标识 1为没删,0为删除
	'plumber' AS create_pin, --创建人
	'plumber' AS update_pin, --更新人
	current_timestamp AS create_time, --创建时间
	current_timestamp AS update_time, --更新时间
	current_timestamp AS ts --时间戳
from
	(
		select
			*
		from
			app.app_basic_dashboard_goods_sale_predict_daily_tem
		where
			dt = sysdate( - 1)
	)
	k
join
	(
		select
			*
		from
			app.app_basic_dashboard_goods_sale_predict_daily_tem
		where
			dt = sysdate( - 1)
	)
	m
on
	k.dept_no = m.dept_no
	and k.goods_no = m.goods_no
	and k.warehouse_no = m.warehouse_no      
             
"""

ht.exec_sql(schema_name = 'app', table_name = 'app_basic_dashboard_goods_sale_predict_daily', sql = sql1, merge_flag = True) 

 

转载于:https://www.cnblogs.com/ruo-li-suo-yi/p/9449996.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30341745/article/details/96027550

智能推荐

Python学习笔记——列表_Insomnia_X的博客-程序员秘密

创建和填充列表字面量法Python程序员将它称为一个字面列表,因为这个列表会一次性完成创建和填充(将列表中的对象赋给列表)&gt;&gt;&gt; odds=[1,3,5,7,9]在代码中“扩展”列表创建和填充列表的另一种方法是在代码中“扩展”列表:随着代码的执行,为列表追加对象&gt;&gt;&gt; nums=[]#创建空列表&gt;&gt;&gt; nums.extend([2,3,4])&gt;&gt;&gt; nums[2, 3, 4]使用list()函数lis

app开发 加强openssl证书校验_weixin_34010566的博客-程序员秘密

更新1.那么,服务器如何识别客户端的身份?我们如何保证数据传输过程中的安全性?要靠两个东西:使用AppKey做身份识别,使用AppSecret校验数据,最简单有效的办法还是打到.so库中。2.a和b生成两对公私钥 https://s4.51cto.com/wyfs02/M02/9A/70/wKiom1lV2tOgjaUbAAfY9aWxmNw46...

jdk8 Lambda_Coder_Hunter的博客-程序员秘密

Java8初体验(一)lambda表达式语法感谢同事【天锦】的投稿。投稿请联系 [email protected]本文主要记录自己学习Java8的历程,方便大家一起探讨和自己的备忘。因为本人也是刚刚开始学习Java8,所以文中肯定有错误和理解偏差的地方,希望大家帮忙指出,我会持续修改和优化。本文是该系列的第一篇,主要介绍Java8对屌丝码农最有吸引力的一个特性—lambda表达

IBinder、BBinder和BpBinder_qilu0882的博客-程序员秘密

IBinder、BBinder和BpBinder注:这篇文章应该是根据某个博客记录下来的,但记不得链接了,请原作者见谅。这3个类,是对Android Binder框架的抽象,其实这个BBinder,改成BnBinder可能更形象一些。但是要注意的是,一个IXXXService的继承图中,BpBinder并不在这个继承关系之中,也就是说BpBinder并没有子类。但是BBinder是在这个继承...

这应该是最全的Pod调度策略_程序员面试吧的博客-程序员秘密

首先说明,文章很长很长很长很长????......建议先收藏API Server接受客户端提交Pod对象创建请求后的操作过程中,有一个重要的步骤就是由调度器程序kube-scheduler从当前集群中选择一个可用的最佳节点来接收并运行它,通常是默认的调度器kube-scheduler负责执行此类任务。对于每个待创建的Pod对象来说,调度过程通常分为两个阶段—》过滤—》打分,过滤阶段用来过滤掉不符合调度规则的Node,打分阶段建立在过滤阶段之上,为每个符合调度的Node进行打分,分值越高则被调度到该Node

随便推点

2021个人训练赛第9场_Myajlk的博客-程序员秘密

2021UPC个人训练赛第9场问题 A: Linear Cellular Automata问题 B: Permutation Arrays问题 C: Error Correction问题 D: Ecosystem问题 E: Soundex问题 F: Antiarithmetic问题 G: Only I did it!问题 H: Square Numbers问题 I: 面积问题 J: 分数问题 K: 立方问题 L: 排队问题 M: 调研问题 A: Linear Cellular Automata题目描述

mysql开启日志记录及清理general_log文件_general_log.csv_小然然无敌的博客-程序员秘密

日志开启set global log_output = ‘TABLE’;set global general_log = ‘ON’;查看是否开启成功show variables like ‘%general_log’;也可以在数据库中查看日志文件是否开始记录清理general_log文件如果mysql在部署的时候将general_log.CSV(注意csv是大写)文件映射到了本地目录,那么可以直接清理该文件我的mysql使用docker部署,部署的时候将mysql的data文件映射到了本地

如果要存 IP 地址,用什么数据类型比较好?大部人都会答错!_hello-java-maker的博客-程序员秘密

今日推荐借助Redis锁,完美解决高并发秒杀问题还在直接用JWT做鉴权?JJWT真香Spring Boot 操作 Redis 的各种实现Fluent Mybatis 牛逼!...

Gradle之apt, annotationProcessor和kapt_gradle annotationprocessor_不能止步的博客-程序员秘密

介绍了APT的概念和处理流程,Java和Kotlin两种语言下如何在Gradle中配置APT,以及由于APT配置方式用错导致使用ARouter路由时始终提示“There is no route match the path [/xxx/xxx], in group [xxx][ ]”

3.9闲聊数据类型_S40D1的博客-程序员秘密

一、获得关于类型的 信息 python 提供了一个函数,可以明确明确告诉我们变量类型,这就是type()函数:>>> type('520')>>> type(5.20)>>> type(5e20)>>> type(520)>>> type(True)>>> 同时isinstance()这个BIF来确定变量类型,它会根据两个返回一个布尔类型的值,True表示类型一致,Fa

项目无法导入,关于Gradle踩过的一些坑_gradle import org.junit.jupiter.params导不进来_Study_Abc的博客-程序员秘密

关于Gradle踩过的一些坑写在前面这是我在使用AS中遇过的一些坑,总结出来供大家参考交流,声明这是一篇技(傻)术(瓜)文(干)章(货),大神请绕道,里面讲的一些可能你们早已掌握或有更好的解决方法 ---> 下面让我们进入正题AS导入项目有没有在使用AS导入从GitHub下载的项目或者朋友的项目二无法导入,一直卡到下面的界面![这里写图片描述](http://img.blog.

推荐文章

热门文章

相关标签