数据开发(三)_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

智能推荐

有限差分方法的matlab编程,有限差分方法的MATLAB编程_孙佳纯的博客-程序员秘密

有限差分方法的MATLAB编程实践中应用的电磁场,其场域的边界大多数比较复杂,使解析法难以应用.虽然有些电磁问题经简化后能解析求解,但解的(本文共6页)阅读全文&gt;&gt;以二叉树方法和有限差分方法为例,探讨如何利用MATLAB进行美式期权...(本文共4页)阅读全文&gt;&gt;本文研究了时域有限差分方法在复杂目标电磁散射和光学微腔谐振特性方面的应用,主要完成了以下工作:设计了二维和三维F...

lucy产品为何被上海世博重视?_13311920232_yeslucy的博客-程序员秘密

  我们都知道,一个产品的价值决定它被人们重视程度,如果说能被大家一致认同的产品,我相信此款产品肯定有大家认同的价值。对于机遇难逢的世博盛世会推荐此款产品,相信,也是世博委员以及人们一致对同类产品,进行相对比较,得出其最优的产品。那么究竟几大优点让《lucy陪你说英语》成为世博的宠儿呢?一、看其技术方面:《lucy陪你说英语》产品,是由美国、加拿大等大型英语研发机构,组织的强大专业

运行jest测试脚本时报错“Failed at the [email protected] test script”_failed at the [email protected] test script._huang6ing的博客-程序员秘密

报这个错是因为你package.json文件中的jest版本太高导致的,降低一下版本就可以了(亲测24.8.0可用)将jest版本修改后在控制台重新执行一下npm install 便不会在报错了

嵌入式+机器学习_嵌入式机器学习_小赵10010的博客-程序员秘密

嵌入式结合机器学习方向的两篇比较好的文章,记录一下。1、https://www.zhihu.com/question/302531700/answer/5542198862、http://www.elecfans.com/d/611618.html

odoo14开启开发者模式_odoo14启用开发者模式_xiliuhu的博客-程序员秘密

常用的两类方式:1、创建数据库后,一般情况下,默认进入就是开发者模式,登录时还会在登录按钮下面显示以超级用户登录的入口。如果之前退出了开发者模式,再进行登录时就不是开发者模式了,而且登录按钮下面也没有了以超级用户登录的入口,有时就算重新建库登录可能也不会默认开启开发者模式。解决的办法是:安装一些系统自带应用,比如Employees后,点击左上角然后的展开菜单中进入设置,在一般设置的底部有打开开发者模式的入口2、无论什么情况下,在页面的url中保证包含?debug=1,就会切换到开发者模.

随便推点

如何在树莓派3上运行Minos Hypervisor_树莓派 minos_lemin9538的博客-程序员秘密

如何在树莓派3上运行Minos Hypervisor大家好,今天录制了一个简短的视频展示如何在树莓派3B+上运行和使用Minos Hypervisor. 视频地址如下,直接点击树莓派3上运行Minos Hypervisor http://v.youku.com/v_show/id_XNDAyMDg3NzkyMA==.html?spm=a2h3j.8428770.3416059.1Minos ...

Corona如何消除过度的噪点?_cr噪点很多_Renderbus瑞云渲染农场的博客-程序员秘密

对于 Corona 和其他路径跟踪渲染器,细微的高频噪点是正常的,尤其是在渲染过程开始时。但是经过多次传递或长时间渲染后仍不会消失的强烈噪点可能表明渲染引擎在您的场景设置中遇到了一些问题。从 Corona 1.4 开始,您可以使用去噪功能通过巧妙地模糊处理来消除噪点。但是,建议确保渲染设置或场景本身没有错误。为了有效地消除有问题的噪点,您需要找出它的来源。持续噪点的最常见原因包括:错误的材料设置:这通常表现为仅在场景的特定部分(某些对象或某些材料)中可见的噪点。如何创建基础材料? 不切

YT15-HDU-LELE的涂色难题_SAP 皮德憨的博客-程序员秘密

Problem Description 人称“AC女之杀手”的超级偶像LELE最近忽然玩起了深沉,这可急坏了众多“Cole”(LELE的粉丝,即"可乐"),经过多方打探,某资深Cole终于知道了原因,原来,LELE最近研究起了著名的RPG难题:有排成一行的n个方格,用红(Red)、粉(Pink)、绿(Green)三色涂每个格子,每格涂一色,要求任何相邻的方格不能同色,且首尾两格也不

计算机网络理论知识:IP数据报_刻苦驴啊的博客-程序员秘密

目录一、零散的知识点二、电路交换与包交换1、电路交换技术(circuit switching)2、包交换技术(packet switching)三、IP数据报1、IP协议的服务模型2、IP数据报格式3、IP数据报的选项一、零散的知识点每个数据链路层协议只涉及一个直连网,而网络层协议涉及整个网络。 网络层协议负责确定把收到的包从哪条路径转发出去(for...

您属于哪个版本的程序员[转]_weixin_34257076的博客-程序员秘密

国外开发者博客中有一篇有趣的文章,将程序员按水平像软件版本号那样划分为不同的版本。相对于在招聘时分为初级,中级,高级程序员,直接表明需要某种语言N版本的程序员或许更方便直接。根据作者的观点,可将WEB开发者大致分为以下几个版本:Alpha:阅读过一些专业书籍,大多数能用Dreamweaver或者FrontPage帮朋友制作一些Web页面。但在他们熟练掌握HTML代码以前,你大概不会雇佣他们...

【Linux】ssh 链接服务器 并 安装宝塔面板_私有ip通过ssh安装宝塔面板命令_KroneX的博客-程序员秘密

ssh 链接服务器xx 是连接 ssh 的端口号xx.xx.xx.xx 是 IP 号ssh -p xx [email protected]安装宝塔面板yum install -y wget &amp;&amp; wget -O install.sh http://download.bt.cn/install/install.sh &amp;&amp; sh install.sh解释:...